@ -37,7 +37,8 @@
# define COD INSN_COPROC_MOVE_DELAY
# define CLD INSN_COPROC_MEMORY_DELAY
# define CBL INSN_COND_BRANCH_LIKELY
# define TRAP INSN_TRAP
# define NODS INSN_NO_DELAY_SLOT
# define TRAP INSN_NO_DELAY_SLOT
# define SM INSN_STORE_MEMORY
# define WR_d INSN_WRITE_GPR_D
@ -150,13 +151,14 @@
to track dependencies of these fields .
However , " bposge32 " is a branch instruction that depends on the " pos "
field . In order to make sure that GAS does not reorder DSP instructions
that writes the " pos " field and " bposge32 " , we add DSP_VOLA ( INSN_TRAP )
attribute to those instructions that write the " pos " field . */
that writes the " pos " field and " bposge32 " , we add DSP_VOLA
( INSN_NO_DELAY_SLOT ) attribute to those instructions that write the " pos "
field . */
# define WR_a WR_HILO /* Write dsp accumulators (reuse WR_HILO) */
# define RD_a RD_HILO /* Read dsp accumulators (reuse RD_HILO) */
# define MOD_a WR_a|RD_a
# define DSP_VOLA INSN_TRAP
# define DSP_VOLA INSN_NO_DELAY_SLOT
# define D32 INSN_DSP
# define D33 INSN_DSPR2
# define D64 INSN_DSP64
@ -631,7 +633,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
/* dctr and dctw are used on the r5000. */
{ " dctr " , " o(b) " , 0xbc050000 , 0xfc1f0000 , RD_b , 0 , I3 } ,
{ " dctw " , " o(b) " , 0xbc090000 , 0xfc1f0000 , RD_b , 0 , I3 } ,
{ " deret " , " " , 0x4200001f , 0xffffffff , 0 , 0 , I32 | G2 } ,
{ " deret " , " " , 0x4200001f , 0xffffffff , NODS , 0 , I32 | G2 } ,
{ " dext " , " t,r,I,+I " , 0 , ( int ) M_DEXT , INSN_MACRO , 0 , I65 } ,
{ " dext " , " t,r,+A,+C " , 0x7c000003 , 0xfc00003f , WR_t | RD_s , 0 , I65 } ,
{ " dextm " , " t,r,+A,+G " , 0x7c000001 , 0xfc00003f , WR_t | RD_s , 0 , I65 } ,
@ -763,7 +765,7 @@ const struct mips_opcode mips_builtin_opcodes[] =
{ " ei " , " t " , 0x41606020 , 0xffe0ffff , WR_t | WR_C0 , 0 , I33 | IOCT } ,
{ " emt " , " " , 0x41600be1 , 0xffffffff , TRAP , 0 , MT32 } ,
{ " emt " , " t " , 0x41600be1 , 0xffe0ffff , TRAP | WR_t , 0 , MT32 } ,
{ " eret " , " " , 0x42000018 , 0xffffffff , 0 , 0 , I3_32 } ,
{ " eret " , " " , 0x42000018 , 0xffffffff , NODS , 0 , I3_32 } ,
{ " evpe " , " " , 0x41600021 , 0xffffffff , TRAP , 0 , MT32 } ,
{ " evpe " , " t " , 0x41600021 , 0xffe0ffff , TRAP | WR_t , 0 , MT32 } ,
{ " ext " , " t,r,+A,+C " , 0x7c000000 , 0xfc00003f , WR_t | RD_s , 0 , I33 } ,
@ -1400,19 +1402,19 @@ const struct mips_opcode mips_builtin_opcodes[] =
{ " invalidate " , " t,o(b) " , 0xb8000000 , 0xfc000000 , RD_t | RD_b , 0 , I2 } , /* same */
{ " invalidate " , " t,A(b) " , 0 , ( int ) M_SWR_AB , INSN_MACRO , 0 , I2 } , /* as swr */
{ " swxc1 " , " S,t(b) " , 0x4c000008 , 0xfc0007ff , SM | RD_S | RD_t | RD_b | FP_S , 0 , I4_33 } ,
{ " synciobdma " , " " , 0x0000008f , 0xffffffff , I NSN_SYNC , 0 , IOCT } ,
{ " syncs " , " " , 0x0000018f , 0xffffffff , I NSN_SYNC , 0 , IOCT } ,
{ " syncw " , " " , 0x0000010f , 0xffffffff , I NSN_SYNC , 0 , IOCT } ,
{ " syncws " , " " , 0x0000014f , 0xffffffff , I NSN_SYNC , 0 , IOCT } ,
{ " sync_acquire " , " " , 0x0000044f , 0xffffffff , I NSN_SYNC , 0 , I33 } ,
{ " sync_mb " , " " , 0x0000040f , 0xffffffff , I NSN_SYNC , 0 , I33 } ,
{ " sync_release " , " " , 0x0000048f , 0xffffffff , I NSN_SYNC , 0 , I33 } ,
{ " sync_rmb " , " " , 0x000004cf , 0xffffffff , I NSN_SYNC , 0 , I33 } ,
{ " sync_wmb " , " " , 0x0000010f , 0xffffffff , I NSN_SYNC , 0 , I33 } ,
{ " sync " , " " , 0x0000000f , 0xffffffff , I NSN_SYNC , 0 , I2 | G1 } ,
{ " sync " , " 1 " , 0x0000000f , 0xfffff83f , I NSN_SYNC , 0 , I32 } ,
{ " sync.p " , " " , 0x0000040f , 0xffffffff , I NSN_SYNC , 0 , I2 } ,
{ " sync.l " , " " , 0x0000000f , 0xffffffff , I NSN_SYNC , 0 , I2 } ,
{ " synciobdma " , " " , 0x0000008f , 0xffffffff , NOD S , 0 , IOCT } ,
{ " syncs " , " " , 0x0000018f , 0xffffffff , NOD S , 0 , IOCT } ,
{ " syncw " , " " , 0x0000010f , 0xffffffff , NOD S , 0 , IOCT } ,
{ " syncws " , " " , 0x0000014f , 0xffffffff , NOD S , 0 , IOCT } ,
{ " sync_acquire " , " " , 0x0000044f , 0xffffffff , NOD S , 0 , I33 } ,
{ " sync_mb " , " " , 0x0000040f , 0xffffffff , NOD S , 0 , I33 } ,
{ " sync_release " , " " , 0x0000048f , 0xffffffff , NOD S , 0 , I33 } ,
{ " sync_rmb " , " " , 0x000004cf , 0xffffffff , NOD S , 0 , I33 } ,
{ " sync_wmb " , " " , 0x0000010f , 0xffffffff , NOD S , 0 , I33 } ,
{ " sync " , " " , 0x0000000f , 0xffffffff , NOD S , 0 , I2 | G1 } ,
{ " sync " , " 1 " , 0x0000000f , 0xfffff83f , NOD S , 0 , I32 } ,
{ " sync.p " , " " , 0x0000040f , 0xffffffff , NOD S , 0 , I2 } ,
{ " sync.l " , " " , 0x0000000f , 0xffffffff , NOD S , 0 , I2 } ,
{ " synci " , " o(b) " , 0x041f0000 , 0xfc1f0000 , SM | RD_b , 0 , I33 } ,
{ " syscall " , " " , 0x0000000c , 0xffffffff , TRAP , 0 , I1 } ,
{ " syscall " , " B " , 0x0000000c , 0xfc00003f , TRAP , 0 , I1 } ,
@ -1481,9 +1483,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
{ " wacl.ob " , " Y,Z " , 0x7800003e , 0xffe007ff , RD_S | RD_T | FP_D , WR_MACC , MX | SB1 } ,
{ " wacl.ob " , " S,T " , 0x4800003e , 0xffe007ff , RD_S | RD_T , 0 , N54 } ,
{ " wacl.qh " , " Y,Z " , 0x7820003e , 0xffe007ff , RD_S | RD_T | FP_D , WR_MACC , MX } ,
{ " wait " , " " , 0x42000020 , 0xffffffff , TRAP , 0 , I3_32 } ,
{ " wait " , " J " , 0x42000020 , 0xfe00003f , TRAP , 0 , I32 | N55 } ,
{ " waiti " , " " , 0x42000020 , 0xffffffff , TRAP , 0 , L1 } ,
{ " wait " , " " , 0x42000020 , 0xffffffff , NODS , 0 , I3_32 } ,
{ " wait " , " J " , 0x42000020 , 0xfe00003f , NODS , 0 , I32 | N55 } ,
{ " waiti " , " " , 0x42000020 , 0xffffffff , NODS , 0 , L1 } ,
{ " wrpgpr " , " d,w " , 0x41c00000 , 0xffe007ff , RD_t , 0 , I33 } ,
{ " wsbh " , " d,w " , 0x7c0000a0 , 0xffe007ff , WR_d | RD_t , 0 , I33 } ,
{ " xor " , " d,v,t " , 0x00000026 , 0xfc0007ff , WR_d | RD_s | RD_t , 0 , I1 } ,
@ -1496,8 +1498,8 @@ const struct mips_opcode mips_builtin_opcodes[] =
{ " xor.ob " , " D,S,k " , 0x4bc0000d , 0xffe0003f , WR_D | RD_S | RD_T , 0 , N54 } ,
{ " xor.qh " , " X,Y,Q " , 0x7820000d , 0xfc20003f , WR_D | RD_S | RD_T | FP_D , 0 , MX } ,
{ " xori " , " t,r,i " , 0x38000000 , 0xfc000000 , WR_t | RD_s , 0 , I1 } ,
{ " yield " , " s " , 0x7c000009 , 0xfc1fffff , TRAP | RD_s , 0 , MT32 } ,
{ " yield " , " d,s " , 0x7c000009 , 0xfc1f07ff , TRAP | WR_d | RD_s , 0 , MT32 } ,
{ " yield " , " s " , 0x7c000009 , 0xfc1fffff , NODS | RD_s , 0 , MT32 } ,
{ " yield " , " d,s " , 0x7c000009 , 0xfc1f07ff , NODS | WR_d | RD_s , 0 , MT32 } ,
/* User Defined Instruction. */
{ " udi0 " , " s,t,d,+1 " , 0x70000010 , 0xfc00003f , WR_d | RD_s | RD_t , 0 , I33 } ,