[mips] Implement ehb, ssnop, and pause in assembler
authorDaniel Sanders <daniel.sanders@imgtec.com>
Thu, 3 Apr 2014 13:21:51 +0000 (13:21 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Thu, 3 Apr 2014 13:21:51 +0000 (13:21 +0000)
Summary: Add negative tests for pause

Reviewers: matheusalmeida

Reviewed By: matheusalmeida

Differential Revision: http://llvm-reviews.chandlerc.com/D3246

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205537 91177308-0d34-0410-b5e6-96231b3b80d8

22 files changed:
lib/Target/Mips/MipsInstrFormats.td
lib/Target/Mips/MipsInstrInfo.td
test/MC/Mips/mips1/valid-xfail.s
test/MC/Mips/mips1/valid.s
test/MC/Mips/mips2/valid-xfail.s
test/MC/Mips/mips2/valid.s
test/MC/Mips/mips3/valid-xfail.s
test/MC/Mips/mips3/valid.s
test/MC/Mips/mips32/invalid-mips32r2.s [new file with mode: 0644]
test/MC/Mips/mips32/valid-xfail.s
test/MC/Mips/mips32/valid.s
test/MC/Mips/mips32r2/valid-xfail.s
test/MC/Mips/mips32r2/valid.s
test/MC/Mips/mips4/valid-xfail.s
test/MC/Mips/mips4/valid.s
test/MC/Mips/mips5/valid-xfail.s
test/MC/Mips/mips5/valid.s
test/MC/Mips/mips64/invalid-mips64r2.s [new file with mode: 0644]
test/MC/Mips/mips64/valid-xfail.s
test/MC/Mips/mips64/valid.s
test/MC/Mips/mips64r2/valid-xfail.s
test/MC/Mips/mips64r2/valid.s

index 38fac886048aac1ebd3486de30eb709de598f40c..e4405abe908355a921de602afc19b991c8cc0da3 100644 (file)
@@ -818,3 +818,14 @@ class CMov_F_F_FM<bits<5> fmt, bit tf> : StdArch {
   let Inst{10-6} = fd;
   let Inst{5-0} = 0x11;
 }
+
+class BARRIER_FM<bits<5> op> : StdArch {
+  bits<32> Inst;
+
+  let Inst{31-26} = 0; // SPECIAL
+  let Inst{25-21} = 0;
+  let Inst{20-16} = 0; // rt = 0
+  let Inst{15-11} = 0; // rd = 0
+  let Inst{10-6} = op; // Operation
+  let Inst{5-0} = 0;   // SLL
+}
index 9b2e0808938b5422c1c45333354d2b50e58d4994..07c37d87a26efbe4ad41b51ad459596c9e679aaf 100644 (file)
@@ -1161,6 +1161,12 @@ def MTC0 : MFC3OP<"mtc0", GPR32Opnd>, MFC3OP_FM<0x10, 4>;
 def MFC2 : MFC3OP<"mfc2", GPR32Opnd>, MFC3OP_FM<0x12, 0>;
 def MTC2 : MFC3OP<"mtc2", GPR32Opnd>, MFC3OP_FM<0x12, 4>;
 
+class Barrier<string asmstr> : InstSE<(outs), (ins), asmstr, [], NoItinerary,
+                                      FrmOther>;
+def SSNOP : Barrier<"ssnop">, BARRIER_FM<1>;
+def EHB : Barrier<"ehb">, BARRIER_FM<3>;
+def PAUSE : Barrier<"pause">, BARRIER_FM<5>, Requires<[HasMips32r2]>;
+
 //===----------------------------------------------------------------------===//
 // Instruction aliases
 //===----------------------------------------------------------------------===//
index bcd0f1078a7842a15d151e60eba8c47502a8bd83..2ffeaa968b426bec9273d884d59cfa2cf9ac78d3 100644 (file)
@@ -12,8 +12,6 @@
        tlbr
        tlbwi
        tlbwr
-       ehb
        lwc0    c0_entrylo,-7321($s2)
        lwc3    $10,-32265($k0)
-       ssnop
        swc0    c0_prid,18904($s3)
index 8fe81aa4cf70142bddeb66d938b57837c7cd7576..7fc866a621c758f314c6f0f87fc27324e77367a7 100644 (file)
@@ -28,6 +28,7 @@
        div.d   $f29,$f20,$f27
        div.s   $f4,$f5,$f15
        divu    $zero,$t9,$t7
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        lb      $t8,-14515($t2)
        lbu     $t0,30195($v1)
        lh      $t3,-8556($s5)
@@ -71,6 +72,7 @@
        sltu    $s4,$s5,$t3
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22
index c1218034492b8c124638319b3c79f3eb4177f93f..2f82f5c96f90cf826f7cb7515042541ab228a626 100644 (file)
@@ -8,11 +8,9 @@
 # XFAIL: *
 
        .set noat
-       ehb
        ldc3    $29,-28645($s1)
        lwc3    $10,-32265($k0)
        sdc3    $12,5835($t2)
-       ssnop
        tlbp
        tlbr
        tlbwi
index ac42e77de4c5bc2834d5d066c20602efcab9396b..1a050407424e226bf94788dc678f12df9343f33f 100644 (file)
@@ -30,6 +30,7 @@
        div.d   $f29,$f20,$f27
        div.s   $f4,$f5,$f15
        divu    $zero,$t9,$t7
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        floor.w.d       $f14,$f11
        floor.w.s       $f8,$f9
        lb      $t8,-14515($t2)
@@ -85,6 +86,7 @@
        sqrt.s  $f0,$f1
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22
index 7f802ef765f967d936edb77d6b58e68f9fe195e3..740663e2314fd1fe61faba07a2cc3e23c54989d5 100644 (file)
@@ -8,9 +8,7 @@
 # XFAIL: *
 
        .set noat
-       ehb
        lwc3    $10,-32265($k0)
-       ssnop
        tlbp
        tlbr
        tlbwi
index 703d49a4ea756835ca3632f5077fdc4938a783b9..dc9b48cd399242159d5f0c56a455b7080c5de188 100644 (file)
@@ -50,6 +50,7 @@
        dsrlv   $s3,$t6,$s4
        dsub    $a3,$s6,$t0
        dsubu   $a1,$a1,$k0
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        eret
        floor.l.d       $f26,$f7
        floor.l.s       $f12,$f5
        sqrt.s  $f0,$f1
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22
diff --git a/test/MC/Mips/mips32/invalid-mips32r2.s b/test/MC/Mips/mips32/invalid-mips32r2.s
new file mode 100644 (file)
index 0000000..b400eea
--- /dev/null
@@ -0,0 +1,8 @@
+# Instructions that are invalid
+#
+# RUN: not llvm-mc %s -triple=mips-unknown-linux -show-encoding -mcpu=mips32 \
+# RUN:     2>%t1
+# RUN: FileCheck %s < %t1
+
+        .set noat
+        pause # CHECK: requires a CPU feature not currently enabled
index a718aabe96020881bcdc05425251e90d08a59ce6..65cebd381856aa2f52fc17df0eb2db1f791ebb52 100644 (file)
        c.ult.s $fcc7,$f24,$f10
        c.un.d  $fcc6,$f23,$f24
        c.un.s  $fcc1,$f30,$f4
-       ehb
        ldc3    $29,-28645($s1)
        rorv    $t5,$a3,$s5
        sdc3    $12,5835($t2)
-       ssnop
        tlbp
        tlbr
        tlbwi
index c358bdab6da9915e3e104bf5b08709e5a6abf188..9e83c0f164bd7c2173114d8baf897a22e7b82eaf 100644 (file)
@@ -32,6 +32,7 @@
        div.d   $f29,$f20,$f27
        div.s   $f4,$f5,$f15
        divu    $zero,$t9,$t7
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        eret
        floor.w.d       $f14,$f11
        floor.w.s       $f8,$f9
        sqrt.s  $f0,$f1
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22
index 5dbb1d3b4970e359562fd71451ea843c6072668d..623c7f6cb477fa06820bbb5faecb4f94ff61af73 100644 (file)
        dpsu.h.qbr      $ac2,$a1,$s6
        dpsx.w.ph       $ac0,$s7,$gp
        dvpe    $s6
-       ehb
        emt     $t0
        evpe    $v0
        extpdpv $s6,$ac0,$s8
        nor.v   $w20,$w20,$w15
        or.v    $w13,$w23,$w12
        packrl.ph       $ra,$t8,$t6
-       pause
        pcnt.b  $w30,$w15
        pcnt.d  $w5,$w16
        pcnt.h  $w20,$w24
        shrav_r.w       $s7,$s4,$s6
        shrlv.ph        $t6,$t2,$t1
        shrlv.qb        $a2,$s2,$t3
-       ssnop
        sub.ps  $f5,$f14,$f26
        subq.ph $ra,$t1,$s8
        subq_s.ph       $t5,$s8,$s5
index 29c0807fff1ad58882b3bf36c315eb3834de631d..b42005537f47219a2f85268c66f8228d369e4810 100644 (file)
@@ -35,6 +35,7 @@
        div.d   $f29,$f20,$f27
        div.s   $f4,$f5,$f15
        divu    $zero,$t9,$t7
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        ei      $t6
        eret
        floor.w.d       $f14,$f11
        nop
        nor     $a3,$zero,$a3
        or      $t4,$s0,$sp
+       pause                    # CHECK: pause # encoding:  [0x00,0x00,0x01,0x40]
        rdhwr   $sp,$11
        round.w.d       $f6,$f4
        round.w.s       $f27,$f28
        sqrt.s  $f0,$f1
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22
index 26749a91532d9aefc7510e56fa8ba6158faf95d3..baf5c53bd6de94bd1588136611b2f064053401af 100644 (file)
@@ -36,7 +36,6 @@
        c.ult.s $fcc7,$f24,$f10
        c.un.d  $fcc6,$f23,$f24
        c.un.s  $fcc1,$f30,$f4
-       ehb
        madd.d  $f18,$f19,$f26,$f20
        madd.s  $f1,$f31,$f19,$f25
        msub.d  $f10,$f1,$f31,$f18
@@ -49,7 +48,6 @@
        recip.s $f3,$f30
        rsqrt.d $f3,$f28
        rsqrt.s $f4,$f8
-       ssnop
        tlbp
        tlbr
        tlbwi
index bcc9f689bfab29f1801c3a63ae93df0f4e082262..8dc2a239feefc49edbde31ea01d1e576868e915f 100644 (file)
@@ -50,6 +50,7 @@
        dsrlv   $s3,$t6,$s4
        dsub    $a3,$s6,$t0
        dsubu   $a1,$a1,$k0
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        eret
        floor.l.d       $f26,$f7
        floor.l.s       $f12,$f5
        sqrt.s  $f0,$f1
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22
index 285aabbfe6b6b78ce3ee563abb8d07f3075a6397..85d961b47a3da5851b2bf427785338a925e5ee8b 100644 (file)
@@ -58,7 +58,6 @@
        cvt.ps.s        $f3,$f18,$f19
        cvt.s.pl        $f30,$f1
        cvt.s.pu        $f14,$f25
-       ehb
        madd.d  $f18,$f19,$f26,$f20
        madd.ps $f22,$f3,$f14,$f3
        madd.s  $f1,$f31,$f19,$f25
@@ -86,7 +85,6 @@
        recip.s $f3,$f30
        rsqrt.d $f3,$f28
        rsqrt.s $f4,$f8
-       ssnop
        sub.ps  $f5,$f14,$f26
        tlbp
        tlbr
index 64c2ff5e789eaf1cb06efa88010146597fe843fd..ebe2f703b1248a5be0d06f6b64ae0e536e06f77c 100644 (file)
@@ -50,6 +50,7 @@
        dsrlv   $s3,$t6,$s4
        dsub    $a3,$s6,$t0
        dsubu   $a1,$a1,$k0
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        eret
        floor.l.d       $f26,$f7
        floor.l.s       $f12,$f5
        sqrt.s  $f0,$f1
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22
diff --git a/test/MC/Mips/mips64/invalid-mips64r2.s b/test/MC/Mips/mips64/invalid-mips64r2.s
new file mode 100644 (file)
index 0000000..5e687d0
--- /dev/null
@@ -0,0 +1,8 @@
+# Instructions that are invalid
+#
+# RUN: not llvm-mc %s -triple=mips64-unknown-linux -show-encoding -mcpu=mips64 \
+# RUN:     2>%t1
+# RUN: FileCheck %s < %t1
+
+        .set noat
+        pause # CHECK: requires a CPU feature not currently enabled
index 66f15e03c24b5cb06f4d01781bd10c1af7b565b1..61bf0607513b84cbacf93ffce5df87b766b6f53c 100644 (file)
@@ -62,7 +62,6 @@
        cvt.s.pu        $f14,$f25
        dmfc0   $t2,c0_watchhi,2
        dmtc0   $t7,c0_datalo
-       ehb
        madd.d  $f18,$f19,$f26,$f20
        madd.ps $f22,$f3,$f14,$f3
        madd.s  $f1,$f31,$f19,$f25
@@ -92,7 +91,6 @@
        recip.s $f3,$f30
        rsqrt.d $f3,$f28
        rsqrt.s $f4,$f8
-       ssnop
        sub.ps  $f5,$f14,$f26
        tlbp
        tlbr
index 673754535bc08ae4b32366a46c8ee5cce727f4f2..9ccb2ffc1f8ed584b04fb1855924c8bfe4a084af 100644 (file)
@@ -54,6 +54,7 @@
        dsrlv   $s3,$t6,$s4
        dsub    $a3,$s6,$t0
        dsubu   $a1,$a1,$k0
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        eret
        floor.l.d       $f26,$f7
        floor.l.s       $f12,$f5
        sqrt.s  $f0,$f1
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22
index d8aefd2a5c8c612d43a0160433046cfbbbc14a78..9d9d6cd2d0888cb1d2210644db8d68c4651ae52b 100644 (file)
        dpsx.w.ph       $ac0,$s7,$gp
        drorv   $at,$a1,$s7
        dvpe    $s6
-       ehb
        emt     $t0
        evpe    $v0
        extpdpv $s6,$ac0,$s8
        nor.v   $w20,$w20,$w15
        or.v    $w13,$w23,$w12
        packrl.ph       $ra,$t8,$t6
-       pause
        pcnt.b  $w30,$w15
        pcnt.d  $w5,$w16
        pcnt.h  $w20,$w24
        shrav_r.w       $s7,$s4,$s6
        shrlv.ph        $t6,$t2,$t1
        shrlv.qb        $a2,$s2,$t3
-       ssnop
        sub.ps  $f5,$f14,$f26
        subq.ph $ra,$t1,$s8
        subq_s.ph       $t5,$s8,$s5
index 4e549af9e79e0325ffe6a581830582cb57b84630..34771b9afd338cdc520689aaf758b4e21c64d6cd 100644 (file)
@@ -57,6 +57,7 @@
        dsrlv   $s3,$t6,$s4
        dsub    $a3,$s6,$t0
        dsubu   $a1,$a1,$k0
+       ehb                      # CHECK: ehb # encoding:  [0x00,0x00,0x00,0xc0]
        ei      $t6
        eret
        floor.l.d       $f26,$f7
        nop
        nor     $a3,$zero,$a3
        or      $t4,$s0,$sp
+       pause                    # CHECK: pause # encoding:  [0x00,0x00,0x01,0x40]
        rdhwr   $sp,$11
        round.l.d       $f12,$f1
        round.l.s       $f25,$f5
        sqrt.s  $f0,$f1
        srav    $s1,$s7,$sp
        srlv    $t9,$s4,$a0
+       ssnop                    # CHECK: ssnop # encoding:  [0x00,0x00,0x00,0x40]
        sub     $s6,$s3,$t4
        sub.d   $f18,$f3,$f17
        sub.s   $f23,$f22,$f22