Commit 1d01299d29184c2d48af843626e0d7a5ef21aef7
1 parent
714547bb
Convert basic 32 bit VIS ops to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5190 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
48 additions
and
164 deletions
target-sparc/helper.h
| ... | ... | @@ -138,29 +138,16 @@ F_HELPER_0_0(stox); |
| 138 | 138 | F_HELPER_0_0(dtox); |
| 139 | 139 | F_HELPER_0_0(qtox); |
| 140 | 140 | F_HELPER_0_0(aligndata); |
| 141 | -DEF_HELPER(void, helper_movl_FT0_0, (void)) | |
| 142 | -DEF_HELPER(void, helper_movl_DT0_0, (void)) | |
| 143 | -DEF_HELPER(void, helper_movl_FT0_1, (void)) | |
| 144 | -DEF_HELPER(void, helper_movl_DT0_1, (void)) | |
| 145 | 141 | |
| 146 | 142 | F_HELPER_0_0(not); |
| 147 | -F_HELPER_0_0(nots); | |
| 148 | 143 | F_HELPER_0_0(nor); |
| 149 | -F_HELPER_0_0(nors); | |
| 150 | 144 | F_HELPER_0_0(or); |
| 151 | -F_HELPER_0_0(ors); | |
| 152 | 145 | F_HELPER_0_0(xor); |
| 153 | -F_HELPER_0_0(xors); | |
| 154 | 146 | F_HELPER_0_0(and); |
| 155 | -F_HELPER_0_0(ands); | |
| 156 | 147 | F_HELPER_0_0(ornot); |
| 157 | -F_HELPER_0_0(ornots); | |
| 158 | 148 | F_HELPER_0_0(andnot); |
| 159 | -F_HELPER_0_0(andnots); | |
| 160 | 149 | F_HELPER_0_0(nand); |
| 161 | -F_HELPER_0_0(nands); | |
| 162 | 150 | F_HELPER_0_0(xnor); |
| 163 | -F_HELPER_0_0(xnors); | |
| 164 | 151 | F_HELPER_0_0(pmerge); |
| 165 | 152 | F_HELPER_0_0(mul8x16); |
| 166 | 153 | F_HELPER_0_0(mul8x16al); |
| ... | ... | @@ -172,9 +159,9 @@ F_HELPER_0_0(muld8ulx16); |
| 172 | 159 | F_HELPER_0_0(expand); |
| 173 | 160 | #define VIS_HELPER(name) \ |
| 174 | 161 | F_HELPER_0_0(name##16); \ |
| 175 | - F_HELPER_0_0(name##16s); \ | |
| 162 | + DEF_HELPER(uint32_t, helper_f ## name ## 16s, (uint32_t src1, uint32_t src2))\ | |
| 176 | 163 | F_HELPER_0_0(name##32); \ |
| 177 | - F_HELPER_0_0(name##32s) | |
| 164 | + DEF_HELPER(uint32_t, helper_f ## name ## 32s, (uint32_t src1, uint32_t src2)) | |
| 178 | 165 | |
| 179 | 166 | VIS_HELPER(padd); |
| 180 | 167 | VIS_HELPER(psub); | ... | ... |
target-sparc/op_helper.c
| ... | ... | @@ -246,116 +246,51 @@ void helper_faligndata(void) |
| 246 | 246 | *((uint64_t *)&DT0) = tmp; |
| 247 | 247 | } |
| 248 | 248 | |
| 249 | -void helper_movl_FT0_0(void) | |
| 250 | -{ | |
| 251 | - *((uint32_t *)&FT0) = 0; | |
| 252 | -} | |
| 253 | - | |
| 254 | -void helper_movl_DT0_0(void) | |
| 255 | -{ | |
| 256 | - *((uint64_t *)&DT0) = 0; | |
| 257 | -} | |
| 258 | - | |
| 259 | -void helper_movl_FT0_1(void) | |
| 260 | -{ | |
| 261 | - *((uint32_t *)&FT0) = 0xffffffff; | |
| 262 | -} | |
| 263 | - | |
| 264 | -void helper_movl_DT0_1(void) | |
| 265 | -{ | |
| 266 | - *((uint64_t *)&DT0) = 0xffffffffffffffffULL; | |
| 267 | -} | |
| 268 | - | |
| 269 | 249 | void helper_fnot(void) |
| 270 | 250 | { |
| 271 | 251 | *(uint64_t *)&DT0 = ~*(uint64_t *)&DT1; |
| 272 | 252 | } |
| 273 | 253 | |
| 274 | -void helper_fnots(void) | |
| 275 | -{ | |
| 276 | - *(uint32_t *)&FT0 = ~*(uint32_t *)&FT1; | |
| 277 | -} | |
| 278 | - | |
| 279 | 254 | void helper_fnor(void) |
| 280 | 255 | { |
| 281 | 256 | *(uint64_t *)&DT0 = ~(*(uint64_t *)&DT0 | *(uint64_t *)&DT1); |
| 282 | 257 | } |
| 283 | 258 | |
| 284 | -void helper_fnors(void) | |
| 285 | -{ | |
| 286 | - *(uint32_t *)&FT0 = ~(*(uint32_t *)&FT0 | *(uint32_t *)&FT1); | |
| 287 | -} | |
| 288 | - | |
| 289 | 259 | void helper_for(void) |
| 290 | 260 | { |
| 291 | 261 | *(uint64_t *)&DT0 |= *(uint64_t *)&DT1; |
| 292 | 262 | } |
| 293 | 263 | |
| 294 | -void helper_fors(void) | |
| 295 | -{ | |
| 296 | - *(uint32_t *)&FT0 |= *(uint32_t *)&FT1; | |
| 297 | -} | |
| 298 | - | |
| 299 | 264 | void helper_fxor(void) |
| 300 | 265 | { |
| 301 | 266 | *(uint64_t *)&DT0 ^= *(uint64_t *)&DT1; |
| 302 | 267 | } |
| 303 | 268 | |
| 304 | -void helper_fxors(void) | |
| 305 | -{ | |
| 306 | - *(uint32_t *)&FT0 ^= *(uint32_t *)&FT1; | |
| 307 | -} | |
| 308 | - | |
| 309 | 269 | void helper_fand(void) |
| 310 | 270 | { |
| 311 | 271 | *(uint64_t *)&DT0 &= *(uint64_t *)&DT1; |
| 312 | 272 | } |
| 313 | 273 | |
| 314 | -void helper_fands(void) | |
| 315 | -{ | |
| 316 | - *(uint32_t *)&FT0 &= *(uint32_t *)&FT1; | |
| 317 | -} | |
| 318 | - | |
| 319 | 274 | void helper_fornot(void) |
| 320 | 275 | { |
| 321 | 276 | *(uint64_t *)&DT0 = *(uint64_t *)&DT0 | ~*(uint64_t *)&DT1; |
| 322 | 277 | } |
| 323 | 278 | |
| 324 | -void helper_fornots(void) | |
| 325 | -{ | |
| 326 | - *(uint32_t *)&FT0 = *(uint32_t *)&FT0 | ~*(uint32_t *)&FT1; | |
| 327 | -} | |
| 328 | - | |
| 329 | 279 | void helper_fandnot(void) |
| 330 | 280 | { |
| 331 | 281 | *(uint64_t *)&DT0 = *(uint64_t *)&DT0 & ~*(uint64_t *)&DT1; |
| 332 | 282 | } |
| 333 | 283 | |
| 334 | -void helper_fandnots(void) | |
| 335 | -{ | |
| 336 | - *(uint32_t *)&FT0 = *(uint32_t *)&FT0 & ~*(uint32_t *)&FT1; | |
| 337 | -} | |
| 338 | - | |
| 339 | 284 | void helper_fnand(void) |
| 340 | 285 | { |
| 341 | 286 | *(uint64_t *)&DT0 = ~(*(uint64_t *)&DT0 & *(uint64_t *)&DT1); |
| 342 | 287 | } |
| 343 | 288 | |
| 344 | -void helper_fnands(void) | |
| 345 | -{ | |
| 346 | - *(uint32_t *)&FT0 = ~(*(uint32_t *)&FT0 & *(uint32_t *)&FT1); | |
| 347 | -} | |
| 348 | - | |
| 349 | 289 | void helper_fxnor(void) |
| 350 | 290 | { |
| 351 | 291 | *(uint64_t *)&DT0 ^= ~*(uint64_t *)&DT1; |
| 352 | 292 | } |
| 353 | 293 | |
| 354 | -void helper_fxnors(void) | |
| 355 | -{ | |
| 356 | - *(uint32_t *)&FT0 ^= ~*(uint32_t *)&FT1; | |
| 357 | -} | |
| 358 | - | |
| 359 | 294 | #ifdef WORDS_BIGENDIAN |
| 360 | 295 | #define VIS_B64(n) b[7 - (n)] |
| 361 | 296 | #define VIS_W64(n) w[3 - (n)] |
| ... | ... | @@ -597,17 +532,17 @@ void helper_fexpand(void) |
| 597 | 532 | DT0 = d.d; \ |
| 598 | 533 | } \ |
| 599 | 534 | \ |
| 600 | - void name##16s(void) \ | |
| 535 | + uint32_t name##16s(uint32_t src1, uint32_t src2) \ | |
| 601 | 536 | { \ |
| 602 | 537 | vis32 s, d; \ |
| 603 | 538 | \ |
| 604 | - s.f = FT0; \ | |
| 605 | - d.f = FT1; \ | |
| 539 | + s.l = src1; \ | |
| 540 | + d.l = src2; \ | |
| 606 | 541 | \ |
| 607 | 542 | d.VIS_W32(0) = F(d.VIS_W32(0), s.VIS_W32(0)); \ |
| 608 | 543 | d.VIS_W32(1) = F(d.VIS_W32(1), s.VIS_W32(1)); \ |
| 609 | 544 | \ |
| 610 | - FT0 = d.f; \ | |
| 545 | + return d.l; \ | |
| 611 | 546 | } \ |
| 612 | 547 | \ |
| 613 | 548 | void name##32(void) \ |
| ... | ... | @@ -623,16 +558,16 @@ void helper_fexpand(void) |
| 623 | 558 | DT0 = d.d; \ |
| 624 | 559 | } \ |
| 625 | 560 | \ |
| 626 | - void name##32s(void) \ | |
| 561 | + uint32_t name##32s(uint32_t src1, uint32_t src2) \ | |
| 627 | 562 | { \ |
| 628 | 563 | vis32 s, d; \ |
| 629 | 564 | \ |
| 630 | - s.f = FT0; \ | |
| 631 | - d.f = FT1; \ | |
| 565 | + s.l = src1; \ | |
| 566 | + d.l = src2; \ | |
| 632 | 567 | \ |
| 633 | 568 | d.l = F(d.l, s.l); \ |
| 634 | 569 | \ |
| 635 | - FT0 = d.f; \ | |
| 570 | + return d.l; \ | |
| 636 | 571 | } |
| 637 | 572 | |
| 638 | 573 | #define FADD(a, b) ((a) + (b)) | ... | ... |
target-sparc/translate.c
| ... | ... | @@ -3836,10 +3836,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3836 | 3836 | break; |
| 3837 | 3837 | case 0x051: /* VIS I fpadd16s */ |
| 3838 | 3838 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3839 | - gen_op_load_fpr_FT0(rs1); | |
| 3840 | - gen_op_load_fpr_FT1(rs2); | |
| 3841 | - tcg_gen_helper_0_0(helper_fpadd16s); | |
| 3842 | - gen_op_store_FT0_fpr(rd); | |
| 3839 | + tcg_gen_helper_1_2(helper_fpadd16s, cpu_fpr[rd], | |
| 3840 | + cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 3843 | 3841 | break; |
| 3844 | 3842 | case 0x052: /* VIS I fpadd32 */ |
| 3845 | 3843 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3850,10 +3848,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3850 | 3848 | break; |
| 3851 | 3849 | case 0x053: /* VIS I fpadd32s */ |
| 3852 | 3850 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3853 | - gen_op_load_fpr_FT0(rs1); | |
| 3854 | - gen_op_load_fpr_FT1(rs2); | |
| 3855 | - tcg_gen_helper_0_0(helper_fpadd32s); | |
| 3856 | - gen_op_store_FT0_fpr(rd); | |
| 3851 | + tcg_gen_helper_1_2(helper_fpadd32s, cpu_fpr[rd], | |
| 3852 | + cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 3857 | 3853 | break; |
| 3858 | 3854 | case 0x054: /* VIS I fpsub16 */ |
| 3859 | 3855 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3864,10 +3860,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3864 | 3860 | break; |
| 3865 | 3861 | case 0x055: /* VIS I fpsub16s */ |
| 3866 | 3862 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3867 | - gen_op_load_fpr_FT0(rs1); | |
| 3868 | - gen_op_load_fpr_FT1(rs2); | |
| 3869 | - tcg_gen_helper_0_0(helper_fpsub16s); | |
| 3870 | - gen_op_store_FT0_fpr(rd); | |
| 3863 | + tcg_gen_helper_1_2(helper_fpsub16s, cpu_fpr[rd], | |
| 3864 | + cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 3871 | 3865 | break; |
| 3872 | 3866 | case 0x056: /* VIS I fpsub32 */ |
| 3873 | 3867 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3878,20 +3872,17 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3878 | 3872 | break; |
| 3879 | 3873 | case 0x057: /* VIS I fpsub32s */ |
| 3880 | 3874 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3881 | - gen_op_load_fpr_FT0(rs1); | |
| 3882 | - gen_op_load_fpr_FT1(rs2); | |
| 3883 | - tcg_gen_helper_0_0(helper_fpsub32s); | |
| 3884 | - gen_op_store_FT0_fpr(rd); | |
| 3875 | + tcg_gen_helper_1_2(helper_fpsub32s, cpu_fpr[rd], | |
| 3876 | + cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 3885 | 3877 | break; |
| 3886 | 3878 | case 0x060: /* VIS I fzero */ |
| 3887 | 3879 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3888 | - tcg_gen_helper_0_0(helper_movl_DT0_0); | |
| 3889 | - gen_op_store_DT0_fpr(DFPREG(rd)); | |
| 3880 | + tcg_gen_movi_i32(cpu_fpr[DFPREG(rd)], 0); | |
| 3881 | + tcg_gen_movi_i32(cpu_fpr[DFPREG(rd) + 1], 0); | |
| 3890 | 3882 | break; |
| 3891 | 3883 | case 0x061: /* VIS I fzeros */ |
| 3892 | 3884 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3893 | - tcg_gen_helper_0_0(helper_movl_FT0_0); | |
| 3894 | - gen_op_store_FT0_fpr(rd); | |
| 3885 | + tcg_gen_movi_i32(cpu_fpr[rd], 0); | |
| 3895 | 3886 | break; |
| 3896 | 3887 | case 0x062: /* VIS I fnor */ |
| 3897 | 3888 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3902,10 +3893,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3902 | 3893 | break; |
| 3903 | 3894 | case 0x063: /* VIS I fnors */ |
| 3904 | 3895 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3905 | - gen_op_load_fpr_FT0(rs1); | |
| 3906 | - gen_op_load_fpr_FT1(rs2); | |
| 3907 | - tcg_gen_helper_0_0(helper_fnors); | |
| 3908 | - gen_op_store_FT0_fpr(rd); | |
| 3896 | + tcg_gen_or_i32(cpu_tmp32, cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 3897 | + tcg_gen_xori_i32(cpu_fpr[rd], cpu_tmp32, -1); | |
| 3909 | 3898 | break; |
| 3910 | 3899 | case 0x064: /* VIS I fandnot2 */ |
| 3911 | 3900 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3916,10 +3905,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3916 | 3905 | break; |
| 3917 | 3906 | case 0x065: /* VIS I fandnot2s */ |
| 3918 | 3907 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3919 | - gen_op_load_fpr_FT1(rs1); | |
| 3920 | - gen_op_load_fpr_FT0(rs2); | |
| 3921 | - tcg_gen_helper_0_0(helper_fandnots); | |
| 3922 | - gen_op_store_FT0_fpr(rd); | |
| 3908 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[rs1], -1); | |
| 3909 | + tcg_gen_and_i32(cpu_fpr[rd], cpu_tmp32, cpu_fpr[rs2]); | |
| 3923 | 3910 | break; |
| 3924 | 3911 | case 0x066: /* VIS I fnot2 */ |
| 3925 | 3912 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3929,9 +3916,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3929 | 3916 | break; |
| 3930 | 3917 | case 0x067: /* VIS I fnot2s */ |
| 3931 | 3918 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3932 | - gen_op_load_fpr_FT1(rs2); | |
| 3933 | - tcg_gen_helper_0_0(helper_fnot); | |
| 3934 | - gen_op_store_FT0_fpr(rd); | |
| 3919 | + tcg_gen_xori_i32(cpu_fpr[rd], cpu_fpr[rs2], -1); | |
| 3935 | 3920 | break; |
| 3936 | 3921 | case 0x068: /* VIS I fandnot1 */ |
| 3937 | 3922 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3942,10 +3927,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3942 | 3927 | break; |
| 3943 | 3928 | case 0x069: /* VIS I fandnot1s */ |
| 3944 | 3929 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3945 | - gen_op_load_fpr_FT0(rs1); | |
| 3946 | - gen_op_load_fpr_FT1(rs2); | |
| 3947 | - tcg_gen_helper_0_0(helper_fandnots); | |
| 3948 | - gen_op_store_FT0_fpr(rd); | |
| 3930 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[rs2], -1); | |
| 3931 | + tcg_gen_and_i32(cpu_fpr[rd], cpu_tmp32, cpu_fpr[rs1]); | |
| 3949 | 3932 | break; |
| 3950 | 3933 | case 0x06a: /* VIS I fnot1 */ |
| 3951 | 3934 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3955,9 +3938,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3955 | 3938 | break; |
| 3956 | 3939 | case 0x06b: /* VIS I fnot1s */ |
| 3957 | 3940 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3958 | - gen_op_load_fpr_FT1(rs1); | |
| 3959 | - tcg_gen_helper_0_0(helper_fnot); | |
| 3960 | - gen_op_store_FT0_fpr(rd); | |
| 3941 | + tcg_gen_xori_i32(cpu_fpr[rd], cpu_fpr[rs1], -1); | |
| 3961 | 3942 | break; |
| 3962 | 3943 | case 0x06c: /* VIS I fxor */ |
| 3963 | 3944 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3968,10 +3949,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3968 | 3949 | break; |
| 3969 | 3950 | case 0x06d: /* VIS I fxors */ |
| 3970 | 3951 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3971 | - gen_op_load_fpr_FT0(rs1); | |
| 3972 | - gen_op_load_fpr_FT1(rs2); | |
| 3973 | - tcg_gen_helper_0_0(helper_fxors); | |
| 3974 | - gen_op_store_FT0_fpr(rd); | |
| 3952 | + tcg_gen_xor_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 3975 | 3953 | break; |
| 3976 | 3954 | case 0x06e: /* VIS I fnand */ |
| 3977 | 3955 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3982,10 +3960,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3982 | 3960 | break; |
| 3983 | 3961 | case 0x06f: /* VIS I fnands */ |
| 3984 | 3962 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3985 | - gen_op_load_fpr_FT0(rs1); | |
| 3986 | - gen_op_load_fpr_FT1(rs2); | |
| 3987 | - tcg_gen_helper_0_0(helper_fnands); | |
| 3988 | - gen_op_store_FT0_fpr(rd); | |
| 3963 | + tcg_gen_and_i32(cpu_tmp32, cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 3964 | + tcg_gen_xori_i32(cpu_fpr[rd], cpu_tmp32, -1); | |
| 3989 | 3965 | break; |
| 3990 | 3966 | case 0x070: /* VIS I fand */ |
| 3991 | 3967 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -3996,10 +3972,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3996 | 3972 | break; |
| 3997 | 3973 | case 0x071: /* VIS I fands */ |
| 3998 | 3974 | CHECK_FPU_FEATURE(dc, VIS1); |
| 3999 | - gen_op_load_fpr_FT0(rs1); | |
| 4000 | - gen_op_load_fpr_FT1(rs2); | |
| 4001 | - tcg_gen_helper_0_0(helper_fands); | |
| 4002 | - gen_op_store_FT0_fpr(rd); | |
| 3975 | + tcg_gen_and_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 4003 | 3976 | break; |
| 4004 | 3977 | case 0x072: /* VIS I fxnor */ |
| 4005 | 3978 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -4010,20 +3983,18 @@ static void disas_sparc_insn(DisasContext * dc) |
| 4010 | 3983 | break; |
| 4011 | 3984 | case 0x073: /* VIS I fxnors */ |
| 4012 | 3985 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4013 | - gen_op_load_fpr_FT0(rs1); | |
| 4014 | - gen_op_load_fpr_FT1(rs2); | |
| 4015 | - tcg_gen_helper_0_0(helper_fxnors); | |
| 4016 | - gen_op_store_FT0_fpr(rd); | |
| 3986 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[rs2], -1); | |
| 3987 | + tcg_gen_xor_i32(cpu_fpr[rd], cpu_tmp32, cpu_fpr[rs1]); | |
| 4017 | 3988 | break; |
| 4018 | 3989 | case 0x074: /* VIS I fsrc1 */ |
| 4019 | 3990 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4020 | - gen_op_load_fpr_DT0(DFPREG(rs1)); | |
| 4021 | - gen_op_store_DT0_fpr(DFPREG(rd)); | |
| 3991 | + tcg_gen_mov_i32(cpu_fpr[DFPREG(rd)], cpu_fpr[DFPREG(rs1)]); | |
| 3992 | + tcg_gen_mov_i32(cpu_fpr[DFPREG(rd) + 1], | |
| 3993 | + cpu_fpr[DFPREG(rs1) + 1]); | |
| 4022 | 3994 | break; |
| 4023 | 3995 | case 0x075: /* VIS I fsrc1s */ |
| 4024 | 3996 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4025 | - gen_op_load_fpr_FT0(rs1); | |
| 4026 | - gen_op_store_FT0_fpr(rd); | |
| 3997 | + tcg_gen_mov_i32(cpu_fpr[rd], cpu_fpr[rs1]); | |
| 4027 | 3998 | break; |
| 4028 | 3999 | case 0x076: /* VIS I fornot2 */ |
| 4029 | 4000 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -4034,10 +4005,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 4034 | 4005 | break; |
| 4035 | 4006 | case 0x077: /* VIS I fornot2s */ |
| 4036 | 4007 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4037 | - gen_op_load_fpr_FT1(rs1); | |
| 4038 | - gen_op_load_fpr_FT0(rs2); | |
| 4039 | - tcg_gen_helper_0_0(helper_fornots); | |
| 4040 | - gen_op_store_FT0_fpr(rd); | |
| 4008 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[rs1], -1); | |
| 4009 | + tcg_gen_or_i32(cpu_fpr[rd], cpu_tmp32, cpu_fpr[rs2]); | |
| 4041 | 4010 | break; |
| 4042 | 4011 | case 0x078: /* VIS I fsrc2 */ |
| 4043 | 4012 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -4046,8 +4015,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 4046 | 4015 | break; |
| 4047 | 4016 | case 0x079: /* VIS I fsrc2s */ |
| 4048 | 4017 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4049 | - gen_op_load_fpr_FT0(rs2); | |
| 4050 | - gen_op_store_FT0_fpr(rd); | |
| 4018 | + tcg_gen_mov_i32(cpu_fpr[rd], cpu_fpr[rs2]); | |
| 4051 | 4019 | break; |
| 4052 | 4020 | case 0x07a: /* VIS I fornot1 */ |
| 4053 | 4021 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -4058,10 +4026,8 @@ static void disas_sparc_insn(DisasContext * dc) |
| 4058 | 4026 | break; |
| 4059 | 4027 | case 0x07b: /* VIS I fornot1s */ |
| 4060 | 4028 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4061 | - gen_op_load_fpr_FT0(rs1); | |
| 4062 | - gen_op_load_fpr_FT1(rs2); | |
| 4063 | - tcg_gen_helper_0_0(helper_fornots); | |
| 4064 | - gen_op_store_FT0_fpr(rd); | |
| 4029 | + tcg_gen_xori_i32(cpu_tmp32, cpu_fpr[rs2], -1); | |
| 4030 | + tcg_gen_or_i32(cpu_fpr[rd], cpu_tmp32, cpu_fpr[rs1]); | |
| 4065 | 4031 | break; |
| 4066 | 4032 | case 0x07c: /* VIS I for */ |
| 4067 | 4033 | CHECK_FPU_FEATURE(dc, VIS1); |
| ... | ... | @@ -4072,20 +4038,16 @@ static void disas_sparc_insn(DisasContext * dc) |
| 4072 | 4038 | break; |
| 4073 | 4039 | case 0x07d: /* VIS I fors */ |
| 4074 | 4040 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4075 | - gen_op_load_fpr_FT0(rs1); | |
| 4076 | - gen_op_load_fpr_FT1(rs2); | |
| 4077 | - tcg_gen_helper_0_0(helper_fors); | |
| 4078 | - gen_op_store_FT0_fpr(rd); | |
| 4041 | + tcg_gen_or_i32(cpu_fpr[rd], cpu_fpr[rs1], cpu_fpr[rs2]); | |
| 4079 | 4042 | break; |
| 4080 | 4043 | case 0x07e: /* VIS I fone */ |
| 4081 | 4044 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4082 | - tcg_gen_helper_0_0(helper_movl_DT0_1); | |
| 4083 | - gen_op_store_DT0_fpr(DFPREG(rd)); | |
| 4045 | + tcg_gen_movi_i32(cpu_fpr[DFPREG(rd)], -1); | |
| 4046 | + tcg_gen_movi_i32(cpu_fpr[DFPREG(rd) + 1], -1); | |
| 4084 | 4047 | break; |
| 4085 | 4048 | case 0x07f: /* VIS I fones */ |
| 4086 | 4049 | CHECK_FPU_FEATURE(dc, VIS1); |
| 4087 | - tcg_gen_helper_0_0(helper_movl_FT0_1); | |
| 4088 | - gen_op_store_FT0_fpr(rd); | |
| 4050 | + tcg_gen_movi_i32(cpu_fpr[rd], -1); | |
| 4089 | 4051 | break; |
| 4090 | 4052 | case 0x080: /* VIS I shutdown */ |
| 4091 | 4053 | case 0x081: /* VIS II siam */ | ... | ... |