From: Rob Pike Date: Mon, 23 Feb 2015 23:48:09 +0000 (-0800) Subject: cmd/asm: add end to end test for 386 X-Git-Tag: go1.5beta1~1883 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=df5cfe7c1f86865cbda41dc7b1c4dbd732e0e8fb;p=gostls13.git cmd/asm: add end to end test for 386 Change-Id: I6514f69b979d064b6a3c4b5d0828cc94f485cac2 Reviewed-on: https://go-review.googlesource.com/5694 Reviewed-by: Russ Cox --- diff --git a/src/cmd/asm/internal/asm/endtoend_test.go b/src/cmd/asm/internal/asm/endtoend_test.go index de80563a7c..7b4bdfccd0 100644 --- a/src/cmd/asm/internal/asm/endtoend_test.go +++ b/src/cmd/asm/internal/asm/endtoend_test.go @@ -81,3 +81,7 @@ func TestARMEndToEnd(t *testing.T) { func TestAMD64EndToEnd(t *testing.T) { testEndToEnd(t, "amd64") } + +func Test386EndToEnd(t *testing.T) { + testEndToEnd(t, "386") +} diff --git a/src/cmd/asm/internal/asm/testdata/386.out b/src/cmd/asm/internal/asm/testdata/386.out new file mode 100644 index 0000000000..3dd98cc463 --- /dev/null +++ b/src/cmd/asm/internal/asm/testdata/386.out @@ -0,0 +1,48 @@ +5 00001 (testdata/386.s:5) TEXT foo+0(SB),$0 +8 00002 (testdata/386.s:8) SETCC ,AX +9 00003 (testdata/386.s:9) SETCC ,foo+4(SB) +12 00004 (testdata/386.s:12) DIVB AX, +13 00005 (testdata/386.s:13) DIVB foo+4(SB), +14 00006 (testdata/386.s:14) PUSHL $foo+4(SB), +15 00007 (testdata/386.s:15) POPL ,AX +18 00008 (testdata/386.s:18) SUBB $1,AX +19 00009 (testdata/386.s:19) SUBB $1,foo+4(SB) +20 00010 (testdata/386.s:20) SUBB BX,AX +21 00011 (testdata/386.s:21) SUBB BX,foo+4(SB) +24 00012 (testdata/386.s:24) CMPB AX,$1 +25 00013 (testdata/386.s:25) CMPB foo+4(SB),$4 +26 00014 (testdata/386.s:26) CMPB BX,AX +27 00015 (testdata/386.s:27) CMPB foo+4(SB),BX +31 00016 (testdata/386.s:31) JCS , +32 00017 (testdata/386.s:32) JCS ,16(PC) +35 00018 (testdata/386.s:35) CALL ,AX +36 00019 (testdata/386.s:36) JMP ,AX +37 00020 (testdata/386.s:37) CALL ,type=16 +38 00021 (testdata/386.s:38) JMP ,$4 +39 00022 (testdata/386.s:39) JMP ,16 +40 00023 (testdata/386.s:40) CALL ,foo+0(SB) +42 00024 (testdata/386.s:42) CALL ,foo+4(SB)(AX*4) +43 00025 (testdata/386.s:43) CALL ,4(SP) +44 00026 (testdata/386.s:44) CALL ,(AX) +45 00027 (testdata/386.s:45) CALL ,(SP) +47 00028 (testdata/386.s:47) CALL ,(AX)(AX*4) +48 00029 (testdata/386.s:48) CALL ,4(SP) +49 00030 (testdata/386.s:49) CALL ,(AX) +50 00031 (testdata/386.s:50) CALL ,(SP) +52 00032 (testdata/386.s:52) JMP ,(AX)(AX*4) +55 00033 (testdata/386.s:55) NOP , +56 00034 (testdata/386.s:56) NOP AX, +57 00035 (testdata/386.s:57) NOP foo+4(SB), +60 00036 (testdata/386.s:60) SHLL $4,BX +61 00037 (testdata/386.s:61) SHLL $4,foo+4(SB) +62 00038 (testdata/386.s:62) SHLL $4,foo+4(SB):AX +65 00039 (testdata/386.s:65) MOVL AX,BX +66 00040 (testdata/386.s:66) MOVL $4,BX +69 00041 (testdata/386.s:69) IMULL AX, +70 00042 (testdata/386.s:70) IMULL $4,CX +71 00043 (testdata/386.s:71) IMULL AX,BX +74 00044 (testdata/386.s:74) CMPPD X0,$4,X1 +75 00045 (testdata/386.s:75) CMPPD X0,foo+4(SB) +78 00046 (testdata/386.s:78) PINSRD (AX),$1,X0 +79 00047 (testdata/386.s:79) PINSRD foo+4(FP),$2,X0 +82 00048 (testdata/386.s:82) RET , diff --git a/src/cmd/asm/internal/asm/testdata/386.s b/src/cmd/asm/internal/asm/testdata/386.s new file mode 100644 index 0000000000..67c48d0fc3 --- /dev/null +++ b/src/cmd/asm/internal/asm/testdata/386.s @@ -0,0 +1,82 @@ +// This input was created by taking the instruction productions in +// the old assembler's (8a's) grammar and hand-writing complete +// instructions for each rule, to guarantee we cover the same space. + +TEXT foo(SB), 0, $0 + +// LTYPE1 nonrem { outcode(int($1), &$2); } + SETCC AX + SETCC foo+4(SB) + +// LTYPE2 rimnon { outcode(int($1), &$2); } + DIVB AX + DIVB foo+4(SB) + PUSHL $foo+4(SB) + POPL AX // balance PUSHL + +// LTYPE3 rimrem { outcode(int($1), &$2); } + SUBB $1, AX + SUBB $1, foo+4(SB) + SUBB BX, AX + SUBB BX, foo+4(SB) + +// LTYPE4 remrim { outcode(int($1), &$2); } + CMPB AX, $1 + CMPB foo+4(SB), $4 + CMPB BX, AX + CMPB foo+4(SB), BX + +// LTYPER nonrel { outcode(int($1), &$2); } +label: + JC label + JC -1(PC) + +// LTYPEC spec3 { outcode(int($1), &$2); } + CALL AX + JMP *AX + CALL *foo(SB) + JMP $4 + JMP label + CALL foo(SB) + CALL (AX*4) + CALL foo+4(SB)(AX*4) + CALL *4(SP) + CALL *(AX) + CALL *(SP) + CALL *(AX*4) + CALL *(AX)(AX*4) + CALL 4(SP) + CALL (AX) + CALL (SP) + CALL (AX*4) + JMP (AX)(AX*4) + +// LTYPEN spec4 { outcode(int($1), &$2); } + NOP + NOP AX + NOP foo+4(SB) + +// LTYPES spec5 { outcode(int($1), &$2); } + SHLL $4, BX + SHLL $4, foo+4(SB) + SHLL $4, foo+4(SB):AX + +// LTYPEM spec6 { outcode(int($1), &$2); } + MOVL AX, BX + MOVL $4, BX + +// LTYPEI spec7 { outcode(int($1), &$2); } + IMULL AX + IMULL $4, CX + IMULL AX, BX + +// LTYPEXC spec9 { outcode(int($1), &$2); } + CMPPD X0, X1, 4 + CMPPD X0, foo+4(SB), 4 + +// LTYPEX spec10 { outcode(int($1), &$2); } + PINSRD $1, (AX), X0 + PINSRD $2, foo+4(FP), X0 + +// LTYPE0 nonnon { outcode(int($1), &$2); } + RET