/[dotgnu-pnet]/pnet/engine/ppc_codegen.h
ViewVC logotype

Diff of /pnet/engine/ppc_codegen.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by t3rmin4t0r, Sun Dec 19 11:22:54 2004 UTC revision 1.5 by t3rmin4t0r, Mon Dec 20 09:05:46 2004 UTC
# Line 220  typedef unsigned int *ppc_inst_ptr; Line 220  typedef unsigned int *ppc_inst_ptr;
220  #define ppc_alu_reg_imm(inst, opc, dreg, sreg, imm) \  #define ppc_alu_reg_imm(inst, opc, dreg, sreg, imm) \
221                  do {\                  do {\
222                          int __value = (int)(imm);\                          int __value = (int)(imm);\
223                          if(__value >= -0x8000 && __value <= 0xFFFF) \                          if(__value >= -0x8000 && __value <= 0x7FFF) \
224                          {\                          {\
225                                  *(inst)++ = ((((unsigned int)(opc))<<   26) \                                  *(inst)++ = ((((unsigned int)(opc))<<   26) \
226                                                                  | (((unsigned int)(dreg)) << 21) \                                                                  | (((unsigned int)(dreg)) << 21) \
# Line 433  typedef unsigned int *ppc_inst_ptr; Line 433  typedef unsigned int *ppc_inst_ptr;
433   */   */
434  #define ppc_jump(inst, target)  \  #define ppc_jump(inst, target)  \
435                          do { \                          do { \
436                                  int __ld_offset = (ppc_inst_ptr)(target) - ((inst) + 1);\                                  int __ld_offset = (target == 0) ? 0 : \
437                                  if(__ld_offset >= -0x8000 && __ld_offset <= 0xFFFF)\                                                                          (ppc_inst_ptr)(target) - ((inst) + 1);\
438                                    if(__ld_offset >= -0x8000 && __ld_offset <= 0x7FFF)\
439                                  {\                                  {\
440                                          *(inst)++ = ((18 << 26) | \                                          *(inst)++ = ((18 << 26) | \
441                                                                          (((unsigned int)__ld_offset) << 2));\                                                                  ((((unsigned int)__ld_offset) & 0xFFFF) << 2));\
442                                  }\                                  }\
443                                  else\                                  else\
444                                  {\                                  {\
# Line 465  typedef unsigned int *ppc_inst_ptr; Line 466  typedef unsigned int *ppc_inst_ptr;
466   */   */
467  #define ppc_branch(inst,cond,target)    \  #define ppc_branch(inst,cond,target)    \
468                          do { \                          do { \
469                                  TODO_trap(inst);\                                  int __ld_offset = (target == 0 ) ? 0 : \
470                                                                    (ppc_inst_ptr)(target) - ((inst) + 1);\
471                                    if(__ld_offset >= -0x8000 && __ld_offset <= 0x7FFF)\
472                                    {\
473                                            *(inst)++ = ((16 << 26) \
474                                                                    | (((unsigned int)(cond)) << 16) \
475                                                                    | ((((unsigned int)__ld_offset) & 0xFFFF) << 2));\
476                                    }\
477                                    else\
478                                    {\
479                                            TODO_trap(inst);\
480                                    }\
481                          } while (0)                          } while (0)
482    
483  /*  /*
# Line 473  typedef unsigned int *ppc_inst_ptr; Line 485  typedef unsigned int *ppc_inst_ptr;
485   */   */
486  #define ppc_patch(patch, inst) \  #define ppc_patch(patch, inst) \
487                          do {\                          do {\
488                                  TODO_trap(inst);\                                   ppc_inst_ptr __patch = (ppc_inst_ptr)(patch);\
489                                     int __ld_offset = (inst) - (__patch);\
490                                     if(__ld_offset < -0x8000 && __ld_offset > 0x7FFF)\
491                                     {\
492                                            TODO_trap(inst);\
493                                     }\
494                                     if(((*__patch) & (63 << 26)) == (16 << 26)) \
495                                     {\
496                                            (*__patch) = (*__patch) & ((~0xFFFF) | 3);\
497                                            (*__patch) = ((*__patch) | \
498                                                                    ((((unsigned int)__ld_offset) & 0xFFFF) << 2));\
499                                     }\
500                                     else if(((*__patch) & (63 << 26)) == (18 << 26))\
501                                     {\
502                                            (*__patch) = (*__patch) & ((~0x3FFFFFF) | 3);\
503                                            (*__patch) = ((*__patch) | \
504                                                                    ((((unsigned int)__ld_offset) & 0xFFFFFF) << 2));\
505                                     }\
506                          } while(0);                          } while(0);
507    
508  /*  /*
# Line 564  typedef unsigned int *ppc_inst_ptr; Line 593  typedef unsigned int *ppc_inst_ptr;
593  #define ppc_alu_addc_imm(inst, dreg, sreg, imm) \  #define ppc_alu_addc_imm(inst, dreg, sreg, imm) \
594                  do {\                  do {\
595                          int __value = (int)(imm);\                          int __value = (int)(imm);\
596                          if(__value >= -0x8000 && __value <= 0xFFFF) \                          if(__value >= -0x8000 && __value <= 0x7FFF) \
597                          {\                          {\
598                                  *(inst)++ = ((21 <<     26) \                                  *(inst)++ = ((21 <<     26) \
599                                                                  | (((unsigned int)(dreg)) << 21) \                                                                  | (((unsigned int)(dreg)) << 21) \

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26