From b934d999d98d0512173de2d9ab3a2e97c5fda015 Mon Sep 17 00:00:00 2001 From: Matt Godbolt Date: Mon, 26 Apr 2021 18:19:17 -0500 Subject: [PATCH] Keep go asm in UPPERCASE. See #2620 --- lib/compilers/golang.js | 23 +-- test/golang/bug-901.output.asm | 18 +- test/golang/labels.output.asm | 320 ++++++++++++++++----------------- 3 files changed, 177 insertions(+), 184 deletions(-) diff --git a/lib/compilers/golang.js b/lib/compilers/golang.js index 73a64aac7..bbcba3195 100644 --- a/lib/compilers/golang.js +++ b/lib/compilers/golang.js @@ -31,21 +31,15 @@ import { ClangParser } from './argument-parsers'; // Each arch has a list of jump instructions in // Go source src/cmd/asm/internal/arch. -const jumpPrefixes = [ - 'j', - 'b', - - // arm - 'cb', - 'tb', - - // s390x - 'cmpb', - 'cmpub', -]; +// x86 -> j, b +// arm -> cb, tb +// s390x -> cmpb, cmpub +const jumpRe = /^(j|b|cb|tb|cmpb|cmpub).*/i; export class GolangCompiler extends BaseCompiler { - static get key() { return 'golang'; } + static get key() { + return 'golang'; + } convertNewGoL(code) { const re = /^\s+(0[Xx]?[\dA-Za-z]+)?\s?(\d+)\s*\(([^:]+):(\d+)\)\s*([A-Z]+)(.*)/; @@ -129,7 +123,6 @@ export class GolangCompiler extends BaseCompiler { prevLine = lineMatch; } - ins = ins.toLowerCase(); args = this.replaceJump(func, funcCollisions[func], ins, args, usedLabels); res.push(`\t${ins}${args}`); return res; @@ -155,7 +148,7 @@ export class GolangCompiler extends BaseCompiler { } // Check instruction has a jump prefix - if (_.any(jumpPrefixes, prefix => ins.startsWith(prefix))) { + if (ins.match(jumpRe)) { let label = `${func}_pc${match[2]}`; if (collisions > 0) { label += `_${collisions}`; diff --git a/test/golang/bug-901.output.asm b/test/golang/bug-901.output.asm index 2a001ebb3..95520272b 100644 --- a/test/golang/bug-901.output.asm +++ b/test/golang/bug-901.output.asm @@ -1,14 +1,14 @@ .file 1 "test.go" .loc 1 3 0 - text "".Fun(SB), NOSPLIT, $0-0 - funcdata $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - xorl AX, AX + TEXT "".Fun(SB), NOSPLIT, $0-0 + FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + XORL AX, AX .loc 1 4 0 - jmp Fun_pc7 + JMP Fun_pc7 Fun_pc4: - incq AX + INCQ AX Fun_pc7: - cmpq AX, $10 - jlt Fun_pc4 - ret \ No newline at end of file + CMPQ AX, $10 + JLT Fun_pc4 + RET \ No newline at end of file diff --git a/test/golang/labels.output.asm b/test/golang/labels.output.asm index d92d436e1..b4cdf02c7 100644 --- a/test/golang/labels.output.asm +++ b/test/golang/labels.output.asm @@ -1,201 +1,201 @@ Closures_pc0: .file 1 "labels.go" .loc 1 5 0 - text "".Closures(SB), $24-0 - movq (TLS), CX - cmpq SP, 16(CX) - jls Closures_pc75 - subq $24, SP - movq BP, 16(SP) - leaq 16(SP), BP - funcdata $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $3, gclocals·9fb7f0986f647f17cb53dda1484e0f7a(SB) + TEXT "".Closures(SB), $24-0 + MOVQ (TLS), CX + CMPQ SP, 16(CX) + JLS Closures_pc75 + SUBQ $24, SP + MOVQ BP, 16(SP) + LEAQ 16(SP), BP + FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $3, gclocals·9fb7f0986f647f17cb53dda1484e0f7a(SB) .loc 1 6 0 - pcdata $2, $0 - pcdata $0, $0 - cmpq "".N(SB), $1 - jne Closures_pc49 + PCDATA $2, $0 + PCDATA $0, $0 + CMPQ "".N(SB), $1 + JNE Closures_pc49 Closures_pc39: - pcdata $2, $-2 - pcdata $0, $-2 - movq 16(SP), BP - addq $24, SP - ret + PCDATA $2, $-2 + PCDATA $0, $-2 + MOVQ 16(SP), BP + ADDQ $24, SP + RET Closures_pc49: .loc 1 7 0 - pcdata $2, $0 - pcdata $0, $0 - movl $0, (SP) - pcdata $2, $1 - leaq "".Closures.func1·f(SB), AX - pcdata $2, $0 - movq AX, 8(SP) - call runtime.newproc(SB) - jmp Closures_pc39 + PCDATA $2, $0 + PCDATA $0, $0 + MOVL $0, (SP) + PCDATA $2, $1 + LEAQ "".Closures.func1·f(SB), AX + PCDATA $2, $0 + MOVQ AX, 8(SP) + CALL runtime.newproc(SB) + JMP Closures_pc39 Closures_pc75: - nop + NOP .loc 1 5 0 - pcdata $0, $-1 - pcdata $2, $-1 - call runtime.morestack_noctxt(SB) - jmp Closures_pc0 + PCDATA $0, $-1 + PCDATA $2, $-1 + CALL runtime.morestack_noctxt(SB) + JMP Closures_pc0 Closures_func1_1_pc0: .loc 1 21 0 - text "".Closures_func1_1(SB), $16-0 - movq (TLS), CX - cmpq SP, 16(CX) - jls Closures_func1_1_pc74 - subq $16, SP - movq BP, 8(SP) - leaq 8(SP), BP - funcdata $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $3, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + TEXT "".Closures_func1_1(SB), $16-0 + MOVQ (TLS), CX + CMPQ SP, 16(CX) + JLS Closures_func1_1_pc74 + SUBQ $16, SP + MOVQ BP, 8(SP) + LEAQ 8(SP), BP + FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $3, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) .loc 1 22 0 - pcdata $2, $0 - pcdata $0, $0 - cmpq "".N(SB), $1 - jne Closures_func1_1_pc49 + PCDATA $2, $0 + PCDATA $0, $0 + CMPQ "".N(SB), $1 + JNE Closures_func1_1_pc49 Closures_func1_1_pc39: - pcdata $2, $-2 - pcdata $0, $-2 - movq 8(SP), BP - addq $16, SP - ret + PCDATA $2, $-2 + PCDATA $0, $-2 + MOVQ 8(SP), BP + ADDQ $16, SP + RET Closures_func1_1_pc49: .loc 1 23 0 - pcdata $2, $0 - pcdata $0, $0 - call runtime.printlock(SB) - movq $1, (SP) - call runtime.printint(SB) - call runtime.printunlock(SB) - jmp Closures_func1_1_pc39 + PCDATA $2, $0 + PCDATA $0, $0 + CALL runtime.printlock(SB) + MOVQ $1, (SP) + CALL runtime.printint(SB) + CALL runtime.printunlock(SB) + JMP Closures_func1_1_pc39 Closures_func1_1_pc74: - nop + NOP .loc 1 21 0 - pcdata $0, $-1 - pcdata $2, $-1 - call runtime.morestack_noctxt(SB) - jmp Closures_func1_1_pc0 + PCDATA $0, $-1 + PCDATA $2, $-1 + CALL runtime.morestack_noctxt(SB) + JMP Closures_func1_1_pc0 αβ_pc0: .loc 1 27 0 - text "".αβ(SB), $16-0 - movq (TLS), CX - cmpq SP, 16(CX) - jls αβ_pc74 - subq $16, SP - movq BP, 8(SP) - leaq 8(SP), BP - funcdata $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $3, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + TEXT "".αβ(SB), $16-0 + MOVQ (TLS), CX + CMPQ SP, 16(CX) + JLS αβ_pc74 + SUBQ $16, SP + MOVQ BP, 8(SP) + LEAQ 8(SP), BP + FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $3, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) .loc 1 28 0 - pcdata $2, $0 - pcdata $0, $0 - cmpq "".N(SB), $1 - jne αβ_pc49 + PCDATA $2, $0 + PCDATA $0, $0 + CMPQ "".N(SB), $1 + JNE αβ_pc49 αβ_pc39: - pcdata $2, $-2 - pcdata $0, $-2 - movq 8(SP), BP - addq $16, SP - ret + PCDATA $2, $-2 + PCDATA $0, $-2 + MOVQ 8(SP), BP + ADDQ $16, SP + RET αβ_pc49: .loc 1 29 0 - pcdata $2, $0 - pcdata $0, $0 - call runtime.printlock(SB) - movq $1, (SP) - call runtime.printint(SB) - call runtime.printunlock(SB) - jmp αβ_pc39 + PCDATA $2, $0 + PCDATA $0, $0 + CALL runtime.printlock(SB) + MOVQ $1, (SP) + CALL runtime.printint(SB) + CALL runtime.printunlock(SB) + JMP αβ_pc39 αβ_pc74: - nop + NOP .loc 1 27 0 - pcdata $0, $-1 - pcdata $2, $-1 - call runtime.morestack_noctxt(SB) - jmp αβ_pc0 + PCDATA $0, $-1 + PCDATA $2, $-1 + CALL runtime.morestack_noctxt(SB) + JMP αβ_pc0 Closures_func1_1_pc0_1: .loc 1 8 0 - text "".Closures.func1.1(SB), $16-0 - movq (TLS), CX - cmpq SP, 16(CX) - jls Closures_func1_1_pc74_1 - subq $16, SP - movq BP, 8(SP) - leaq 8(SP), BP - funcdata $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $3, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + TEXT "".Closures.func1.1(SB), $16-0 + MOVQ (TLS), CX + CMPQ SP, 16(CX) + JLS Closures_func1_1_pc74_1 + SUBQ $16, SP + MOVQ BP, 8(SP) + LEAQ 8(SP), BP + FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $3, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) .loc 1 9 0 - pcdata $2, $0 - pcdata $0, $0 - cmpq "".N(SB), $4 - jne Closures_func1_1_pc49_1 + PCDATA $2, $0 + PCDATA $0, $0 + CMPQ "".N(SB), $4 + JNE Closures_func1_1_pc49_1 Closures_func1_1_pc39_1: - pcdata $2, $-2 - pcdata $0, $-2 - movq 8(SP), BP - addq $16, SP - ret + PCDATA $2, $-2 + PCDATA $0, $-2 + MOVQ 8(SP), BP + ADDQ $16, SP + RET Closures_func1_1_pc49_1: .loc 1 10 0 - pcdata $2, $0 - pcdata $0, $0 - call runtime.printlock(SB) - movq $1, (SP) - call runtime.printint(SB) - call runtime.printunlock(SB) - jmp Closures_func1_1_pc39_1 + PCDATA $2, $0 + PCDATA $0, $0 + CALL runtime.printlock(SB) + MOVQ $1, (SP) + CALL runtime.printint(SB) + CALL runtime.printunlock(SB) + JMP Closures_func1_1_pc39_1 Closures_func1_1_pc74_1: - nop + NOP .loc 1 8 0 - pcdata $0, $-1 - pcdata $2, $-1 - call runtime.morestack_noctxt(SB) - jmp Closures_func1_1_pc0_1 + PCDATA $0, $-1 + PCDATA $2, $-1 + CALL runtime.morestack_noctxt(SB) + JMP Closures_func1_1_pc0_1 Closures_func1_pc0: .loc 1 7 0 - text "".Closures.func1(SB), $16-0 - movq (TLS), CX - cmpq SP, 16(CX) - jls Closures_func1_pc83 - subq $16, SP - movq BP, 8(SP) - leaq 8(SP), BP - funcdata $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) - funcdata $3, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + TEXT "".Closures.func1(SB), $16-0 + MOVQ (TLS), CX + CMPQ SP, 16(CX) + JLS Closures_func1_pc83 + SUBQ $16, SP + MOVQ BP, 8(SP) + LEAQ 8(SP), BP + FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + FUNCDATA $3, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) .loc 1 14 0 - pcdata $2, $0 - pcdata $0, $0 - movq "".N(SB), AX - cmpq AX, $3 - jeq Closures_func1_pc48 + PCDATA $2, $0 + PCDATA $0, $0 + MOVQ "".N(SB), AX + CMPQ AX, $3 + JEQ Closures_func1_pc48 .loc 1 15 0 - cmpq AX, $4 - jne Closures_func1_pc58 + CMPQ AX, $4 + JNE Closures_func1_pc58 Closures_func1_pc48: - pcdata $2, $-2 - pcdata $0, $-2 - movq 8(SP), BP - addq $16, SP - ret + PCDATA $2, $-2 + PCDATA $0, $-2 + MOVQ 8(SP), BP + ADDQ $16, SP + RET Closures_func1_pc58: - pcdata $2, $0 - pcdata $0, $0 - call runtime.printlock(SB) - movq $1, (SP) - call runtime.printint(SB) - call runtime.printunlock(SB) - jmp Closures_func1_pc48 + PCDATA $2, $0 + PCDATA $0, $0 + CALL runtime.printlock(SB) + MOVQ $1, (SP) + CALL runtime.printint(SB) + CALL runtime.printunlock(SB) + JMP Closures_func1_pc48 Closures_func1_pc83: - nop + NOP .loc 1 7 0 - pcdata $0, $-1 - pcdata $2, $-1 - call runtime.morestack_noctxt(SB) - jmp Closures_func1_pc0 + PCDATA $0, $-1 + PCDATA $2, $-1 + CALL runtime.morestack_noctxt(SB) + JMP Closures_func1_pc0