]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: add end to end test for 386
authorRob Pike <r@golang.org>
Mon, 23 Feb 2015 23:48:09 +0000 (15:48 -0800)
committerRob Pike <r@golang.org>
Wed, 25 Feb 2015 16:24:32 +0000 (16:24 +0000)
Change-Id: I6514f69b979d064b6a3c4b5d0828cc94f485cac2
Reviewed-on: https://go-review.googlesource.com/5694
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/asm/internal/asm/endtoend_test.go
src/cmd/asm/internal/asm/testdata/386.out [new file with mode: 0644]
src/cmd/asm/internal/asm/testdata/386.s [new file with mode: 0644]

index de80563a7caed059f35f2efe4857c41c25caf541..7b4bdfccd09cd31f1f467c0bb98e031800486c9e 100644 (file)
@@ -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 (file)
index 0000000..3dd98cc
--- /dev/null
@@ -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 (file)
index 0000000..67c48d0
--- /dev/null
@@ -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