Revision bf4120ad
b/target-mips/translate.c | ||
---|---|---|
354 | 354 |
/* Coprocessor 1 (rs field) */ |
355 | 355 |
#define MASK_CP1(op) MASK_OP_MAJOR(op) | (op & (0x1F << 21)) |
356 | 356 |
|
357 |
/* Values for the fmt field in FP instructions */ |
|
358 |
enum { |
|
359 |
/* 0 - 15 are reserved */ |
|
360 |
FMT_S = 16, |
|
361 |
FMT_D = 17, |
|
362 |
FMT_E = 18, |
|
363 |
FMT_Q = 19, |
|
364 |
FMT_W = 20, |
|
365 |
FMT_L = 21, |
|
366 |
FMT_PS = 22, |
|
367 |
/* 23 - 31 are reserved */ |
|
368 |
}; |
|
369 |
|
|
357 | 370 |
enum { |
358 | 371 |
OPC_MFC1 = (0x00 << 21) | OPC_CP1, |
359 | 372 |
OPC_DMFC1 = (0x01 << 21) | OPC_CP1, |
... | ... | |
366 | 379 |
OPC_BC1 = (0x08 << 21) | OPC_CP1, /* bc */ |
367 | 380 |
OPC_BC1ANY2 = (0x09 << 21) | OPC_CP1, |
368 | 381 |
OPC_BC1ANY4 = (0x0A << 21) | OPC_CP1, |
369 |
OPC_S_FMT = (0x10 << 21) | OPC_CP1, /* 16: fmt=single fp */
|
|
370 |
OPC_D_FMT = (0x11 << 21) | OPC_CP1, /* 17: fmt=double fp */
|
|
371 |
OPC_E_FMT = (0x12 << 21) | OPC_CP1, /* 18: fmt=extended fp */
|
|
372 |
OPC_Q_FMT = (0x13 << 21) | OPC_CP1, /* 19: fmt=quad fp */
|
|
373 |
OPC_W_FMT = (0x14 << 21) | OPC_CP1, /* 20: fmt=32bit fixed */
|
|
374 |
OPC_L_FMT = (0x15 << 21) | OPC_CP1, /* 21: fmt=64bit fixed */
|
|
375 |
OPC_PS_FMT = (0x16 << 21) | OPC_CP1, /* 22: fmt=paired single fp */
|
|
382 |
OPC_S_FMT = (FMT_S << 21) | OPC_CP1, /* 16: fmt=single fp */
|
|
383 |
OPC_D_FMT = (FMT_D << 21) | OPC_CP1, /* 17: fmt=double fp */
|
|
384 |
OPC_E_FMT = (FMT_E << 21) | OPC_CP1, /* 18: fmt=extended fp */
|
|
385 |
OPC_Q_FMT = (FMT_Q << 21) | OPC_CP1, /* 19: fmt=quad fp */
|
|
386 |
OPC_W_FMT = (FMT_W << 21) | OPC_CP1, /* 20: fmt=32bit fixed */
|
|
387 |
OPC_L_FMT = (FMT_L << 21) | OPC_CP1, /* 21: fmt=64bit fixed */
|
|
388 |
OPC_PS_FMT = (FMT_PS << 21) | OPC_CP1, /* 22: fmt=paired single fp */
|
|
376 | 389 |
}; |
377 | 390 |
|
378 | 391 |
#define MASK_CP1_FUNC(op) MASK_CP1(op) | (op & 0x3F) |
... | ... | |
5714 | 5727 |
|
5715 | 5728 |
#define FOP(func, fmt) (((fmt) << 21) | (func)) |
5716 | 5729 |
|
5730 |
enum fopcode { |
|
5731 |
OPC_ADD_S = FOP(0, FMT_S), |
|
5732 |
OPC_SUB_S = FOP(1, FMT_S), |
|
5733 |
OPC_MUL_S = FOP(2, FMT_S), |
|
5734 |
OPC_DIV_S = FOP(3, FMT_S), |
|
5735 |
OPC_SQRT_S = FOP(4, FMT_S), |
|
5736 |
OPC_ABS_S = FOP(5, FMT_S), |
|
5737 |
OPC_MOV_S = FOP(6, FMT_S), |
|
5738 |
OPC_NEG_S = FOP(7, FMT_S), |
|
5739 |
OPC_ROUND_L_S = FOP(8, FMT_S), |
|
5740 |
OPC_TRUNC_L_S = FOP(9, FMT_S), |
|
5741 |
OPC_CEIL_L_S = FOP(10, FMT_S), |
|
5742 |
OPC_FLOOR_L_S = FOP(11, FMT_S), |
|
5743 |
OPC_ROUND_W_S = FOP(12, FMT_S), |
|
5744 |
OPC_TRUNC_W_S = FOP(13, FMT_S), |
|
5745 |
OPC_CEIL_W_S = FOP(14, FMT_S), |
|
5746 |
OPC_FLOOR_W_S = FOP(15, FMT_S), |
|
5747 |
OPC_MOVCF_S = FOP(17, FMT_S), |
|
5748 |
OPC_MOVZ_S = FOP(18, FMT_S), |
|
5749 |
OPC_MOVN_S = FOP(19, FMT_S), |
|
5750 |
OPC_RECIP_S = FOP(21, FMT_S), |
|
5751 |
OPC_RSQRT_S = FOP(22, FMT_S), |
|
5752 |
OPC_RECIP2_S = FOP(28, FMT_S), |
|
5753 |
OPC_RECIP1_S = FOP(29, FMT_S), |
|
5754 |
OPC_RSQRT1_S = FOP(30, FMT_S), |
|
5755 |
OPC_RSQRT2_S = FOP(31, FMT_S), |
|
5756 |
OPC_CVT_D_S = FOP(33, FMT_S), |
|
5757 |
OPC_CVT_W_S = FOP(36, FMT_S), |
|
5758 |
OPC_CVT_L_S = FOP(37, FMT_S), |
|
5759 |
OPC_CVT_PS_S = FOP(38, FMT_S), |
|
5760 |
OPC_CMP_F_S = FOP (48, FMT_S), |
|
5761 |
OPC_CMP_UN_S = FOP (49, FMT_S), |
|
5762 |
OPC_CMP_EQ_S = FOP (50, FMT_S), |
|
5763 |
OPC_CMP_UEQ_S = FOP (51, FMT_S), |
|
5764 |
OPC_CMP_OLT_S = FOP (52, FMT_S), |
|
5765 |
OPC_CMP_ULT_S = FOP (53, FMT_S), |
|
5766 |
OPC_CMP_OLE_S = FOP (54, FMT_S), |
|
5767 |
OPC_CMP_ULE_S = FOP (55, FMT_S), |
|
5768 |
OPC_CMP_SF_S = FOP (56, FMT_S), |
|
5769 |
OPC_CMP_NGLE_S = FOP (57, FMT_S), |
|
5770 |
OPC_CMP_SEQ_S = FOP (58, FMT_S), |
|
5771 |
OPC_CMP_NGL_S = FOP (59, FMT_S), |
|
5772 |
OPC_CMP_LT_S = FOP (60, FMT_S), |
|
5773 |
OPC_CMP_NGE_S = FOP (61, FMT_S), |
|
5774 |
OPC_CMP_LE_S = FOP (62, FMT_S), |
|
5775 |
OPC_CMP_NGT_S = FOP (63, FMT_S), |
|
5776 |
|
|
5777 |
OPC_ADD_D = FOP(0, FMT_D), |
|
5778 |
OPC_SUB_D = FOP(1, FMT_D), |
|
5779 |
OPC_MUL_D = FOP(2, FMT_D), |
|
5780 |
OPC_DIV_D = FOP(3, FMT_D), |
|
5781 |
OPC_SQRT_D = FOP(4, FMT_D), |
|
5782 |
OPC_ABS_D = FOP(5, FMT_D), |
|
5783 |
OPC_MOV_D = FOP(6, FMT_D), |
|
5784 |
OPC_NEG_D = FOP(7, FMT_D), |
|
5785 |
OPC_ROUND_L_D = FOP(8, FMT_D), |
|
5786 |
OPC_TRUNC_L_D = FOP(9, FMT_D), |
|
5787 |
OPC_CEIL_L_D = FOP(10, FMT_D), |
|
5788 |
OPC_FLOOR_L_D = FOP(11, FMT_D), |
|
5789 |
OPC_ROUND_W_D = FOP(12, FMT_D), |
|
5790 |
OPC_TRUNC_W_D = FOP(13, FMT_D), |
|
5791 |
OPC_CEIL_W_D = FOP(14, FMT_D), |
|
5792 |
OPC_FLOOR_W_D = FOP(15, FMT_D), |
|
5793 |
OPC_MOVCF_D = FOP(17, FMT_D), |
|
5794 |
OPC_MOVZ_D = FOP(18, FMT_D), |
|
5795 |
OPC_MOVN_D = FOP(19, FMT_D), |
|
5796 |
OPC_RECIP_D = FOP(21, FMT_D), |
|
5797 |
OPC_RSQRT_D = FOP(22, FMT_D), |
|
5798 |
OPC_RECIP2_D = FOP(28, FMT_D), |
|
5799 |
OPC_RECIP1_D = FOP(29, FMT_D), |
|
5800 |
OPC_RSQRT1_D = FOP(30, FMT_D), |
|
5801 |
OPC_RSQRT2_D = FOP(31, FMT_D), |
|
5802 |
OPC_CVT_S_D = FOP(32, FMT_D), |
|
5803 |
OPC_CVT_W_D = FOP(36, FMT_D), |
|
5804 |
OPC_CVT_L_D = FOP(37, FMT_D), |
|
5805 |
OPC_CMP_F_D = FOP (48, FMT_D), |
|
5806 |
OPC_CMP_UN_D = FOP (49, FMT_D), |
|
5807 |
OPC_CMP_EQ_D = FOP (50, FMT_D), |
|
5808 |
OPC_CMP_UEQ_D = FOP (51, FMT_D), |
|
5809 |
OPC_CMP_OLT_D = FOP (52, FMT_D), |
|
5810 |
OPC_CMP_ULT_D = FOP (53, FMT_D), |
|
5811 |
OPC_CMP_OLE_D = FOP (54, FMT_D), |
|
5812 |
OPC_CMP_ULE_D = FOP (55, FMT_D), |
|
5813 |
OPC_CMP_SF_D = FOP (56, FMT_D), |
|
5814 |
OPC_CMP_NGLE_D = FOP (57, FMT_D), |
|
5815 |
OPC_CMP_SEQ_D = FOP (58, FMT_D), |
|
5816 |
OPC_CMP_NGL_D = FOP (59, FMT_D), |
|
5817 |
OPC_CMP_LT_D = FOP (60, FMT_D), |
|
5818 |
OPC_CMP_NGE_D = FOP (61, FMT_D), |
|
5819 |
OPC_CMP_LE_D = FOP (62, FMT_D), |
|
5820 |
OPC_CMP_NGT_D = FOP (63, FMT_D), |
|
5821 |
|
|
5822 |
OPC_CVT_S_W = FOP(32, FMT_W), |
|
5823 |
OPC_CVT_D_W = FOP(33, FMT_W), |
|
5824 |
OPC_CVT_S_L = FOP(32, FMT_L), |
|
5825 |
OPC_CVT_D_L = FOP(33, FMT_L), |
|
5826 |
OPC_CVT_PS_PW = FOP(38, FMT_W), |
|
5827 |
|
|
5828 |
OPC_ADD_PS = FOP(0, FMT_PS), |
|
5829 |
OPC_SUB_PS = FOP(1, FMT_PS), |
|
5830 |
OPC_MUL_PS = FOP(2, FMT_PS), |
|
5831 |
OPC_DIV_PS = FOP(3, FMT_PS), |
|
5832 |
OPC_ABS_PS = FOP(5, FMT_PS), |
|
5833 |
OPC_MOV_PS = FOP(6, FMT_PS), |
|
5834 |
OPC_NEG_PS = FOP(7, FMT_PS), |
|
5835 |
OPC_MOVCF_PS = FOP(17, FMT_PS), |
|
5836 |
OPC_MOVZ_PS = FOP(18, FMT_PS), |
|
5837 |
OPC_MOVN_PS = FOP(19, FMT_PS), |
|
5838 |
OPC_ADDR_PS = FOP(24, FMT_PS), |
|
5839 |
OPC_MULR_PS = FOP(26, FMT_PS), |
|
5840 |
OPC_RECIP2_PS = FOP(28, FMT_PS), |
|
5841 |
OPC_RECIP1_PS = FOP(29, FMT_PS), |
|
5842 |
OPC_RSQRT1_PS = FOP(30, FMT_PS), |
|
5843 |
OPC_RSQRT2_PS = FOP(31, FMT_PS), |
|
5844 |
|
|
5845 |
OPC_CVT_S_PU = FOP(32, FMT_PS), |
|
5846 |
OPC_CVT_PW_PS = FOP(36, FMT_PS), |
|
5847 |
OPC_CVT_S_PL = FOP(40, FMT_PS), |
|
5848 |
OPC_PLL_PS = FOP(44, FMT_PS), |
|
5849 |
OPC_PLU_PS = FOP(45, FMT_PS), |
|
5850 |
OPC_PUL_PS = FOP(46, FMT_PS), |
|
5851 |
OPC_PUU_PS = FOP(47, FMT_PS), |
|
5852 |
OPC_CMP_F_PS = FOP (48, FMT_PS), |
|
5853 |
OPC_CMP_UN_PS = FOP (49, FMT_PS), |
|
5854 |
OPC_CMP_EQ_PS = FOP (50, FMT_PS), |
|
5855 |
OPC_CMP_UEQ_PS = FOP (51, FMT_PS), |
|
5856 |
OPC_CMP_OLT_PS = FOP (52, FMT_PS), |
|
5857 |
OPC_CMP_ULT_PS = FOP (53, FMT_PS), |
|
5858 |
OPC_CMP_OLE_PS = FOP (54, FMT_PS), |
|
5859 |
OPC_CMP_ULE_PS = FOP (55, FMT_PS), |
|
5860 |
OPC_CMP_SF_PS = FOP (56, FMT_PS), |
|
5861 |
OPC_CMP_NGLE_PS = FOP (57, FMT_PS), |
|
5862 |
OPC_CMP_SEQ_PS = FOP (58, FMT_PS), |
|
5863 |
OPC_CMP_NGL_PS = FOP (59, FMT_PS), |
|
5864 |
OPC_CMP_LT_PS = FOP (60, FMT_PS), |
|
5865 |
OPC_CMP_NGE_PS = FOP (61, FMT_PS), |
|
5866 |
OPC_CMP_LE_PS = FOP (62, FMT_PS), |
|
5867 |
OPC_CMP_NGT_PS = FOP (63, FMT_PS), |
|
5868 |
}; |
|
5869 |
|
|
5717 | 5870 |
static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) |
5718 | 5871 |
{ |
5719 | 5872 |
const char *opn = "cp1 move"; |
... | ... | |
5894 | 6047 |
} |
5895 | 6048 |
|
5896 | 6049 |
|
5897 |
static void gen_farith (DisasContext *ctx, uint32_t op1,
|
|
6050 |
static void gen_farith (DisasContext *ctx, enum fopcode op1,
|
|
5898 | 6051 |
int ft, int fs, int fd, int cc) |
5899 | 6052 |
{ |
5900 | 6053 |
const char *opn = "farith"; |
... | ... | |
5937 | 6090 |
enum { BINOP, CMPOP, OTHEROP } optype = OTHEROP; |
5938 | 6091 |
uint32_t func = ctx->opcode & 0x3f; |
5939 | 6092 |
|
5940 |
switch (ctx->opcode & FOP(0x3f, 0x1f)) {
|
|
5941 |
case FOP(0, 16):
|
|
6093 |
switch (op1) {
|
|
6094 |
case OPC_ADD_S:
|
|
5942 | 6095 |
{ |
5943 | 6096 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
5944 | 6097 |
TCGv_i32 fp1 = tcg_temp_new_i32(); |
... | ... | |
5953 | 6106 |
opn = "add.s"; |
5954 | 6107 |
optype = BINOP; |
5955 | 6108 |
break; |
5956 |
case FOP(1, 16):
|
|
6109 |
case OPC_SUB_S:
|
|
5957 | 6110 |
{ |
5958 | 6111 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
5959 | 6112 |
TCGv_i32 fp1 = tcg_temp_new_i32(); |
... | ... | |
5968 | 6121 |
opn = "sub.s"; |
5969 | 6122 |
optype = BINOP; |
5970 | 6123 |
break; |
5971 |
case FOP(2, 16):
|
|
6124 |
case OPC_MUL_S:
|
|
5972 | 6125 |
{ |
5973 | 6126 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
5974 | 6127 |
TCGv_i32 fp1 = tcg_temp_new_i32(); |
... | ... | |
5983 | 6136 |
opn = "mul.s"; |
5984 | 6137 |
optype = BINOP; |
5985 | 6138 |
break; |
5986 |
case FOP(3, 16):
|
|
6139 |
case OPC_DIV_S:
|
|
5987 | 6140 |
{ |
5988 | 6141 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
5989 | 6142 |
TCGv_i32 fp1 = tcg_temp_new_i32(); |
... | ... | |
5998 | 6151 |
opn = "div.s"; |
5999 | 6152 |
optype = BINOP; |
6000 | 6153 |
break; |
6001 |
case FOP(4, 16):
|
|
6154 |
case OPC_SQRT_S:
|
|
6002 | 6155 |
{ |
6003 | 6156 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6004 | 6157 |
|
... | ... | |
6009 | 6162 |
} |
6010 | 6163 |
opn = "sqrt.s"; |
6011 | 6164 |
break; |
6012 |
case FOP(5, 16):
|
|
6165 |
case OPC_ABS_S:
|
|
6013 | 6166 |
{ |
6014 | 6167 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6015 | 6168 |
|
... | ... | |
6020 | 6173 |
} |
6021 | 6174 |
opn = "abs.s"; |
6022 | 6175 |
break; |
6023 |
case FOP(6, 16):
|
|
6176 |
case OPC_MOV_S:
|
|
6024 | 6177 |
{ |
6025 | 6178 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6026 | 6179 |
|
... | ... | |
6030 | 6183 |
} |
6031 | 6184 |
opn = "mov.s"; |
6032 | 6185 |
break; |
6033 |
case FOP(7, 16):
|
|
6186 |
case OPC_NEG_S:
|
|
6034 | 6187 |
{ |
6035 | 6188 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6036 | 6189 |
|
... | ... | |
6041 | 6194 |
} |
6042 | 6195 |
opn = "neg.s"; |
6043 | 6196 |
break; |
6044 |
case FOP(8, 16):
|
|
6197 |
case OPC_ROUND_L_S:
|
|
6045 | 6198 |
check_cp1_64bitmode(ctx); |
6046 | 6199 |
{ |
6047 | 6200 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6055 | 6208 |
} |
6056 | 6209 |
opn = "round.l.s"; |
6057 | 6210 |
break; |
6058 |
case FOP(9, 16):
|
|
6211 |
case OPC_TRUNC_L_S:
|
|
6059 | 6212 |
check_cp1_64bitmode(ctx); |
6060 | 6213 |
{ |
6061 | 6214 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6069 | 6222 |
} |
6070 | 6223 |
opn = "trunc.l.s"; |
6071 | 6224 |
break; |
6072 |
case FOP(10, 16):
|
|
6225 |
case OPC_CEIL_L_S:
|
|
6073 | 6226 |
check_cp1_64bitmode(ctx); |
6074 | 6227 |
{ |
6075 | 6228 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6083 | 6236 |
} |
6084 | 6237 |
opn = "ceil.l.s"; |
6085 | 6238 |
break; |
6086 |
case FOP(11, 16):
|
|
6239 |
case OPC_FLOOR_L_S:
|
|
6087 | 6240 |
check_cp1_64bitmode(ctx); |
6088 | 6241 |
{ |
6089 | 6242 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6097 | 6250 |
} |
6098 | 6251 |
opn = "floor.l.s"; |
6099 | 6252 |
break; |
6100 |
case FOP(12, 16):
|
|
6253 |
case OPC_ROUND_W_S:
|
|
6101 | 6254 |
{ |
6102 | 6255 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6103 | 6256 |
|
... | ... | |
6108 | 6261 |
} |
6109 | 6262 |
opn = "round.w.s"; |
6110 | 6263 |
break; |
6111 |
case FOP(13, 16):
|
|
6264 |
case OPC_TRUNC_W_S:
|
|
6112 | 6265 |
{ |
6113 | 6266 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6114 | 6267 |
|
... | ... | |
6119 | 6272 |
} |
6120 | 6273 |
opn = "trunc.w.s"; |
6121 | 6274 |
break; |
6122 |
case FOP(14, 16):
|
|
6275 |
case OPC_CEIL_W_S:
|
|
6123 | 6276 |
{ |
6124 | 6277 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6125 | 6278 |
|
... | ... | |
6130 | 6283 |
} |
6131 | 6284 |
opn = "ceil.w.s"; |
6132 | 6285 |
break; |
6133 |
case FOP(15, 16):
|
|
6286 |
case OPC_FLOOR_W_S:
|
|
6134 | 6287 |
{ |
6135 | 6288 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6136 | 6289 |
|
... | ... | |
6141 | 6294 |
} |
6142 | 6295 |
opn = "floor.w.s"; |
6143 | 6296 |
break; |
6144 |
case FOP(17, 16):
|
|
6297 |
case OPC_MOVCF_S:
|
|
6145 | 6298 |
gen_movcf_s(fs, fd, (ft >> 2) & 0x7, ft & 0x1); |
6146 | 6299 |
opn = "movcf.s"; |
6147 | 6300 |
break; |
6148 |
case FOP(18, 16):
|
|
6301 |
case OPC_MOVZ_S:
|
|
6149 | 6302 |
{ |
6150 | 6303 |
int l1 = gen_new_label(); |
6151 | 6304 |
TCGv_i32 fp0; |
... | ... | |
6161 | 6314 |
} |
6162 | 6315 |
opn = "movz.s"; |
6163 | 6316 |
break; |
6164 |
case FOP(19, 16):
|
|
6317 |
case OPC_MOVN_S:
|
|
6165 | 6318 |
{ |
6166 | 6319 |
int l1 = gen_new_label(); |
6167 | 6320 |
TCGv_i32 fp0; |
... | ... | |
6177 | 6330 |
} |
6178 | 6331 |
opn = "movn.s"; |
6179 | 6332 |
break; |
6180 |
case FOP(21, 16):
|
|
6333 |
case OPC_RECIP_S:
|
|
6181 | 6334 |
check_cop1x(ctx); |
6182 | 6335 |
{ |
6183 | 6336 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
6189 | 6342 |
} |
6190 | 6343 |
opn = "recip.s"; |
6191 | 6344 |
break; |
6192 |
case FOP(22, 16):
|
|
6345 |
case OPC_RSQRT_S:
|
|
6193 | 6346 |
check_cop1x(ctx); |
6194 | 6347 |
{ |
6195 | 6348 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
6201 | 6354 |
} |
6202 | 6355 |
opn = "rsqrt.s"; |
6203 | 6356 |
break; |
6204 |
case FOP(28, 16):
|
|
6357 |
case OPC_RECIP2_S:
|
|
6205 | 6358 |
check_cp1_64bitmode(ctx); |
6206 | 6359 |
{ |
6207 | 6360 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
6216 | 6369 |
} |
6217 | 6370 |
opn = "recip2.s"; |
6218 | 6371 |
break; |
6219 |
case FOP(29, 16):
|
|
6372 |
case OPC_RECIP1_S:
|
|
6220 | 6373 |
check_cp1_64bitmode(ctx); |
6221 | 6374 |
{ |
6222 | 6375 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
6228 | 6381 |
} |
6229 | 6382 |
opn = "recip1.s"; |
6230 | 6383 |
break; |
6231 |
case FOP(30, 16):
|
|
6384 |
case OPC_RSQRT1_S:
|
|
6232 | 6385 |
check_cp1_64bitmode(ctx); |
6233 | 6386 |
{ |
6234 | 6387 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
6240 | 6393 |
} |
6241 | 6394 |
opn = "rsqrt1.s"; |
6242 | 6395 |
break; |
6243 |
case FOP(31, 16):
|
|
6396 |
case OPC_RSQRT2_S:
|
|
6244 | 6397 |
check_cp1_64bitmode(ctx); |
6245 | 6398 |
{ |
6246 | 6399 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
6255 | 6408 |
} |
6256 | 6409 |
opn = "rsqrt2.s"; |
6257 | 6410 |
break; |
6258 |
case FOP(33, 16):
|
|
6411 |
case OPC_CVT_D_S:
|
|
6259 | 6412 |
check_cp1_registers(ctx, fd); |
6260 | 6413 |
{ |
6261 | 6414 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6269 | 6422 |
} |
6270 | 6423 |
opn = "cvt.d.s"; |
6271 | 6424 |
break; |
6272 |
case FOP(36, 16):
|
|
6425 |
case OPC_CVT_W_S:
|
|
6273 | 6426 |
{ |
6274 | 6427 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6275 | 6428 |
|
... | ... | |
6280 | 6433 |
} |
6281 | 6434 |
opn = "cvt.w.s"; |
6282 | 6435 |
break; |
6283 |
case FOP(37, 16):
|
|
6436 |
case OPC_CVT_L_S:
|
|
6284 | 6437 |
check_cp1_64bitmode(ctx); |
6285 | 6438 |
{ |
6286 | 6439 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6294 | 6447 |
} |
6295 | 6448 |
opn = "cvt.l.s"; |
6296 | 6449 |
break; |
6297 |
case FOP(38, 16):
|
|
6450 |
case OPC_CVT_PS_S:
|
|
6298 | 6451 |
check_cp1_64bitmode(ctx); |
6299 | 6452 |
{ |
6300 | 6453 |
TCGv_i64 fp64 = tcg_temp_new_i64(); |
... | ... | |
6311 | 6464 |
} |
6312 | 6465 |
opn = "cvt.ps.s"; |
6313 | 6466 |
break; |
6314 |
case FOP(48, 16):
|
|
6315 |
case FOP(49, 16):
|
|
6316 |
case FOP(50, 16):
|
|
6317 |
case FOP(51, 16):
|
|
6318 |
case FOP(52, 16):
|
|
6319 |
case FOP(53, 16):
|
|
6320 |
case FOP(54, 16):
|
|
6321 |
case FOP(55, 16):
|
|
6322 |
case FOP(56, 16):
|
|
6323 |
case FOP(57, 16):
|
|
6324 |
case FOP(58, 16):
|
|
6325 |
case FOP(59, 16):
|
|
6326 |
case FOP(60, 16):
|
|
6327 |
case FOP(61, 16):
|
|
6328 |
case FOP(62, 16):
|
|
6329 |
case FOP(63, 16):
|
|
6467 |
case OPC_CMP_F_S:
|
|
6468 |
case OPC_CMP_UN_S:
|
|
6469 |
case OPC_CMP_EQ_S:
|
|
6470 |
case OPC_CMP_UEQ_S:
|
|
6471 |
case OPC_CMP_OLT_S:
|
|
6472 |
case OPC_CMP_ULT_S:
|
|
6473 |
case OPC_CMP_OLE_S:
|
|
6474 |
case OPC_CMP_ULE_S:
|
|
6475 |
case OPC_CMP_SF_S:
|
|
6476 |
case OPC_CMP_NGLE_S:
|
|
6477 |
case OPC_CMP_SEQ_S:
|
|
6478 |
case OPC_CMP_NGL_S:
|
|
6479 |
case OPC_CMP_LT_S:
|
|
6480 |
case OPC_CMP_NGE_S:
|
|
6481 |
case OPC_CMP_LE_S:
|
|
6482 |
case OPC_CMP_NGT_S:
|
|
6330 | 6483 |
{ |
6331 | 6484 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6332 | 6485 |
TCGv_i32 fp1 = tcg_temp_new_i32(); |
... | ... | |
6345 | 6498 |
tcg_temp_free_i32(fp1); |
6346 | 6499 |
} |
6347 | 6500 |
break; |
6348 |
case FOP(0, 17):
|
|
6501 |
case OPC_ADD_D:
|
|
6349 | 6502 |
check_cp1_registers(ctx, fs | ft | fd); |
6350 | 6503 |
{ |
6351 | 6504 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6361 | 6514 |
opn = "add.d"; |
6362 | 6515 |
optype = BINOP; |
6363 | 6516 |
break; |
6364 |
case FOP(1, 17):
|
|
6517 |
case OPC_SUB_D:
|
|
6365 | 6518 |
check_cp1_registers(ctx, fs | ft | fd); |
6366 | 6519 |
{ |
6367 | 6520 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6377 | 6530 |
opn = "sub.d"; |
6378 | 6531 |
optype = BINOP; |
6379 | 6532 |
break; |
6380 |
case FOP(2, 17):
|
|
6533 |
case OPC_MUL_D:
|
|
6381 | 6534 |
check_cp1_registers(ctx, fs | ft | fd); |
6382 | 6535 |
{ |
6383 | 6536 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6393 | 6546 |
opn = "mul.d"; |
6394 | 6547 |
optype = BINOP; |
6395 | 6548 |
break; |
6396 |
case FOP(3, 17):
|
|
6549 |
case OPC_DIV_D:
|
|
6397 | 6550 |
check_cp1_registers(ctx, fs | ft | fd); |
6398 | 6551 |
{ |
6399 | 6552 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6409 | 6562 |
opn = "div.d"; |
6410 | 6563 |
optype = BINOP; |
6411 | 6564 |
break; |
6412 |
case FOP(4, 17):
|
|
6565 |
case OPC_SQRT_D:
|
|
6413 | 6566 |
check_cp1_registers(ctx, fs | fd); |
6414 | 6567 |
{ |
6415 | 6568 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6421 | 6574 |
} |
6422 | 6575 |
opn = "sqrt.d"; |
6423 | 6576 |
break; |
6424 |
case FOP(5, 17):
|
|
6577 |
case OPC_ABS_D:
|
|
6425 | 6578 |
check_cp1_registers(ctx, fs | fd); |
6426 | 6579 |
{ |
6427 | 6580 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6433 | 6586 |
} |
6434 | 6587 |
opn = "abs.d"; |
6435 | 6588 |
break; |
6436 |
case FOP(6, 17):
|
|
6589 |
case OPC_MOV_D:
|
|
6437 | 6590 |
check_cp1_registers(ctx, fs | fd); |
6438 | 6591 |
{ |
6439 | 6592 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6444 | 6597 |
} |
6445 | 6598 |
opn = "mov.d"; |
6446 | 6599 |
break; |
6447 |
case FOP(7, 17):
|
|
6600 |
case OPC_NEG_D:
|
|
6448 | 6601 |
check_cp1_registers(ctx, fs | fd); |
6449 | 6602 |
{ |
6450 | 6603 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6456 | 6609 |
} |
6457 | 6610 |
opn = "neg.d"; |
6458 | 6611 |
break; |
6459 |
case FOP(8, 17):
|
|
6612 |
case OPC_ROUND_L_D:
|
|
6460 | 6613 |
check_cp1_64bitmode(ctx); |
6461 | 6614 |
{ |
6462 | 6615 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6468 | 6621 |
} |
6469 | 6622 |
opn = "round.l.d"; |
6470 | 6623 |
break; |
6471 |
case FOP(9, 17):
|
|
6624 |
case OPC_TRUNC_L_D:
|
|
6472 | 6625 |
check_cp1_64bitmode(ctx); |
6473 | 6626 |
{ |
6474 | 6627 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6480 | 6633 |
} |
6481 | 6634 |
opn = "trunc.l.d"; |
6482 | 6635 |
break; |
6483 |
case FOP(10, 17):
|
|
6636 |
case OPC_CEIL_L_D:
|
|
6484 | 6637 |
check_cp1_64bitmode(ctx); |
6485 | 6638 |
{ |
6486 | 6639 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6492 | 6645 |
} |
6493 | 6646 |
opn = "ceil.l.d"; |
6494 | 6647 |
break; |
6495 |
case FOP(11, 17):
|
|
6648 |
case OPC_FLOOR_L_D:
|
|
6496 | 6649 |
check_cp1_64bitmode(ctx); |
6497 | 6650 |
{ |
6498 | 6651 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6504 | 6657 |
} |
6505 | 6658 |
opn = "floor.l.d"; |
6506 | 6659 |
break; |
6507 |
case FOP(12, 17):
|
|
6660 |
case OPC_ROUND_W_D:
|
|
6508 | 6661 |
check_cp1_registers(ctx, fs); |
6509 | 6662 |
{ |
6510 | 6663 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6518 | 6671 |
} |
6519 | 6672 |
opn = "round.w.d"; |
6520 | 6673 |
break; |
6521 |
case FOP(13, 17):
|
|
6674 |
case OPC_TRUNC_W_D:
|
|
6522 | 6675 |
check_cp1_registers(ctx, fs); |
6523 | 6676 |
{ |
6524 | 6677 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6532 | 6685 |
} |
6533 | 6686 |
opn = "trunc.w.d"; |
6534 | 6687 |
break; |
6535 |
case FOP(14, 17):
|
|
6688 |
case OPC_CEIL_W_D:
|
|
6536 | 6689 |
check_cp1_registers(ctx, fs); |
6537 | 6690 |
{ |
6538 | 6691 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6546 | 6699 |
} |
6547 | 6700 |
opn = "ceil.w.d"; |
6548 | 6701 |
break; |
6549 |
case FOP(15, 17):
|
|
6702 |
case OPC_FLOOR_W_D:
|
|
6550 | 6703 |
check_cp1_registers(ctx, fs); |
6551 | 6704 |
{ |
6552 | 6705 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6560 | 6713 |
} |
6561 | 6714 |
opn = "floor.w.d"; |
6562 | 6715 |
break; |
6563 |
case FOP(17, 17):
|
|
6716 |
case OPC_MOVCF_D:
|
|
6564 | 6717 |
gen_movcf_d(ctx, fs, fd, (ft >> 2) & 0x7, ft & 0x1); |
6565 | 6718 |
opn = "movcf.d"; |
6566 | 6719 |
break; |
6567 |
case FOP(18, 17):
|
|
6720 |
case OPC_MOVZ_D:
|
|
6568 | 6721 |
{ |
6569 | 6722 |
int l1 = gen_new_label(); |
6570 | 6723 |
TCGv_i64 fp0; |
... | ... | |
6580 | 6733 |
} |
6581 | 6734 |
opn = "movz.d"; |
6582 | 6735 |
break; |
6583 |
case FOP(19, 17):
|
|
6736 |
case OPC_MOVN_D:
|
|
6584 | 6737 |
{ |
6585 | 6738 |
int l1 = gen_new_label(); |
6586 | 6739 |
TCGv_i64 fp0; |
... | ... | |
6596 | 6749 |
} |
6597 | 6750 |
opn = "movn.d"; |
6598 | 6751 |
break; |
6599 |
case FOP(21, 17):
|
|
6752 |
case OPC_RECIP_D:
|
|
6600 | 6753 |
check_cp1_64bitmode(ctx); |
6601 | 6754 |
{ |
6602 | 6755 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6608 | 6761 |
} |
6609 | 6762 |
opn = "recip.d"; |
6610 | 6763 |
break; |
6611 |
case FOP(22, 17):
|
|
6764 |
case OPC_RSQRT_D:
|
|
6612 | 6765 |
check_cp1_64bitmode(ctx); |
6613 | 6766 |
{ |
6614 | 6767 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6620 | 6773 |
} |
6621 | 6774 |
opn = "rsqrt.d"; |
6622 | 6775 |
break; |
6623 |
case FOP(28, 17):
|
|
6776 |
case OPC_RECIP2_D:
|
|
6624 | 6777 |
check_cp1_64bitmode(ctx); |
6625 | 6778 |
{ |
6626 | 6779 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6635 | 6788 |
} |
6636 | 6789 |
opn = "recip2.d"; |
6637 | 6790 |
break; |
6638 |
case FOP(29, 17):
|
|
6791 |
case OPC_RECIP1_D:
|
|
6639 | 6792 |
check_cp1_64bitmode(ctx); |
6640 | 6793 |
{ |
6641 | 6794 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6647 | 6800 |
} |
6648 | 6801 |
opn = "recip1.d"; |
6649 | 6802 |
break; |
6650 |
case FOP(30, 17):
|
|
6803 |
case OPC_RSQRT1_D:
|
|
6651 | 6804 |
check_cp1_64bitmode(ctx); |
6652 | 6805 |
{ |
6653 | 6806 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6659 | 6812 |
} |
6660 | 6813 |
opn = "rsqrt1.d"; |
6661 | 6814 |
break; |
6662 |
case FOP(31, 17):
|
|
6815 |
case OPC_RSQRT2_D:
|
|
6663 | 6816 |
check_cp1_64bitmode(ctx); |
6664 | 6817 |
{ |
6665 | 6818 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6674 | 6827 |
} |
6675 | 6828 |
opn = "rsqrt2.d"; |
6676 | 6829 |
break; |
6677 |
case FOP(48, 17):
|
|
6678 |
case FOP(49, 17):
|
|
6679 |
case FOP(50, 17):
|
|
6680 |
case FOP(51, 17):
|
|
6681 |
case FOP(52, 17):
|
|
6682 |
case FOP(53, 17):
|
|
6683 |
case FOP(54, 17):
|
|
6684 |
case FOP(55, 17):
|
|
6685 |
case FOP(56, 17):
|
|
6686 |
case FOP(57, 17):
|
|
6687 |
case FOP(58, 17):
|
|
6688 |
case FOP(59, 17):
|
|
6689 |
case FOP(60, 17):
|
|
6690 |
case FOP(61, 17):
|
|
6691 |
case FOP(62, 17):
|
|
6692 |
case FOP(63, 17):
|
|
6830 |
case OPC_CMP_F_D:
|
|
6831 |
case OPC_CMP_UN_D:
|
|
6832 |
case OPC_CMP_EQ_D:
|
|
6833 |
case OPC_CMP_UEQ_D:
|
|
6834 |
case OPC_CMP_OLT_D:
|
|
6835 |
case OPC_CMP_ULT_D:
|
|
6836 |
case OPC_CMP_OLE_D:
|
|
6837 |
case OPC_CMP_ULE_D:
|
|
6838 |
case OPC_CMP_SF_D:
|
|
6839 |
case OPC_CMP_NGLE_D:
|
|
6840 |
case OPC_CMP_SEQ_D:
|
|
6841 |
case OPC_CMP_NGL_D:
|
|
6842 |
case OPC_CMP_LT_D:
|
|
6843 |
case OPC_CMP_NGE_D:
|
|
6844 |
case OPC_CMP_LE_D:
|
|
6845 |
case OPC_CMP_NGT_D:
|
|
6693 | 6846 |
{ |
6694 | 6847 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
6695 | 6848 |
TCGv_i64 fp1 = tcg_temp_new_i64(); |
... | ... | |
6710 | 6863 |
tcg_temp_free_i64(fp1); |
6711 | 6864 |
} |
6712 | 6865 |
break; |
6713 |
case FOP(32, 17):
|
|
6866 |
case OPC_CVT_S_D:
|
|
6714 | 6867 |
check_cp1_registers(ctx, fs); |
6715 | 6868 |
{ |
6716 | 6869 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6724 | 6877 |
} |
6725 | 6878 |
opn = "cvt.s.d"; |
6726 | 6879 |
break; |
6727 |
case FOP(36, 17):
|
|
6880 |
case OPC_CVT_W_D:
|
|
6728 | 6881 |
check_cp1_registers(ctx, fs); |
6729 | 6882 |
{ |
6730 | 6883 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6738 | 6891 |
} |
6739 | 6892 |
opn = "cvt.w.d"; |
6740 | 6893 |
break; |
6741 |
case FOP(37, 17):
|
|
6894 |
case OPC_CVT_L_D:
|
|
6742 | 6895 |
check_cp1_64bitmode(ctx); |
6743 | 6896 |
{ |
6744 | 6897 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6750 | 6903 |
} |
6751 | 6904 |
opn = "cvt.l.d"; |
6752 | 6905 |
break; |
6753 |
case FOP(32, 20):
|
|
6906 |
case OPC_CVT_S_W:
|
|
6754 | 6907 |
{ |
6755 | 6908 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
6756 | 6909 |
|
... | ... | |
6761 | 6914 |
} |
6762 | 6915 |
opn = "cvt.s.w"; |
6763 | 6916 |
break; |
6764 |
case FOP(33, 20):
|
|
6917 |
case OPC_CVT_D_W:
|
|
6765 | 6918 |
check_cp1_registers(ctx, fd); |
6766 | 6919 |
{ |
6767 | 6920 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6775 | 6928 |
} |
6776 | 6929 |
opn = "cvt.d.w"; |
6777 | 6930 |
break; |
6778 |
case FOP(32, 21):
|
|
6931 |
case OPC_CVT_S_L:
|
|
6779 | 6932 |
check_cp1_64bitmode(ctx); |
6780 | 6933 |
{ |
6781 | 6934 |
TCGv_i32 fp32 = tcg_temp_new_i32(); |
... | ... | |
6789 | 6942 |
} |
6790 | 6943 |
opn = "cvt.s.l"; |
6791 | 6944 |
break; |
6792 |
case FOP(33, 21):
|
|
6945 |
case OPC_CVT_D_L:
|
|
6793 | 6946 |
check_cp1_64bitmode(ctx); |
6794 | 6947 |
{ |
6795 | 6948 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6801 | 6954 |
} |
6802 | 6955 |
opn = "cvt.d.l"; |
6803 | 6956 |
break; |
6804 |
case FOP(38, 20):
|
|
6957 |
case OPC_CVT_PS_PW:
|
|
6805 | 6958 |
check_cp1_64bitmode(ctx); |
6806 | 6959 |
{ |
6807 | 6960 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6813 | 6966 |
} |
6814 | 6967 |
opn = "cvt.ps.pw"; |
6815 | 6968 |
break; |
6816 |
case FOP(0, 22):
|
|
6969 |
case OPC_ADD_PS:
|
|
6817 | 6970 |
check_cp1_64bitmode(ctx); |
6818 | 6971 |
{ |
6819 | 6972 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6828 | 6981 |
} |
6829 | 6982 |
opn = "add.ps"; |
6830 | 6983 |
break; |
6831 |
case FOP(1, 22):
|
|
6984 |
case OPC_SUB_PS:
|
|
6832 | 6985 |
check_cp1_64bitmode(ctx); |
6833 | 6986 |
{ |
6834 | 6987 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6843 | 6996 |
} |
6844 | 6997 |
opn = "sub.ps"; |
6845 | 6998 |
break; |
6846 |
case FOP(2, 22):
|
|
6999 |
case OPC_MUL_PS:
|
|
6847 | 7000 |
check_cp1_64bitmode(ctx); |
6848 | 7001 |
{ |
6849 | 7002 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6858 | 7011 |
} |
6859 | 7012 |
opn = "mul.ps"; |
6860 | 7013 |
break; |
6861 |
case FOP(5, 22):
|
|
7014 |
case OPC_ABS_PS:
|
|
6862 | 7015 |
check_cp1_64bitmode(ctx); |
6863 | 7016 |
{ |
6864 | 7017 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6870 | 7023 |
} |
6871 | 7024 |
opn = "abs.ps"; |
6872 | 7025 |
break; |
6873 |
case FOP(6, 22):
|
|
7026 |
case OPC_MOV_PS:
|
|
6874 | 7027 |
check_cp1_64bitmode(ctx); |
6875 | 7028 |
{ |
6876 | 7029 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6881 | 7034 |
} |
6882 | 7035 |
opn = "mov.ps"; |
6883 | 7036 |
break; |
6884 |
case FOP(7, 22):
|
|
7037 |
case OPC_NEG_PS:
|
|
6885 | 7038 |
check_cp1_64bitmode(ctx); |
6886 | 7039 |
{ |
6887 | 7040 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6893 | 7046 |
} |
6894 | 7047 |
opn = "neg.ps"; |
6895 | 7048 |
break; |
6896 |
case FOP(17, 22):
|
|
7049 |
case OPC_MOVCF_PS:
|
|
6897 | 7050 |
check_cp1_64bitmode(ctx); |
6898 | 7051 |
gen_movcf_ps(fs, fd, (ft >> 2) & 0x7, ft & 0x1); |
6899 | 7052 |
opn = "movcf.ps"; |
6900 | 7053 |
break; |
6901 |
case FOP(18, 22):
|
|
7054 |
case OPC_MOVZ_PS:
|
|
6902 | 7055 |
check_cp1_64bitmode(ctx); |
6903 | 7056 |
{ |
6904 | 7057 |
int l1 = gen_new_label(); |
... | ... | |
6914 | 7067 |
} |
6915 | 7068 |
opn = "movz.ps"; |
6916 | 7069 |
break; |
6917 |
case FOP(19, 22):
|
|
7070 |
case OPC_MOVN_PS:
|
|
6918 | 7071 |
check_cp1_64bitmode(ctx); |
6919 | 7072 |
{ |
6920 | 7073 |
int l1 = gen_new_label(); |
... | ... | |
6931 | 7084 |
} |
6932 | 7085 |
opn = "movn.ps"; |
6933 | 7086 |
break; |
6934 |
case FOP(24, 22):
|
|
7087 |
case OPC_ADDR_PS:
|
|
6935 | 7088 |
check_cp1_64bitmode(ctx); |
6936 | 7089 |
{ |
6937 | 7090 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6946 | 7099 |
} |
6947 | 7100 |
opn = "addr.ps"; |
6948 | 7101 |
break; |
6949 |
case FOP(26, 22):
|
|
7102 |
case OPC_MULR_PS:
|
|
6950 | 7103 |
check_cp1_64bitmode(ctx); |
6951 | 7104 |
{ |
6952 | 7105 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6961 | 7114 |
} |
6962 | 7115 |
opn = "mulr.ps"; |
6963 | 7116 |
break; |
6964 |
case FOP(28, 22):
|
|
7117 |
case OPC_RECIP2_PS:
|
|
6965 | 7118 |
check_cp1_64bitmode(ctx); |
6966 | 7119 |
{ |
6967 | 7120 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6976 | 7129 |
} |
6977 | 7130 |
opn = "recip2.ps"; |
6978 | 7131 |
break; |
6979 |
case FOP(29, 22):
|
|
7132 |
case OPC_RECIP1_PS:
|
|
6980 | 7133 |
check_cp1_64bitmode(ctx); |
6981 | 7134 |
{ |
6982 | 7135 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
6988 | 7141 |
} |
6989 | 7142 |
opn = "recip1.ps"; |
6990 | 7143 |
break; |
6991 |
case FOP(30, 22):
|
|
7144 |
case OPC_RSQRT1_PS:
|
|
6992 | 7145 |
check_cp1_64bitmode(ctx); |
6993 | 7146 |
{ |
6994 | 7147 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
7000 | 7153 |
} |
7001 | 7154 |
opn = "rsqrt1.ps"; |
7002 | 7155 |
break; |
7003 |
case FOP(31, 22):
|
|
7156 |
case OPC_RSQRT2_PS:
|
|
7004 | 7157 |
check_cp1_64bitmode(ctx); |
7005 | 7158 |
{ |
7006 | 7159 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
7015 | 7168 |
} |
7016 | 7169 |
opn = "rsqrt2.ps"; |
7017 | 7170 |
break; |
7018 |
case FOP(32, 22):
|
|
7171 |
case OPC_CVT_S_PU:
|
|
7019 | 7172 |
check_cp1_64bitmode(ctx); |
7020 | 7173 |
{ |
7021 | 7174 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
7027 | 7180 |
} |
7028 | 7181 |
opn = "cvt.s.pu"; |
7029 | 7182 |
break; |
7030 |
case FOP(36, 22):
|
|
7183 |
case OPC_CVT_PW_PS:
|
|
7031 | 7184 |
check_cp1_64bitmode(ctx); |
7032 | 7185 |
{ |
7033 | 7186 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
7039 | 7192 |
} |
7040 | 7193 |
opn = "cvt.pw.ps"; |
7041 | 7194 |
break; |
7042 |
case FOP(40, 22):
|
|
7195 |
case OPC_CVT_S_PL:
|
|
7043 | 7196 |
check_cp1_64bitmode(ctx); |
7044 | 7197 |
{ |
7045 | 7198 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
7051 | 7204 |
} |
7052 | 7205 |
opn = "cvt.s.pl"; |
7053 | 7206 |
break; |
7054 |
case FOP(44, 22):
|
|
7207 |
case OPC_PLL_PS:
|
|
7055 | 7208 |
check_cp1_64bitmode(ctx); |
7056 | 7209 |
{ |
7057 | 7210 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
7066 | 7219 |
} |
7067 | 7220 |
opn = "pll.ps"; |
7068 | 7221 |
break; |
7069 |
case FOP(45, 22):
|
|
7222 |
case OPC_PLU_PS:
|
|
7070 | 7223 |
check_cp1_64bitmode(ctx); |
7071 | 7224 |
{ |
7072 | 7225 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
7081 | 7234 |
} |
7082 | 7235 |
opn = "plu.ps"; |
7083 | 7236 |
break; |
7084 |
case FOP(46, 22):
|
|
7237 |
case OPC_PUL_PS:
|
|
7085 | 7238 |
check_cp1_64bitmode(ctx); |
7086 | 7239 |
{ |
7087 | 7240 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
7096 | 7249 |
} |
7097 | 7250 |
opn = "pul.ps"; |
7098 | 7251 |
break; |
7099 |
case FOP(47, 22):
|
|
7252 |
case OPC_PUU_PS:
|
|
7100 | 7253 |
check_cp1_64bitmode(ctx); |
7101 | 7254 |
{ |
7102 | 7255 |
TCGv_i32 fp0 = tcg_temp_new_i32(); |
... | ... | |
7111 | 7264 |
} |
7112 | 7265 |
opn = "puu.ps"; |
7113 | 7266 |
break; |
7114 |
case FOP(48, 22):
|
|
7115 |
case FOP(49, 22):
|
|
7116 |
case FOP(50, 22):
|
|
7117 |
case FOP(51, 22):
|
|
7118 |
case FOP(52, 22):
|
|
7119 |
case FOP(53, 22):
|
|
7120 |
case FOP(54, 22):
|
|
7121 |
case FOP(55, 22):
|
|
7122 |
case FOP(56, 22):
|
|
7123 |
case FOP(57, 22):
|
|
7124 |
case FOP(58, 22):
|
|
7125 |
case FOP(59, 22):
|
|
7126 |
case FOP(60, 22):
|
|
7127 |
case FOP(61, 22):
|
|
7128 |
case FOP(62, 22):
|
|
7129 |
case FOP(63, 22):
|
|
7267 |
case OPC_CMP_F_PS:
|
|
7268 |
case OPC_CMP_UN_PS:
|
|
7269 |
case OPC_CMP_EQ_PS:
|
|
7270 |
case OPC_CMP_UEQ_PS:
|
|
7271 |
case OPC_CMP_OLT_PS:
|
|
7272 |
case OPC_CMP_ULT_PS:
|
|
7273 |
case OPC_CMP_OLE_PS:
|
|
7274 |
case OPC_CMP_ULE_PS:
|
|
7275 |
case OPC_CMP_SF_PS:
|
|
7276 |
case OPC_CMP_NGLE_PS:
|
|
7277 |
case OPC_CMP_SEQ_PS:
|
|
7278 |
case OPC_CMP_NGL_PS:
|
|
7279 |
case OPC_CMP_LT_PS:
|
|
7280 |
case OPC_CMP_NGE_PS:
|
|
7281 |
case OPC_CMP_LE_PS:
|
|
7282 |
case OPC_CMP_NGT_PS:
|
|
7130 | 7283 |
check_cp1_64bitmode(ctx); |
7131 | 7284 |
{ |
7132 | 7285 |
TCGv_i64 fp0 = tcg_temp_new_i64(); |
... | ... | |
9298 | 9451 |
case OPC_W_FMT: |
9299 | 9452 |
case OPC_L_FMT: |
9300 | 9453 |
case OPC_PS_FMT: |
9301 |
gen_farith(ctx, MASK_CP1_FUNC(ctx->opcode), rt, rd, sa,
|
|
9454 |
gen_farith(ctx, ctx->opcode & FOP(0x3f, 0x1f), rt, rd, sa,
|
|
9302 | 9455 |
(imm >> 8) & 0x7); |
9303 | 9456 |
break; |
9304 | 9457 |
default: |
Also available in: Unified diff