
/* Defines for some PowerPC instructions, usefull for dynarecs /AmiDog */

#define lis(rD, value)             0x3C000000 | (rD << 21) | (value & 0x0000ffff)
#define ori(rA, rS, value)         0x60000000 | (rS << 21) | (rA << 16) | (value & 0x0000ffff)
#define stw(rS, d, rA)             0x90000000 | (rS << 21) | (rA << 16) | (d & 0x0000ffff)
#define b(offset)                  0x48000000 | (offset & 0x03fffffc)
#define mr(rA, rS)                 0x7C000378 | (rS << 21) | (rA << 16) | (rS << 11)
#define addi(rD, rA, value)        0x38000000 | (rD << 21) | (rA << 16) | (value & 0x0000ffff)
#define or(rA, rS, rB)             0x7C000378 | (rS << 21) | (rA << 16) | (rB << 11)
#define lwz(rD, d, rA)             0x80000000 | (rD << 21) | (rA << 16) | (d & 0x0000ffff)
#define add(rD, rA, rB)            0x7C000214 | (rD << 21) | (rA << 16) | (rB << 11)
#define cmpl(crfD, rA, rB)         0x7C000040 | (crfD << 21) | (rA << 16) | (rB << 11)
#define bc(BO, BI, target)         0x40000000 | (BO << 21) | (BI << 16) | (target & 0x0000fffc)
#define li(rD, value)              0x38000000 | (rD << 21) | (value & 0x0000ffff)
#define blrl()                     0x4E800021
#define mtlr(rD)                   0x7C0803A6 | (rD << 21)
#define andi(rA, rS, value)        0x70000000 | (rS << 21) | (rA << 16) | (value & 0x0000ffff)
#define nor(rA, rS, rB)            0x7C0000F8 | (rS << 21) | (rA << 16) | (rB << 11)
#define xor(rA, rS, rB)            0x7C000278 | (rS << 21) | (rA << 16) | (rB << 11)
#define and(rA, rS, rB)            0x7C000038 | (rS << 21) | (rA << 16) | (rB << 11)
#define xori(rA, rS, value)        0x68000000 | (rS << 21) | (rA << 16) | (value & 0x0000ffff)
#define slw(rA, rS, rB)            0x7C000030 | (rS << 21) | (rA << 16) | (rB << 11)
#define srw(rA, rS, rB)            0x7C000430 | (rS << 21) | (rA << 16) | (rB << 11)
#define cmpi(crfD, rA, value)      0x2C000000 | (crfD << 21) | (rA << 16) | (value & 0x0000ffff)
#define subf(rD, rA, rB)           0x7C000050 | (rD << 21) | (rA << 16) | (rB << 11)
#define sraw(rA, rS, rB)           0x7C000630 | (rS << 21) | (rA << 16) | (rB << 11)
#define divw(rD, rA, rB)           0x7C0003D6 | (rD << 21) | (rA << 16) | (rB << 11)
#define divwu(rD, rA, rB)          0x7C000396 | (rD << 21) | (rA << 16) | (rB << 11)
#define mullw(rD, rA, rB)          0x7C0001D6 | (rD << 21) | (rA << 16) | (rB << 11)
#define cmpli(crfD, rA, value)     0x28000000 | (crfD << 21) | (rA << 16) | (value & 0x0000ffff)
#define cmp(crfD, rA, rB)          0x7C000000 | (crfD << 21) | (rA << 16) | (rB << 11)
#define mulhw(rD, rA, rB)          0x7C000096 | (rD << 21) | (rA << 16) | (rB << 11)
#define mulhwu(rD, rA, rB)         0x7C000016 | (rD << 21) | (rA << 16) | (rB << 11)
#define mfcr(rD)                   0x7C000026 | (rD << 21)
#define rlwinm(rA, rS, SH, MB, ME) 0x54000000 | (rS << 21) | (rA << 16) | (SH << 11) | (MB << 6) | (ME << 1)
#define mflr(rD)                   0x7C0802A6 | (rD << 21)
#define blr()                      0x4E800020
#define stwu(rS, d, rA)            0x94000000 | (rS << 21) | (rA << 16) | (d & 0x0000ffff)
#define extsb(rA, rS)              0x7C000774 | (rS << 21) | (rA << 16)
#define extsh(rA, rS)              0x7C000734 | (rS << 21) | (rA << 16)
#define mtcr(rS)                   0x7C0FF120 | (rS << 21)
#define subfc(rD, rA, rB)          0x7C000010 | (rD << 21) | (rA << 16) | (rB << 11)
#define subfe(rD, rA, rB)          0x7C000110 | (rD << 21) | (rA << 16) | (rB << 11)
#define neg(rD, rA)                0x7C0000D0 | (rD << 21) | (rA << 16)

