From 990dac2723d67b97692d4d35ac0a96189eeb5a09 Mon Sep 17 00:00:00 2001 From: fanzha02 Date: Tue, 13 Jun 2017 07:24:36 +0000 Subject: [PATCH] cmd/internal/obj/arm64: fix assemble LDXP bug The current code calculates register number incorrectly. The fix corrects the register number calculation. Add cases created by decoder to test assembler. Fixes #20697 Fixes #20723 Change-Id: I73ac153df9ea9f51c43a5104828d7a5389551c92 Reviewed-on: https://go-review.googlesource.com/45850 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Cherry Zhang --- src/cmd/asm/internal/asm/endtoend_test.go | 4 + src/cmd/asm/internal/asm/testdata/arm64enc.s | 503 +++++++++++++++++++ src/cmd/internal/obj/arm64/asm7.go | 6 +- 3 files changed, 510 insertions(+), 3 deletions(-) create mode 100644 src/cmd/asm/internal/asm/testdata/arm64enc.s diff --git a/src/cmd/asm/internal/asm/endtoend_test.go b/src/cmd/asm/internal/asm/endtoend_test.go index 239c211fc2..e5bc34edec 100644 --- a/src/cmd/asm/internal/asm/endtoend_test.go +++ b/src/cmd/asm/internal/asm/endtoend_test.go @@ -381,6 +381,10 @@ func TestARM64EndToEnd(t *testing.T) { testEndToEnd(t, "arm64", "arm64") } +func TestARM64Encoder(t *testing.T) { + testEndToEnd(t, "arm64", "arm64enc") +} + func TestAMD64EndToEnd(t *testing.T) { testEndToEnd(t, "amd64", "amd64") } diff --git a/src/cmd/asm/internal/asm/testdata/arm64enc.s b/src/cmd/asm/internal/asm/testdata/arm64enc.s new file mode 100644 index 0000000000..ec89474990 --- /dev/null +++ b/src/cmd/asm/internal/asm/testdata/arm64enc.s @@ -0,0 +1,503 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO means they cannot be handled now. +// Comment cases means they are handled incorrectly. + +#include "../../../../../runtime/textflag.h" + +TEXT asmtest(SB),DUPOK|NOSPLIT,$-8 + + AND $(1<<63), R1 // AND $-9223372036854775808, R1 // 21004192 + ADCW ZR, R8, R10 // 0a011f1a + ADC R0, R2, R12 // 4c00009a + ADCSW R9, R21, R6 // a602093a + ADCS R23, R22, R22 // d60217ba + //TODO ADDW R5.UXTH, R8, R9 // 0921250b + //TODO ADD R8.SXTB<<7, R23, R14 // ee9e288b + ADDW $3076, R17, R3 // 23123011 + ADDW $(3076<<12), R17, R3 // ADDW $12599296, R17, R3 // 23127011 + ADD $2280, R25, R11 // 2ba32391 + ADD $(2280<<12), R25, R11 // ADD $9338880, R25, R11 // 2ba36391 + ADDW R13->5, R11, R7 // 67158d0b + ADD R25<<54, R17, R16 // 30da198b + //TODO ADDSW R12.SXTX<<1, R29, R7 // a7e72c2b + //TODO ADDS R24.UXTX<<4, R25, R21 // 357338ab + ADDSW $(3525<<12), R3, R11 // ADDSW $14438400, R3, R11 // 6b147731 + ADDS $(3525<<12), R3, R11 // ADDS $14438400, R3, R11 // 6b1477b1 + ADDSW R7->22, R14, R13 // cd59872b + ADDS R14>>7, ZR, R4 // e41f4eab + AND $-9223372036854775808, R1, R1 // 21004192 + ANDW $4026540031, R29, R2 // a2430412 + AND $34903429696192636, R12, R19 // 93910e92 + ANDW R9@>7, R19, R26 // 7a1ec90a + AND R9@>7, R19, R26 // 7a1ec98a + //TODO TST $2863311530, R24 // 1ff32972 + ANDSW $2863311530, R24, R23 // 17f30172 + ANDS $-140737488289793, R2, R5 // 458051f2 + ANDSW R26->24, R21, R15 // af629a6a + ANDS R30@>44, R3, R26 // 7ab0deea + ASRW R12, R27, R25 // 792bcc1a + ASR R14, R27, R7 // 672bce9a + ASR $11, R27, R25 // 79ff4b93 + ASRW $11, R27, R25 // 797f0b13 + BLT -1(PC) // ebffff54 + JMP -1(PC) // ffffff17 + BFIW $16, R20, $6, R0 // 80161033 + BFI $27, R21, $21, R25 // b95265b3 + BFXILW $3, R27, $23, R14 // 6e670333 + BFXIL $26, R8, $16, R20 // 14a55ab3 + BICW R7@>15, R5, R16 // b03ce70a + BIC R12@>13, R12, R18 // 9235ec8a + BICSW R25->20, R3, R20 // 7450b96a + BICS R19->12, R1, R23 // 3730b3ea + BICS R19, R1, R23 // 370033ea + BICS R19>>0, R1, R23 // 370073ea + CALL -1(PC) // ffffff97 + CALL (R15) // e0013fd6 + JMP (R29) // a0031fd6 + // BRK $35943 // e08c31d4 + CBNZW R2, -1(PC) // e2ffff35 + CBNZ R7, -1(PC) // e7ffffb5 + CBZW R15, -1(PC) // efffff34 + CBZ R1, -1(PC) // e1ffffb4 + CCMN MI, ZR, R1, $4 // e44341ba + CCMNW AL, R26, $20, $11 // 4beb543a + CCMN PL, R24, $6, $1 // 015b46ba + CCMNW EQ, R20, R6, $6 // 8602463a + CCMN LE, R30, R12, $6 // c6d34cba + CCMPW VS, R29, $15, $7 // a76b4f7a + CCMP LE, R7, $19, $3 // e3d853fa + CCMPW HS, R18, R6, $0 // 4022467a + CCMP LT, R30, R6, $7 // c7b346fa + CCMN MI, ZR, R1, $4 // e44341ba + CSINCW HS, ZR, R27, R14 // ee279b1a + CSINC VC, R2, R1, R1 // 4174819a + CSINVW EQ, R2, R21, R17 // 5100955a + CSINV LO, R2, R19, R23 // 573093da + CINCW LO, R27, R14 // 6e279b1a + CINCW HS, R27, ZR // 7f379b1a + CINVW EQ, R2, R17 // 5110825a + CINV VS, R12, R7 // 87718cda + CINV VS, R30, R30 // de739eda + // CLREX $4 // 5f3403d5 + // CLREX $0 // 5f3003d5 + CLSW R15, R6 // e615c05a + CLS R15, ZR // ff15c0da + CLZW R1, R14 // 2e10c05a + CLZ R21, R9 // a912c0da + //TODO CMNW R21.UXTB<<4, R15 // ff11352b + //TODO CMN R0.UXTW<<4, R16 // 1f5220ab + CMNW R13>>8, R9 // 3f214d2b + CMN R6->17, R3 // 7f4486ab + CMNW $(2<<12), R5 // CMNW $8192, R5 // bf084031 + CMN $(8<<12), R12 // CMN $32768, R12 // 9f2140b1 + CMN R6->0, R3 // 7f0086ab + CMN R6, R3 // 7f0006ab + CMNW R30, R5 // bf001e2b + CMNW $2, R5 // bf080031 + CMN ZR, R3 // 7f001fab + CMN R0, R3 // 7f0000ab + //TODO CMPW R6.UXTB, R23 // ff02266b + //TODO CMP R25.SXTH<<5, R26 // 5fb739eb + CMP $3817, R29 // bfa73bf1 + CMP R7>>23, R3 // 7f5c47eb + CNEGW PL, R9, R14 // 2e45895a + CSNEGW HS, R5, R9, R14 // ae24895a + CSNEG PL, R14, R21, R3 // c35595da + CNEG LO, R7, R15 // ef2487da + CRC32B R17, R8, R16 // 1041d11a + CRC32H R3, R21, R27 // bb46c31a + CRC32W R22, R30, R9 // c94bd61a + CRC32X R20, R4, R15 // 8f4cd49a + CRC32CB R18, R27, R22 // 7653d21a + CRC32CH R21, R0, R20 // 1454d51a + CRC32CW R9, R3, R21 // 7558c91a + CRC32CX R11, R0, R24 // 185ccb9a + CSELW LO, R4, R20, R12 // 8c30941a + CSEL GE, R0, R12, R14 // 0ea08c9a + CSETW GE, R3 // e3b79f1a + CSET LT, R30 // fea79f9a + CSETMW VC, R5 // e5639f5a + CSETM VS, R4 // e4739fda + CSINCW LE, R5, R24, R26 // bad4981a + CSINC VS, R26, R16, R17 // 5167909a + CSINVW AL, R23, R21, R5 // e5e2955a + CSINV LO, R2, R11, R14 // 4e308bda + CSNEGW HS, R16, R29, R10 // 0a269d5a + CSNEG NE, R21, R18, R11 // ab1692da + //TODO DC + // DCPS1 $11378 // 418ea5d4 + // DCPS2 $10699 // 6239a5d4 + // DCPS3 $24415 // e3ebabd4 + DMB $1 // bf3103d5 + DMB $0 // bf3003d5 + DRPS // e003bfd6 + DSB $1 // 9f3103d5 + EONW R21<<29, R6, R9 // c974354a + EON R14>>46, R4, R9 // 89b86eca + EOR $-2287828610704211969, R27, R22 // 76e343d2 + EORW R12->27, R10, R19 // 536d8c4a + EOR R2<<59, R30, R17 // d1ef02ca + ERET // e0039fd6 + EXTRW $7, R8, R10, R25 // 591d8813 + EXTR $35, R22, R12, R8 // 888dd693 + SEVL // bf2003d5 + HINT $6 // df2003d5 + // HLT $65509 // a0fc5fd4 + // HVC $61428 // 82fe1dd4 + ISB $1 // df3103d5 + ISB $15 // df3f03d5 + LDARW (R12), R29 // 9dfddf88 + LDARW (R30), R22 // d6ffdf88 + LDARW (RSP), R22 // f6ffdf88 + LDAR (R27), R22 // 76ffdfc8 + //TODO LDARB (R25), R2 // 22ffdf08 + //TODO LDARH (R5), R7 // a7fcdf48 + //TODO LDAXPW (R10), R16, R20 // 54c17f88 + //TODO LDAXP (R25), R11, R30 // 3eaf7fc8 + LDAXRW (R15), R2 // e2fd5f88 + LDAXR (R15), R21 // f5fd5fc8 + LDAXRB (R19), R16 // 70fe5f08 + LDAXRH (R5), R8 // a8fc5f48 + //TODO LDNP 0xcc(RSP), ZR, R12 // ecff5928 + //TODO LDNP 0x40(R28), R9, R5 // 852744a8 + //TODO LDPSW -0xd0(R2), R0, R12 // 4c00e668 + //TODO LDPSW 0x5c(R4), R8, R5 // 85a0cb69 + //TODO LDPSW 0x6c(R12), R2, R27 // 9b894d69 + MOVWU.P -84(R15), R9 // e9c55ab8 + MOVD.P -46(R10), R8 // 48255df8 + MOVD.P (R10), R8 // 480540f8 + MOVWU.W -141(R3), R16 // 703c57b8 + MOVD.W -134(R0), R29 // 1dac57f8 + MOVWU 4156(R1), R25 // 393c50b9 + MOVD 14616(R10), R9 // 498d5cf9 + MOVBU.P 42(R2), R12 // 4ca44238 + MOVBU.W -27(R2), R14 // 4e5c5e38 + MOVBU 2916(R24), R3 // 03936d39 + //TODO MOVBU R14<<1(R18), R23 // 577a6e38 + MOVHU.P 107(R13), R13 // adb54678 + MOVHU.W 192(R2), R2 // 420c4c78 + MOVHU 6844(R4), R18 // 92787579 + //TODO MOVBW.P 77(R18), R11 // 4bd6c438 + MOVB.P 36(RSP), R27 // fb478238 + //TODO MOVBW.W -57(R18), R13 // 4d7edc38 + MOVB.W -178(R16), R24 // 18ee9438 + //TODO MOVBW 430(R8), R22 // 16b9c639 + MOVB 997(R9), R23 // 37958f39 + //TODO MOVBW R2<<1(R21), R15 // af7ae238 + //TODO MOVBW R26(R0), R21 // 1568fa38 + //TODO MOVB R5(R15), R16 // f069a538 + //TODO MOVHW.P 218(R22), R25 // d9a6cd78 + MOVH.P 179(R23), R5 // e5368b78 + //TODO MOVHW.W 136(R2), R27 // 5b8cc878 + MOVH.W -63(R25), R22 // 361f9c78 + //TODO MOVHW 5708(R25), R21 // 359bec79 + MOVH 54(R2), R13 // 4d6c8079 + MOVW.P -58(R16), R2 // 02669cb8 + MOVW.W -216(R18), R8 // 488e92b8 + MOVW 4764(R23), R10 // ea9e92b9 + //TODO LDTR -0x1e(R3), R4 // 64285eb8 + //TODO LDTR -0xe5(R3), R10 // 6ab851f8 + //TODO LDTRB 0xf0(R13), R10 // aa094f38 + //TODO LDTRH 0xe8(R13), R23 // b7894e78 + //TODO LDTRSB -0x24(R20), R5 // 85cadd38 + //TODO LDTRSB -0x75(R9), R13 // 2db99838 + //TODO LDTRSH 0xef(R3), LR // 7ef8ce78 + //TODO LDTRSH 0x96(R19), R24 // 786a8978 + //TODO LDTRSW 0x1e(LR), R5 // c5eb81b8 + //TODO LDUR 0xbf(R13), R1 // a1f14bb8 + //TODO LDUR -0x3c(R22), R3 // c3425cf8 + //TODO LDURB -0xff(R17), R14 // 2e125038 + //TODO LDURH 0x80(R1), R6 // 26004878 + //TODO LDURSB 0xde(LR), R3 // c3e3cd38 + //TODO LDURSB 0x96(R9), R7 // 27618938 + //TODO LDURSH -0x49(R11), R28 // 7c71db78 + //TODO LDURSH -0x1f(R0), R29 // 1d109e78 + //TODO LDURSW 0x48(R6), R20 // d48084b8 + LDXPW (R24), R11, R23 // 172f7f88 + LDXP (R0), R13, R16 // 10347fc8 + LDXRW (RSP), R30 // fe7f5f88 + LDXR (R27), R12 // 6c7f5fc8 + LDXRB (R0), R4 // 047c5f08 + LDXRH (R12), R26 // 9a7d5f48 + LSLW R11, R10, R15 // 4f21cb1a + LSL R27, R24, R21 // 1523db9a + LSLW $5, R7, R22 // f6681b53 + LSL $57, R17, R2 // 221a47d3 + LSRW R9, R3, R12 // 6c24c91a + LSR R10, R5, R2 // a224ca9a + LSRW $1, R3, R16 // 707c0153 + LSR $12, R1, R20 // 34fc4cd3 + MADDW R13, R23, R3, R10 // 6a5c0d1b + MADD R5, R23, R10, R4 // 445d059b + MNEGW R0, R9, R21 // 35fd001b + MNEG R14, R27, R23 // 77ff0e9b + MOVD R2, R7 // e70302aa + MOVW $-24, R20 // f4028012 + MOVD $-51096, ZR // fff29892 + MOVW $2507014144, R20 // d4adb252 + MOVD $1313925191285342208, R7 // 8747e2d2 + ORRW $16252928, ZR, R21 // f5130d32 + MOVD $-4260607558625, R11 // eb6b16b2 + MOVD R30, R7 // e7031eaa + // MOVKW $(3905<<0), R21 // MOVKW $3905, R21 // 35e88172 + // MOVKW $(3905<<16), R21 // MOVKW $255918080, R21 // 35e8a172 + // MOVK $(3905<<32), R21 // MOVK $16771847290880, R21 // 35e8c1f2 + MOVD $0, R5 // 050080d2 + // MRS $4567, R16 // f03a32d5 + // MRS $32345, R6 // 26cb3fd5 + // MSR R25, $3452 // 99af11d5 + // MSR R25, $16896 // 194018d5 + // MSR $6, DAIFClr // ff4603d5 + MSUBW R1, R1, R12, R5 // 8585011b + MSUB R19, R16, R26, R2 // 42c3139b + MULW R26, R5, R22 // b67c1a1b + MUL R4, R3, R0 // 607c049b + MVNW R3@>13, R8 // e837e32a + MVN R13>>31, R9 // e97f6daa + NEGSW R23<<1, R30 // fe07176b + NEGS R20>>35, R22 // f68f54eb + NGCW R13, R8 // e8030d5a + NGC R2, R7 // e70302da + NGCSW R10, R5 // e5030a7a + NGCS R24, R16 // f00318fa + //TODO NOP // 1f2003d5 + ORNW R4@>11, R16, R3 // 032ee42a + ORN R22@>19, R3, R3 // 634cf6aa + ORRW $4294443071, R15, R24 // f8490d32 + ORR $-3458764513820540929, R12, R22 // 96f542b2 + ORRW R13<<4, R8, R26 // 1a110d2a + ORR R3<<22, R5, R6 // a65803aa + //TODO PRFM 0x6400(R7), PSTL2STRM // f300b2f9 + //TODO PRFM -215799(PC), PLIL2KEEP // 2aa196d8 + //TODO PRFUM 0x42(R14), #0X06 // c62184f8 + RBITW R9, R22 // 3601c05a + RBIT R11, R4 // 6401c0da + RET // c0035fd6 + REVW R8, R10 // 0a09c05a + REV R1, R2 // 220cc0da + REV16W R21, R18 // b206c05a + REV16 R25, R4 // 2407c0da + REV32 R27, R21 // 750bc0da + EXTRW $27, R4, R25, R19 // 336f8413 + EXTR $17, R10, R29, R15 // af47ca93 + ROR $14, R14, R15 // cf39ce93 + RORW $28, R14, R15 // cf718e13 + RORW R3, R12, R3 // 832dc31a + ROR R0, R23, R2 // e22ec09a + SBCW R4, R8, R24 // 1801045a + SBC R25, R10, R26 // 5a0119da + SBCSW R27, R18, R18 // 52021b7a + SBCS R5, R9, R5 // 250105fa + SBFIZW $9, R10, $18, R22 // 56451713 + SBFIZ $6, R11, $15, R20 // 74397a93 + SBFXW $8, R15, $10, R20 // f4450813 + SBFX $2, R27, $54, R7 // 67df4293 + SDIVW R22, R14, R9 // c90dd61a + SDIV R13, R21, R9 // a90ecd9a + SEV // 9f2003d5 + SEVL // bf2003d5 + SMADDL R3, R7, R11, R9 // 691d239b + SMSUBL R5, R19, R11, R29 // 7dcd259b + SMNEGL R26, R3, R15 // 6ffc3a9b + SMULH R17, R21, R21 // b57e519b + SMULL R0, R5, R0 // a07c209b + // SMC $37977 // 238b12d4 + STLRW R16, (R22) // d0fe9f88 + STLR R3, (R24) // 03ff9fc8 + //TODO STLRB R11, (R22) // cbfe9f08 + //TODO STLRH R16, (R23) // f0fe9f48 + STLXR R7, (R27), R8 // 67ff08c8 + STLXRW R13, (R15), R14 // edfd0e88 + STLXRB R24, (R23), R8 // f8fe0808 + STLXRH R19, (R27), R11 // 73ff0b48 + //TODO STLXPW (R22), R11, R6, R21 // c6ae3588 + //TODO STLXP (R22), LR, R6, R2 // c6fa22c8 + //TODO STNPW 44(R1), R3, R10 // 2a8c0528 + //TODO STNP 0x108(R3), ZR, R7 // 67fc10a8 + LDP.P -384(R3), (R22, R26) // 7668e8a8 + LDP.W 280(R8), (R18, R11) // 12add1a9 + STP.P (R22, R27), 352(R0) // 166c96a8 + STP.W (R17, R11), 96(R8) // 112d86a9 + MOVW.P R20, -28(R1) // 34441eb8 + MOVD.P R17, 191(R16) // 11f60bf8 + MOVW.W R1, -171(R14) // c15d15b8 + MOVD.W R14, -220(R13) // ae4d12f8 + MOVW R3, 14828(R24) // 03ef39b9 + MOVD R0, 20736(R17) // 208228f9 + MOVB.P ZR, -117(R7) // ffb41838 + MOVB.W R27, -96(R13) // bb0d1a38 + MOVB R17, 2200(R13) // b1612239 + MOVH.P R7, -72(R4) // 87841b78 + MOVH.W R12, -125(R14) // cc3d1878 + MOVH R19, 3686(R26) // 53cf1c79 + MOVW R21, 34(R0) // 152002b8 + MOVD R25, -137(R17) // 397217f8 + MOVH R11, -80(R23) // eb021b78 + //TODO MOVB R18, R0(R4) // 92682038 + //TODO MOVB R1, R6(R4) // 81682638 + //TODO MOVH R3, R13<<1(R11) // 63792d78 + //TODO STTR 55(R4), R29 // 9d7803b8 + //TODO STTR 124(R5), R25 // b9c807f8 + //TODO STTRB -28(R23), R16 // f04a1e38 + //TODO STTRH 9(R10), R18 // 52990078 + //TODO STXP (R20), R18, R5, ZR // 854a3f88 + //TODO STXP (R22), R9, R17, R0 // d12620c8 + // STXRW R2, (R19), R18 // 627e1288 + // STXR R15, (R21), R13 // af7e0dc8 + // STXRB R7, (R9), R24 // 277d1808 + // STXRH R12, (R3), R8 // 6c7c0848 + //TODO SUBW R20.UXTW<<7, R23, R18 // f25e344b + //TODO SUB R5.SXTW<<2, R1, R26 // 3ac825cb + SUB $(1923<<12), R4, R27 // SUB $7876608, R4, R27 // 9b0c5ed1 + SUBW $(1923<<12), R4, R27 // SUBW $7876608, R4, R27 // 9b0c5e51 + SUBW R12<<29, R7, R8 // e8740c4b + SUB R12<<61, R7, R8 // e8f40ccb + //TODO SUBSW R2.SXTH<<3, R13, R6 // a6ad226b + //TODO SUBS R21.UXTX<<5, R27, R4 // 647735eb + SUBSW $(44<<12), R6, R9 // SUBSW $180224, R6, R9 // c9b04071 + SUBS $(1804<<12), R13, R9 // SUBS $7389184, R13, R9 // a9315cf1 + SUBSW R22->28, R6, R7 // c770966b + SUBSW R22>>28, R6, R7 // c770566b + SUBS R26<<15, R6, R16 // d03c1aeb + SVC $0 // 010000d4 + SVC $7165 // a17f03d4 + SXTBW R8, R25 // 191d0013 + SXTB R13, R9 // a91d4093 + SXTHW R8, R8 // 083d0013 + SXTH R17, R25 // 393e4093 + SXTW R0, R27 // 1b7c4093 + SYSL $285440, R12 // 0c5b2cd5 + //TODO TLBI + //TODO TST $0x80000007, R9 // 3f0d0172 + //TODO TST $0xfffffff0, LR // df6f7cf2 + //TODO TSTW R10@>21, R2 // 1f2f11ea + //TODO TST R17<<11, R24 // 1f2f11ea + UBFIZW $3, R19, $14, R14 // 6e361d53 + UBFIZ $3, R22, $14, R4 // c4367dd3 + UBFXW $3, R7, $20, R15 // ef580353 + UBFX $33, R17, $25, R5 // 25e661d3 + UDIVW R8, R21, R15 // af0ac81a + UDIV R2, R18, R21 // 550ac29a + UMADDL R0, R20, R17, R17 // 3152a09b + UMSUBL R22, R4, R3, R7 // 6790b69b + UMNEGL R3, R18, R1 // 41fea39b + UMULH R24, R20, R24 // 987ed89b + UMULL R18, R22, R19 // d37eb29b + UXTBW R2, R6 // 461c0053 + UXTHW R7, R20 // f43c0053 + WFE // 5f2003d5 + WFI // 7f2003d5 + YIELD // 3f2003d5 + //TODO FADD V21.D2, V10.D2, V21.D2 // 55d5754e + FADDS F12, F2, F10 // 4a282c1e + FADDD F24, F14, F12 // cc29781e + FCCMPS LE, F17, F12, $14 // 8ed5311e + FCCMPD HI, F11, F15, $15 // ef856b1e + FCCMPES HS, F28, F13, $13 // bd253c1e + FCCMPED LT, F20, F4, $9 // 99b4741e + // FCMPS F3, F17 // 2022231e + // FCMPS $(0.0), F8 // 0821201e + // FCMPD F11, F27 // 60236b1e + // FCMPD $(0.0), F25 // 2823601e + // FCMPES F16, F30 // d023301e + // FCMPES $(0.0), F29 // b823201e + // FCMPED F13, F10 // 50216d1e + // FCMPED $(0.0), F25 // 3823601e + // FCSELS EQ, F26, F27, F25 // 590f3b1e + // FCSELD PL, F8, F22, F7 // 075d761e + //TODO FCVTASW F21, R15 // af02241e + //TODO FCVTAS F20, ZR // 9f02249e + //TODO FCVTASW F6, R11 // cb00641e + //TODO FCVTAS F6, R1 // c100649e + //TODO FCVTAUW F19, R26 // 7a02251e + //TODO FCVTAU F6, R5 // c500259e + //TODO FCVTAUW F6, R23 // d700651e + //TODO FCVTAU F27, R5 // 6503659e + //TODO FCVTMSW F15, R6 // e601301e + //TODO FCVTMS F15, ZR // ff01309e + //TODO FCVTMSW F1, R14 // 2e00701e + //TODO FCVTMS F21, R9 // a902709e + //TODO FCVTMUW F20, R28 // 9c02311e + //TODO FCVTMU F23, R14 // ee02319e + //TODO FCVTMUW F18, R28 // 5c02711e + //TODO FCVTMU F24, R6 // 0603719e + //TODO FCVTNSW F12, R13 // 8d01201e + //TODO FCVTNS F9, R26 // 3a01209e + //TODO FCVTNSW F14, R8 // c801601e + //TODO FCVTNS F28, R10 // 8a03609e + //TODO FCVTNUW F22, R30 // de02211e + //TODO FCVTNU F20, R4 // 8402219e + //TODO FCVTNUW F18, R27 // 5b02611e + //TODO FCVTNU F21, R0 // a002619e + //TODO FCVTPSW F20, R6 // 8602281e + //TODO FCVTPS F12, R20 // 9401289e + //TODO FCVTPSW F22, R6 // c602681e + //TODO FCVTPS F21, R28 // bc02689e + //TODO FCVTPUW F24, R26 // 1a03291e + //TODO FCVTPU F16, R13 // 0d02299e + //TODO FCVTPUW F21, R29 // bd02691e + //TODO FCVTPU F11, R7 // 6701699e + FCVTZSSW F7, R15 // ef00381e + FCVTZSS F16, ZR // 1f02389e + FCVTZSDW F19, R3 // 6302781e + FCVTZSD F7, R7 // e700789e + FCVTZUSW F2, R9 // 4900391e + FCVTZUS F12, R29 // 9d01399e + FCVTZUDW F27, R22 // 7603791e + FCVTZUD F25, R22 // 3603799e + //TODO FCVTZS $63, R18, R28 // 5c06189e + //TODO FCVTZS $41, R11, R17 // 715d589e + //TODO FCVTZU $1, ZR, R5 // e5ff199e + //TODO FCVTZUW $5, ZR, R20 // f4ef591e + //TODO FCVTZU $31, R3, R7 // 6784599e + FDIVS F16, F10, F20 // 5419301e + FDIVD F11, F25, F30 // 3e1b6b1e + //TODO FMADD R2, R15, R8, R1 // 01090f1f + //TODO FMADD R21, R15, R25, R9 // 29574f1f + FMAXS F5, F28, F27 // 9b4b251e + FMAXD F12, F31, F31 // ff4b6c1e + FMAXNMS F11, F24, F12 // 0c6b2b1e + FMAXNMD F20, F6, F16 // d068741e + FMINS F26, F18, F30 // 5e5a3a1e + FMIND F29, F4, F21 // 95587d1e + FMINNMS F23, F20, F1 // 817a371e + FMINNMD F8, F3, F24 // 7878681e + // FMOVS $(-1.625), F13 // 0d503f1e + // FMOVD $12.5, F30 // 1e30651e + //TODO FMOV R7, V25.D[1] // f900af9e + FMOVD F2, R15 // 4f00669e + FMOVD R3, F11 // 6b00679e + FMOVS F20, R29 // 9d02261e + FMOVS R8, F15 // 0f01271e + FMOVD F2, F9 // 4940601e + FMOVS F4, F27 // 9b40201e + //TODO FMOV $3.125, V8.2D // 28f5006f + //TODO FMSUB R21, R13, R13, R19 // b3d50d1f + //TODO FMSUB R7, R11, R15, ZR // ff9d4b1f + FMULS F0, F6, F24 // d808201e + FMULD F5, F29, F9 // a90b651e + //TODO FNMADD R22, R17, R6, R20 // d458311f + //TODO FNMADD R0, R15, R26, R20 // 54036f1f + //TODO FNMSUB R16, R14, R27, R14 // 6ec32e1f + //TODO FNMSUB R25, R29, R8, R10 // 0ae57d1f + FNMULS F24, F22, F18 // d28a381e + FNMULD F14, F30, F7 // c78b6e1e + FSQRTS F0, F9 // 09c0211e + FSQRTD F14, F27 // dbc1611e + FSUBS F25, F23, F0 // e03a391e + FSUBD F11, F13, F24 // b8396b1e + //TODO SCVTFSS F30, F20 // d4db215e + //TODO SCVTF V7.2S, V17.2S // f1d8210e + SCVTFWS R3, F16 // 7000221e + SCVTFWD R20, F4 // 8402621e + SCVTFS R16, F12 // 0c02229e + SCVTFD R26, F14 // 4e03629e + UCVTFWS R6, F4 // c400231e + UCVTFWD R10, F23 // 5701631e + UCVTFS R24, F29 // 1d03239e + UCVTFD R20, F11 // 8b02639e + + RET diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index f4e2562cdd..04a481863a 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -2232,7 +2232,7 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = 0 } - case 15: /* mul/mneg/umulh/umull r,[r,]r; madd/msub Rm,Rn,Ra,Rd */ + case 15: /* mul/mneg/umulh/umull r,[r,]r; madd/msub Rm,Ra,Rn,Rd */ o1 = c.oprrr(p, p.As) rf := int(p.From.Reg) @@ -2900,9 +2900,9 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = c.opload(p, p.As) o1 |= 0x1F << 16 - o1 |= uint32(p.From.Reg) << 5 + o1 |= uint32(p.From.Reg&31) << 5 if p.Reg != 0 { - o1 |= uint32(p.Reg) << 10 + o1 |= uint32(p.Reg&31) << 10 } else { o1 |= 0x1F << 10 } -- 2.50.0