From ce23729af24eedbf18d6ab87298205edef357a19 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 27 Jul 2015 23:26:26 -0400 Subject: [PATCH] cmd/asm: fix and test CALL, JMP aliases on arm, arm64, ppc64 Fixes #11900. Change-Id: Idfc54e1fac833c8d646266128efe46214a82dfed Reviewed-on: https://go-review.googlesource.com/12741 Reviewed-by: David Crawshaw Reviewed-by: Rob Pike --- src/cmd/asm/internal/arch/arm.go | 1 + src/cmd/asm/internal/arch/arm64.go | 1 + src/cmd/asm/internal/arch/ppc64.go | 2 +- src/cmd/asm/internal/asm/testdata/arm.out | 6 +++++- src/cmd/asm/internal/asm/testdata/arm.s | 7 +++++++ src/cmd/asm/internal/asm/testdata/arm64.out | 6 +++++- src/cmd/asm/internal/asm/testdata/arm64.s | 7 +++++++ src/cmd/asm/internal/asm/testdata/ppc64.out | 6 +++++- src/cmd/asm/internal/asm/testdata/ppc64.s | 7 +++++++ src/cmd/old5a/lex.go | 2 ++ src/cmd/old9a/lex.go | 2 ++ 11 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/cmd/asm/internal/arch/arm.go b/src/cmd/asm/internal/arch/arm.go index 2354d616d9..c030214460 100644 --- a/src/cmd/asm/internal/arch/arm.go +++ b/src/cmd/asm/internal/arch/arm.go @@ -79,6 +79,7 @@ var armJump = map[string]bool{ "BGT": true, "BLE": true, "CALL": true, + "JMP": true, } func jumpArm(word string) bool { diff --git a/src/cmd/asm/internal/arch/arm64.go b/src/cmd/asm/internal/arch/arm64.go index a0a0082347..0f29e81e2e 100644 --- a/src/cmd/asm/internal/arch/arm64.go +++ b/src/cmd/asm/internal/arch/arm64.go @@ -42,6 +42,7 @@ var arm64Jump = map[string]bool{ "CBZW": true, "CBNZ": true, "CBNZW": true, + "JMP": true, } func jumpArm64(word string) bool { diff --git a/src/cmd/asm/internal/arch/ppc64.go b/src/cmd/asm/internal/arch/ppc64.go index 5916e2413c..6523fbf134 100644 --- a/src/cmd/asm/internal/arch/ppc64.go +++ b/src/cmd/asm/internal/arch/ppc64.go @@ -12,7 +12,7 @@ import "cmd/internal/obj/ppc64" func jumpPPC64(word string) bool { switch word { - case "BC", "BCL", "BEQ", "BGE", "BGT", "BL", "BLE", "BLT", "BNE", "BR", "BVC", "BVS", "CALL": + case "BC", "BCL", "BEQ", "BGE", "BGT", "BL", "BLE", "BLT", "BNE", "BR", "BVC", "BVS", "CALL", "JMP": return true } return false diff --git a/src/cmd/asm/internal/asm/testdata/arm.out b/src/cmd/asm/internal/asm/testdata/arm.out index c297844b37..7501db3e5a 100644 --- a/src/cmd/asm/internal/asm/testdata/arm.out +++ b/src/cmd/asm/internal/asm/testdata/arm.out @@ -52,4 +52,8 @@ 266 00052 (testdata/arm.s:266) PLD (R1) 267 00053 (testdata/arm.s:267) PLD 4(R1) 276 00054 (testdata/arm.s:276) RET -285 00055 (testdata/arm.s:285) END +280 00055 (testdata/arm.s:280) JMP foo(SB) +281 00056 (testdata/arm.s:281) CALL foo(SB) +282 00057 (testdata/arm.s:282) JMP foo(SB) +283 00058 (testdata/arm.s:283) CALL foo(SB) +292 00059 (testdata/arm.s:292) END diff --git a/src/cmd/asm/internal/asm/testdata/arm.s b/src/cmd/asm/internal/asm/testdata/arm.s index 128f830b7e..b8bdfb201a 100644 --- a/src/cmd/asm/internal/asm/testdata/arm.s +++ b/src/cmd/asm/internal/asm/testdata/arm.s @@ -275,6 +275,13 @@ TEXT foo(SB), 0, $0 // } RET +// More B/BL cases, and canonical names JMP, CALL. + + B foo(SB) + BL foo(SB) + JMP foo(SB) + CALL foo(SB) + // // END // diff --git a/src/cmd/asm/internal/asm/testdata/arm64.out b/src/cmd/asm/internal/asm/testdata/arm64.out index f8cc74ea1d..0b7b430f4c 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64.out +++ b/src/cmd/asm/internal/asm/testdata/arm64.out @@ -48,4 +48,8 @@ 242 00048 (testdata/arm64.s:242) LDAXRW (R0), R2 243 00049 (testdata/arm64.s:243) STLXRW R1, (R0), R3 251 00050 (testdata/arm64.s:251) RET -259 00051 (testdata/arm64.s:259) END +255 00051 (testdata/arm64.s:255) JMP foo(SB) +256 00052 (testdata/arm64.s:256) CALL foo(SB) +257 00053 (testdata/arm64.s:257) JMP foo(SB) +258 00054 (testdata/arm64.s:258) CALL foo(SB) +266 00055 (testdata/arm64.s:266) END diff --git a/src/cmd/asm/internal/asm/testdata/arm64.s b/src/cmd/asm/internal/asm/testdata/arm64.s index 699191be7a..2c8720bd3b 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64.s +++ b/src/cmd/asm/internal/asm/testdata/arm64.s @@ -250,6 +250,13 @@ again: // } RET +// More B/BL cases, and canonical names JMP, CALL. + + B foo(SB) + BL foo(SB) + JMP foo(SB) + CALL foo(SB) + // END // // LTYPEE comma diff --git a/src/cmd/asm/internal/asm/testdata/ppc64.out b/src/cmd/asm/internal/asm/testdata/ppc64.out index b9596339d8..2a5d175333 100644 --- a/src/cmd/asm/internal/asm/testdata/ppc64.out +++ b/src/cmd/asm/internal/asm/testdata/ppc64.out @@ -107,4 +107,8 @@ 691 00107 (testdata/ppc64.s:691) NOP F2 697 00108 (testdata/ppc64.s:697) NOP $4 705 00109 (testdata/ppc64.s:705) RET -713 00110 (testdata/ppc64.s:713) END +709 00110 (testdata/ppc64.s:709) JMP foo(SB) +710 00111 (testdata/ppc64.s:710) CALL foo(SB) +711 00112 (testdata/ppc64.s:711) JMP foo(SB) +712 00113 (testdata/ppc64.s:712) CALL foo(SB) +720 00114 (testdata/ppc64.s:720) END diff --git a/src/cmd/asm/internal/asm/testdata/ppc64.s b/src/cmd/asm/internal/asm/testdata/ppc64.s index 136ced40e1..46c1ee6d95 100644 --- a/src/cmd/asm/internal/asm/testdata/ppc64.s +++ b/src/cmd/asm/internal/asm/testdata/ppc64.s @@ -704,6 +704,13 @@ label1: // } RET +// More BR/BL cases, and canonical names JMP, CALL. + + BR foo(SB) + BL foo(SB) + JMP foo(SB) + CALL foo(SB) + // END // // LEND comma // asm doesn't support the trailing comma. diff --git a/src/cmd/old5a/lex.go b/src/cmd/old5a/lex.go index 1afd827793..1f538ea65f 100644 --- a/src/cmd/old5a/lex.go +++ b/src/cmd/old5a/lex.go @@ -249,7 +249,9 @@ var lexinit = []asm.Lextab{ {"DIVF", LTYPEK, arm.ADIVF}, {"DIVD", LTYPEK, arm.ADIVD}, {"B", LTYPE4, arm.AB}, + {"JMP", LTYPE4, arm.AB}, {"BL", LTYPE4, arm.ABL}, + {"CALL", LTYPE4, arm.ABL}, {"BX", LTYPEBX, arm.ABX}, {"BEQ", LTYPE5, arm.ABEQ}, {"BNE", LTYPE5, arm.ABNE}, diff --git a/src/cmd/old9a/lex.go b/src/cmd/old9a/lex.go index 4f9b7eeda8..f04c8dfdd6 100644 --- a/src/cmd/old9a/lex.go +++ b/src/cmd/old9a/lex.go @@ -256,9 +256,11 @@ var lexinit = []asm.Lextab{ {"SRAW", LSHW, ppc64.ASRAW}, {"SRAWCC", LSHW, ppc64.ASRAWCC}, {"BR", LBRA, ppc64.ABR}, + {"JMP", LBRA, ppc64.ABR}, {"BC", LBRA, ppc64.ABC}, {"BCL", LBRA, ppc64.ABC}, {"BL", LBRA, ppc64.ABL}, + {"CALL", LBRA, ppc64.ABL}, {"BEQ", LBRA, ppc64.ABEQ}, {"BNE", LBRA, ppc64.ABNE}, {"BGT", LBRA, ppc64.ABGT}, -- 2.48.1