diff --git a/asm/arm64_encode.go b/asm/arm64_encode.go index f664fcf..18b6ca0 100644 --- a/asm/arm64_encode.go +++ b/asm/arm64_encode.go @@ -823,7 +823,7 @@ func init() { "CASLH": 0x48a0fc00, "CASAW": 0x88e07c00, "CASAD": 0xc8e07c00, - "CASALH": 0x48e07c00, + "CASALH": 0x48e0fc00, "LDADDALD": 0xf8e00000, "LDADDALW": 0xb8e00000, "LDADDAD": 0xf8a00000, diff --git a/asm/arm64_encode_test.go b/asm/arm64_encode_test.go index 29c0da5..6efc39d 100644 --- a/asm/arm64_encode_test.go +++ b/asm/arm64_encode_test.go @@ -661,7 +661,8 @@ func TestArm64PairLoadStore(t *testing.T) { func TestArm64AcquireRelease(t *testing.T) { got := arm64Words(t, "\tLDAR (R27), R22\n\tLDARB (R25), R2\n\tLDARW (R12), R29\n\tSTLR R3, (R24)\n\tSTLRB R11, (R22)\n"+ "\tCASALD R5, (R6), R7\n\tLDADDALD R5, (R6), R7\n\tLDCLRALB R5, (R6), R7\n\tLDORALD R5, (RSP), R7\n\tSWPALW R5, (R6), R7\n"+ - "\tLDEORALD R5, (R6), R7\n\tLDEORALW R5, (RSP), R7\n") + "\tLDEORALD R5, (R6), R7\n\tLDEORALW R5, (RSP), R7\n"+ + "\tCASALH ZR, (R5), R8\n") want := []uint32{ 0xc8dfff76, // LDAR R22, (R27) 0x08dfff22, // LDARB R2, (R25) @@ -675,6 +676,7 @@ func TestArm64AcquireRelease(t *testing.T) { 0xb8e580c7, // SWPALW R7, (R6), R5 0xf8e520c7, // LDEORALD R7, (R6), R5 0xb8e523e7, // LDEORALW R7, (RSP), R5 + 0x48fffca8, // CASALH R8, (R5), ZR 0xd65f03c0, } if len(got) != len(want) {