home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 5 / CD_Magazyn_EXEC_nr_5.iso / Programy / Programowanie / PPC / ppcmacros.i < prev    next >
Encoding:
Text File  |  2001-02-28  |  13.3 KB  |  509 lines

  1.                 .ifndef    POWERPC_PPCMACROS_I
  2. .set     POWERPC_PPCMACROS_I,1
  3.  
  4. **
  5. **      0xVER: PPCmacros.i 8.0 (3.6.97)
  6. **
  7. **      standard macros and definitions for PowerPC
  8. **
  9.  
  10. .macro       BITDEFPPC
  11. \1P_\2    =       \3
  12. \1B_\2    =       31-(\3)
  13. \1F_\2    =       1<<(31-(\3))
  14.                 .endm
  15.  
  16. .macro     ALLOCPPCMEM
  17.                 movem.l d1/a0/a1/a6,-(sp)
  18.                 move.l  _SysBase,a6
  19.                 add.l   #56,d0
  20.                 jsr     -684(a6)
  21.                 move.l  d0,d1
  22.                 beq     lb_1
  23.                 add.l   #39,d0
  24.                 and.l   #0xffffffe0,d0
  25.                 move.l  d0,a0
  26.                 move.l  d1,-4(a0)
  27. lb_1:
  28.                 movem.l (sp)+,d1/a0/a1/a6
  29.                 .endm
  30.  
  31. .macro      FREEPPCMEM
  32.                 movem.l d0/d1/a0/a1/a6,-(sp)
  33.                 move.l  a1,d0
  34.                 beq.b   lb_2
  35.                 move.l  -4(a1),a1
  36.                 move.l  _SysBase,a6
  37.                 jsr     -690(a6)
  38. lb_2:
  39.                 movem.l (sp)+,d0/d1/a0/a1/a6
  40.                 .endm
  41.  
  42.                 .set _POWERMODE,1
  43.                 .ifdef     _POWERMODE
  44.  
  45.                 .ifndef    __LOCALSIZE
  46. .set     __LOCALSIZE,1024
  47.                 .endif
  48.                 .ifndef    local
  49. .set     __LOCAL,r13
  50. .set       local,r13
  51.                 .endif
  52. .set        base,r2
  53. .set       stack,r1
  54. .set       trash,r0
  55.  
  56. **** these register symbols can be used when transferring parameters from
  57. **** 68K to PPC and vice versa
  58.  
  59. .set         _d0,r3
  60. .set         _d1,r4
  61. .set         _d2,r22
  62. .set         _d3,r23
  63. .set         _d4,r24
  64. .set         _d5,r25
  65. .set         _d6,r26
  66. .set         _d7,r27
  67. .set         _a0,r5
  68. .set         _a1,r6
  69. .set         _a2,r28
  70. .set         _a3,r29
  71. .set         _a4,base
  72. .set         _a5,r30
  73. .set         _a6,r31
  74.  
  75. .set        _fp0,f1
  76. .set        _fp1,f2
  77. .set        _fp2,f3
  78. .set        _fp3,f4
  79. .set        _fp4,f5
  80. .set        _fp5,f6
  81. .set        _fp6,f7
  82. .set        _fp7,f8
  83.  
  84. .macro        lw
  85.                         .ifdef    NEAR
  86.                                 lwz     \1,\2(base)
  87.                         .elseif
  88.                                 la      \1,\2
  89.                                 lwz     \1,0(\1)
  90.                         .endif
  91.                 .endm
  92.  
  93. .macro        lh
  94.                         .ifdef    NEAR
  95.                                 lhz     \1,\2(base)
  96.                         .elseif
  97.                                 la      \1,\2
  98.                                 lhz     \1,0(\1)
  99.                         .endif
  100.                 .endm
  101.  
  102. .macro       lhs
  103.                         .ifdef    NEAR
  104.                                 lha     \1,\2(base)
  105.                         .elseif
  106.                                 la      \1,\2
  107.                                 lha     \1,0(\1)
  108.                         .endif
  109.                 .endm
  110.  
  111. .macro        lb
  112.                         .ifdef    NEAR
  113.                                 lbz     \1,\2(base)
  114.                         .elseif
  115.                                 la      \1,\2
  116.                                 lbz     \1,0(\1)
  117.                         .endif
  118.                 .endm
  119.  
  120. .macro       lbs
  121.                         .ifdef    NEAR
  122.                                 lbz     \1,\2(base)
  123.                                 extsb   \1,\1
  124.                         .elseif
  125.                                 la      \1,\2
  126.                                 lbz     \1,0(\1)
  127.                                 extsb   \1,\1
  128.                         .endif
  129.                 .endm
  130.  
  131. .macro        lf
  132.                         .ifdef    NEAR
  133.                                 lfd     \1,\2(base)
  134.                         .elseif
  135.                                 mr      trash,r3
  136.                                 la      r3,\2
  137.                                 lfd     \1,0(r3)
  138.                                 mr      r3,trash
  139.                         .endif
  140.                 .endm
  141.  
  142. .macro        ls
  143.                         .ifdef    NEAR
  144.                                 lfs     \1,\2(base)
  145.                         .elseif
  146.                                 mr      trash,r3
  147.                                 la      r3,\2
  148.                                 lfs     \1,0(r3)
  149.                                 mr      r3,trash
  150.                         .endif
  151.                 .endm
  152.  
  153. .macro        sw
  154.                         .ifdef    NEAR
  155.                                 stw     \1,\2(base)
  156.                         .elseif
  157.                                 mr      trash,\1
  158.                                 la      \1,\2
  159.                                 stw     trash,0(\1)
  160.                                 mr      \1,trash
  161.                         .endif
  162.                 .endm
  163.  
  164. .macro        sh
  165.                         .ifdef    NEAR
  166.                                 sth     \1,\2(base)
  167.                         .elseif
  168.                                 mr      trash,\1
  169.                                 la      \1,\2
  170.                                 sth     trash,0(\1)
  171.                                 mr      \1,trash
  172.                         .endif
  173.                 .endm
  174.  
  175. .macro        sb
  176.                         .ifdef    NEAR
  177.                                 stb     \1,\2(base)
  178.                         .elseif
  179.                                 mr      trash,\1
  180.                                 la      \1,\2
  181.                                 stb     trash,0(\1)
  182.                                 mr      \1,trash
  183.                         .endif
  184.                 .endm
  185.  
  186. .macro        sf
  187.                         .ifdef    NEAR
  188.                                 stfd    \1,\2(base)
  189.                         .elseif
  190.                                 mr      trash,r3
  191.                                 la      r3,\2
  192.                                 stfd    \1,0(r3)
  193.                                 mr      r3,trash
  194.                         .endif
  195.                 .endm
  196.  
  197. .macro        ss
  198.                         .ifdef    NEAR
  199.                                 stfs    \1,\2(base)
  200.                         .elseif
  201.                                 mr      trash,r3
  202.                                 la      r3,\2
  203.                                 stfs    \1,0(r3)
  204.                                 mr      r3,trash
  205.                         .endif
  206.                 .endm
  207.  
  208. .macro       lba
  209.                 lbz     \1,\2
  210.                 extsb   \1,\1
  211.                 .endm
  212.  
  213. .macro      lbau
  214.                 lbzu    \1,\2
  215.                 extsb   \1,\1
  216.                 .endm
  217.  
  218. .macro      lbax
  219.                 lbzx    \1,\2,\3
  220.                 extsb   \1,\1
  221.                 .endm
  222.  
  223. .macro     lbaux
  224.                 lbzux   \1,\2,\3
  225.                 extsb   \1,\1
  226.                 .endm
  227.  
  228. .macro      stwi
  229.                 liw     trash,\1
  230.                 stw     trash,\2
  231.                 .endm
  232.  
  233. .macro      sthi
  234.                 li      trash,\1
  235.                 sth     trash,\2
  236.                 .endm
  237.  
  238. .macro      stbi
  239.                 li      trash,\1
  240.                 stb     trash,\2
  241.                 .endm
  242.  
  243. .macro     stwiu
  244.                 liw     trash,\1
  245.                 stwu    trash,\2
  246.                 .endm
  247.  
  248. .macro     sthiu
  249.                 li      trash,\1
  250.                 sthu    trash,\2
  251.                 .endm
  252.  
  253. .macro     stbiu
  254.                 li      trash,\1
  255.                 stbu    trash,\2
  256.                 .endm
  257.  
  258. .macro     stwix
  259.                 liw     trash,\1
  260.                 stwx    trash,\2,\3
  261.                 .endm
  262.  
  263. .macro     sthix
  264.                 li      trash,\1
  265.                 sthx    trash,\2,\3
  266.                 .endm
  267.  
  268. .macro     stbix
  269.                 li      trash,\1
  270.                 stbx    trash,\2,\3
  271.                 .endm
  272.  
  273. .macro    stwiux
  274.                 liw     trash,\1
  275.                 stwux   trash,\2,\3
  276.                 .endm
  277.  
  278. .macro    sthiux
  279.                 li      trash,\1
  280.                 sthux   trash,\2,\3
  281.                 .endm
  282.  
  283. .macro    stbiux
  284.                 li      trash,\1
  285.                 stbux   trash,\2,\3
  286.                 .endm
  287.  
  288. .macro       swi
  289.                         .ifdef NEAR
  290.                                 liw     trash,\1
  291.                                 stw     trash,\2(base)
  292.                         .elseif
  293.                                 stw     r3,-4(local)
  294.                                 liw     trash,\1
  295.                                 la      r3,\2
  296.                                 stw     trash,0(r3)
  297.                                 lwz     r3,-4(local)
  298.                         .endif
  299.                 .endm
  300.  
  301. .macro       shi
  302.                         .ifdef    NEAR
  303.                                 li      trash,\1
  304.                                 sth     trash,\2(base)
  305.                         .elseif
  306.                                 stw     r3,-4(local)
  307.                                 li      trash,\1
  308.                                 la      r3,\2
  309.                                 sth     trash,0(r3)
  310.                                 lwz     r3,-4(local)
  311.                         .endif
  312.                 .endm
  313.  
  314. .macro       sbi
  315.                         .ifdef    NEAR
  316.                                 li      trash,\1
  317.                                 stb     trash,\2(base)
  318.                         .elseif
  319.                                 stw     r3,-4(local)
  320.                                 li      trash,\1
  321.                                 la      r3,\2
  322.                                 stb     trash,0(r3)
  323.                                 lwz     r3,-4(local)
  324.                         .endif
  325.                 .endm
  326.  
  327. .macro       liw
  328.                 lis     \1,\2@ha
  329.                 ori     \1,\1,\2@l
  330.                 .endm
  331.  
  332. .macro      clrw
  333.                 xor\0   \1,\1,\1
  334.                 .endm
  335.  
  336. .macro      clrh
  337.                 clrrwi\0 \1,\1,16
  338.                 .endm
  339.  
  340. .macro      clrb
  341.                 clrrwi\0 \1,\1,8
  342.                 .endm
  343.  
  344. .macro      setb
  345.                 ori     \1,\1,0xff
  346.                 .endm
  347.  
  348. .macro      seth
  349.                 ori     \1,\1,0xffff
  350.                 .endm
  351.  
  352. .macro      setw
  353.                 eqv\0   \1,\1,\1
  354.                 .endm
  355.  
  356. .macro        mh
  357.                 insrwi\0 \1,\2,16,16
  358.                 .endm
  359.  
  360. .macro        mb
  361.                 insrwi\0 \1,\2,8,24
  362.                 .endm
  363.  
  364. .macro      tstb
  365.                 extsb.  trash,\1
  366.                 .endm
  367.  
  368. .macro      tsth
  369.                 extsh.  trash,\1
  370.                 .endm
  371.  
  372. .macro      tstw
  373.                 mr.     \1,\1
  374.                 .endm
  375.  
  376. .macro    bittst
  377.                 .iflt    (\2)-31
  378.                         extrwi. trash,\1,1,\2
  379.                 .elseif
  380.                         andi.   trash,\1,0x1
  381.                 .endif
  382.                 .endm
  383.  
  384. .macro    bitset
  385.                 .iflt    (\2)-16
  386.                         oris    \1,\1,(1<<(15-(\2)))
  387.                 .elseif
  388.                         ori     \1,\1,(1<<(31-(\2)))
  389.                 .endif
  390.                 .endm
  391.  
  392. .macro    bitclr
  393.                 .iflt    (\2)-16
  394.                         oris    \1,\1,(1<<(15-(\2)))
  395.                         xoris   \1,\1,(1<<(15-(\2)))
  396.                 .elseif
  397.                         ori     \1,\1,(1<<(31-(\2)))
  398.                         xori    \1,\1,(1<<(31-(\2)))
  399.                 .endif
  400.                 .endm
  401.  
  402. .macro    bitchg
  403.                 .iflt    (\2)-16
  404.                         xoris   \1,\1,(1<<(15-(\2)))
  405.                 .elseif
  406.                         xori    \1,\1,(1<<(31-(\2)))
  407.                 .endif
  408.                 .endm
  409.  
  410. .macro      push
  411.                 stwu    \1,-4(local)
  412.                 .endm
  413.  
  414. .macro     pushf
  415.                 stfdu   \1,-8(local)
  416.                 .endm
  417.  
  418. .macro    pushlr
  419.                 mflr    trash
  420.                 stwu    trash,-4(local)
  421.                 .endm
  422.  
  423. .macro   pushctr
  424.                 mfctr   trash
  425.                 stwu    trash,-4(local)
  426.                 .endm
  427.  
  428. .macro    pushcr
  429.                 mfcr    trash
  430.                 stwu    trash,-4(local)
  431.                 .endm
  432.  
  433. .macro       pop
  434.                 lwz     \1,0(local)
  435.                 addi    local,local,4
  436.                 .endm
  437.  
  438. .macro      popf
  439.                 lfd     \1,0(local)
  440.                 addi    local,local,8
  441.                 .endm
  442.  
  443. .macro     poplr
  444.                 lwz     trash,0(local)
  445.                 addi    local,local,4
  446.                 mtlr    trash
  447.                 .endm
  448.  
  449. .macro    popctr
  450.                 lwz     trash,0(local)
  451.                 addi    local,local,4
  452.                 mtctr   trash
  453.                 .endm
  454.  
  455. .macro     popcr
  456.                 lwz     trash,0(local)
  457.                 addi    local,local,4
  458.                 mtcr    trash
  459.                 .endm
  460.  
  461. .macro       lnk
  462.                 stwu    \1,-4(local)
  463.                 mr      \1,local
  464.                 addi    local,local,\2
  465.                 .endm
  466.  
  467. .macro      ulnk
  468.                 mr      local,\1
  469.                 lwz     \1,0(local)
  470.                 addi    local,local,4
  471.                 .endm
  472.  
  473.  
  474. .macro  setlocal
  475. .set     __LOCALSIZE,\1
  476. .set     __LOCAL,\2
  477. .set       local,\2
  478.                 .endm
  479.  
  480. .macro    prolog
  481.                 stw     base,20(stack)
  482.                 mflr    trash
  483.                 stw     trash,8(stack)
  484.                 mfcr    trash
  485.                 stw     trash,4(stack)
  486.                 stw     local,-4(stack)
  487.                 subi    local,stack,4
  488. .set      __ARGS,24+4+(__LOCALSIZE)+56
  489.                         stwu    stack,-((__ARGS)-56)(stack)
  490.                 .endm
  491.  
  492. .macro    epilog
  493.                 lwz     stack,0(stack)
  494.                 lwz     local,-4(stack)
  495.                 lwz     trash,8(stack)
  496.                 mtlr    trash
  497.                 lwz     trash,4(stack)
  498.                 mtcr    trash
  499.                 lwz     base,20(stack)
  500.                 blr
  501.                 .endm
  502.  
  503.                 .endif
  504.  
  505.                 .endif
  506.  
  507.  
  508.  
  509.