From ef5b390263ebe6e22c89cb16faebf0fb3c4ce1ee Mon Sep 17 00:00:00 2001 From: Wesley Peck Date: Thu, 11 Nov 2010 21:40:53 +0000 Subject: [PATCH] Fix tblgen instruction errors exposed by MC asm parser tests Fix minimum 16-bit signed value error exposed by MC asm parser tests Add initial MC asm parser tests for the MBlaze backend git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118844 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/MBlaze/MBlazeInstrInfo.td | 57 ++-- lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp | 2 +- test/MC/MBlaze/dg.exp | 5 + test/MC/MBlaze/mblaze_fsl.s | 245 ++++++++++++++++ test/MC/MBlaze/mblaze_imm.s | 194 +++++++++++++ test/MC/MBlaze/mblaze_operands.s | 328 ++++++++++++++++++++++ test/MC/MBlaze/mblaze_typea.s | 72 +++++ test/MC/MBlaze/mblaze_typeb.s | 37 +++ 8 files changed, 910 insertions(+), 30 deletions(-) create mode 100644 test/MC/MBlaze/dg.exp create mode 100644 test/MC/MBlaze/mblaze_fsl.s create mode 100644 test/MC/MBlaze/mblaze_imm.s create mode 100644 test/MC/MBlaze/mblaze_operands.s create mode 100644 test/MC/MBlaze/mblaze_typea.s create mode 100644 test/MC/MBlaze/mblaze_typeb.s diff --git a/lib/Target/MBlaze/MBlazeInstrInfo.td b/lib/Target/MBlaze/MBlazeInstrInfo.td index 8aa04dfe215..76e8efe428a 100644 --- a/lib/Target/MBlaze/MBlazeInstrInfo.td +++ b/lib/Target/MBlaze/MBlazeInstrInfo.td @@ -297,17 +297,16 @@ class BranchLI op, bits<5> br, string instr_asm> : //===----------------------------------------------------------------------===// // Conditional Branch Instructions //===----------------------------------------------------------------------===// -class BranchC op, bits<5> br, bits<11> flags, string instr_asm, - PatFrag cond_op> : +class BranchC op, bits<5> br, bits<11> flags, string instr_asm> : TA { let rd = br; let Form = FCRR; } -class BranchCI op, bits<5> br, string instr_asm, PatFrag cond_op> : +class BranchCI op, bits<5> br, string instr_asm> : TB { @@ -430,12 +429,12 @@ let isBranch = 1, isTerminator = 1, hasCtrlDep = 1, isBarrier = 1 in { } let isBranch = 1, isTerminator = 1, hasCtrlDep = 1 in { - def BEQI : BranchCI<0x2F, 0x00, "beqi ", seteq>; - def BNEI : BranchCI<0x2F, 0x01, "bnei ", setne>; - def BLTI : BranchCI<0x2F, 0x02, "blti ", setlt>; - def BLEI : BranchCI<0x2F, 0x03, "blei ", setle>; - def BGTI : BranchCI<0x2F, 0x04, "bgti ", setgt>; - def BGEI : BranchCI<0x2F, 0x05, "bgei ", setge>; + def BEQI : BranchCI<0x2F, 0x00, "beqi ">; + def BNEI : BranchCI<0x2F, 0x01, "bnei ">; + def BLTI : BranchCI<0x2F, 0x02, "blti ">; + def BLEI : BranchCI<0x2F, 0x03, "blei ">; + def BGTI : BranchCI<0x2F, 0x04, "bgti ">; + def BGEI : BranchCI<0x2F, 0x05, "bgei ">; } let isBranch = 1, isIndirectBranch = 1, isTerminator = 1, hasCtrlDep = 1, @@ -445,12 +444,12 @@ let isBranch = 1, isIndirectBranch = 1, isTerminator = 1, hasCtrlDep = 1, } let isBranch = 1, isIndirectBranch = 1, isTerminator = 1, hasCtrlDep = 1 in { - def BEQ : BranchC<0x27, 0x00, 0x000, "beq ", seteq>; - def BNE : BranchC<0x27, 0x01, 0x000, "bne ", setne>; - def BLT : BranchC<0x27, 0x02, 0x000, "blt ", setlt>; - def BLE : BranchC<0x27, 0x03, 0x000, "ble ", setle>; - def BGT : BranchC<0x27, 0x04, 0x000, "bgt ", setgt>; - def BGE : BranchC<0x27, 0x05, 0x000, "bge ", setge>; + def BEQ : BranchC<0x27, 0x00, 0x000, "beq ">; + def BNE : BranchC<0x27, 0x01, 0x000, "bne ">; + def BLT : BranchC<0x27, 0x02, 0x000, "blt ">; + def BLE : BranchC<0x27, 0x03, 0x000, "ble ">; + def BGT : BranchC<0x27, 0x04, 0x000, "bgt ">; + def BGE : BranchC<0x27, 0x05, 0x000, "bge ">; } let isBranch = 1, isTerminator = 1, hasDelaySlot = 1, hasCtrlDep = 1, @@ -460,12 +459,12 @@ let isBranch = 1, isTerminator = 1, hasDelaySlot = 1, hasCtrlDep = 1, } let isBranch = 1, isTerminator = 1, hasDelaySlot = 1, hasCtrlDep = 1 in { - def BEQID : BranchCI<0x2F, 0x10, "beqid ", seteq>; - def BNEID : BranchCI<0x2F, 0x11, "bneid ", setne>; - def BLTID : BranchCI<0x2F, 0x12, "bltid ", setlt>; - def BLEID : BranchCI<0x2F, 0x13, "bleid ", setle>; - def BGTID : BranchCI<0x2F, 0x14, "bgtid ", setgt>; - def BGEID : BranchCI<0x2F, 0x15, "bgeid ", setge>; + def BEQID : BranchCI<0x2F, 0x10, "beqid ">; + def BNEID : BranchCI<0x2F, 0x11, "bneid ">; + def BLTID : BranchCI<0x2F, 0x12, "bltid ">; + def BLEID : BranchCI<0x2F, 0x13, "bleid ">; + def BGTID : BranchCI<0x2F, 0x14, "bgtid ">; + def BGEID : BranchCI<0x2F, 0x15, "bgeid ">; } let isBranch = 1, isIndirectBranch = 1, isTerminator = 1, @@ -476,12 +475,12 @@ let isBranch = 1, isIndirectBranch = 1, isTerminator = 1, let isBranch = 1, isIndirectBranch = 1, isTerminator = 1, hasDelaySlot = 1, hasCtrlDep = 1 in { - def BEQD : BranchC<0x27, 0x10, 0x000, "beqd ", seteq>; - def BNED : BranchC<0x27, 0x11, 0x000, "bned ", setne>; - def BLTD : BranchC<0x27, 0x12, 0x000, "bltd ", setlt>; - def BLED : BranchC<0x27, 0x13, 0x000, "bled ", setle>; - def BGTD : BranchC<0x27, 0x14, 0x000, "bgtd ", setgt>; - def BGED : BranchC<0x27, 0x15, 0x000, "bged ", setge>; + def BEQD : BranchC<0x27, 0x10, 0x000, "beqd ">; + def BNED : BranchC<0x27, 0x11, 0x000, "bned ">; + def BLTD : BranchC<0x27, 0x12, 0x000, "bltd ">; + def BLED : BranchC<0x27, 0x13, 0x000, "bled ">; + def BGTD : BranchC<0x27, 0x14, 0x000, "bgtd ">; + def BGED : BranchC<0x27, 0x15, 0x000, "bged ">; } let isCall = 1, hasDelaySlot = 1, hasCtrlDep = 1, isBarrier = 1, diff --git a/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp b/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp index ea718f63f06..adbec06804c 100644 --- a/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp +++ b/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp @@ -146,7 +146,7 @@ unsigned MBlazeMCCodeEmitter::getMachineOpValue(const MCInst &MI, void MBlazeMCCodeEmitter:: EmitIMM(const MCOperand &imm, unsigned &CurByte, raw_ostream &OS) const { int32_t val = (int32_t)imm.getImm(); - if (val > 32767 || val < -32678) { + if (val > 32767 || val < -32768) { EmitByte(0x0D, CurByte, OS); EmitByte(0x00, CurByte, OS); EmitRawByte((val >> 24) & 0xFF, CurByte, OS); diff --git a/test/MC/MBlaze/dg.exp b/test/MC/MBlaze/dg.exp new file mode 100644 index 00000000000..0c4e78e88dc --- /dev/null +++ b/test/MC/MBlaze/dg.exp @@ -0,0 +1,5 @@ +load_lib llvm.exp + +if { [llvm_supports_target MBlaze] } { + RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp,s}]] +} diff --git a/test/MC/MBlaze/mblaze_fsl.s b/test/MC/MBlaze/mblaze_fsl.s new file mode 100644 index 00000000000..da86824c825 --- /dev/null +++ b/test/MC/MBlaze/mblaze_fsl.s @@ -0,0 +1,245 @@ +# RUN: llvm-mc -triple mblaze-unknown-unknown -show-encoding %s | FileCheck %s + +# Test to ensure that all FSL immediate operands and FSL instructions +# can be parsed by the assembly parser correctly. + +# TYPE F: OPCODE RD NCTAE FSL +# BINARY: 011011 00000 000000 00000 000000 0000 + +# TYPE FD: OPCODE RD RB NCTAE +# BINARY: 011011 00000 00000 00000 0 00000 00000 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x00,0x00] + get r0, rfsl0 + +# CHECK: nget +# BINARY: 011011 00000 000000 10000 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x40,0x00] + nget r0, rfsl0 + +# CHECK: cget +# BINARY: 011011 00000 000000 01000 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x20,0x00] + cget r0, rfsl0 + +# CHECK: ncget +# BINARY: 011011 00000 000000 11000 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x60,0x00] + ncget r0, rfsl0 + +# CHECK: tget +# BINARY: 011011 00000 000000 00100 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x10,0x00] + tget r0, rfsl0 + +# CHECK: tnget +# BINARY: 011011 00000 000000 10100 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x50,0x00] + tnget r0, rfsl0 + +# CHECK: tcget +# BINARY: 011011 00000 000000 01100 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x30,0x00] + tcget r0, rfsl0 + +# CHECK: tncget +# BINARY: 011011 00000 000000 11100 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x70,0x00] + tncget r0, rfsl0 + +# CHECK: aget +# BINARY: 011011 00000 000000 00010 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x08,0x00] + aget r0, rfsl0 + +# CHECK: naget +# BINARY: 011011 00000 000000 10010 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x48,0x00] + naget r0, rfsl0 + +# CHECK: caget +# BINARY: 011011 00000 000000 01010 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x28,0x00] + caget r0, rfsl0 + +# CHECK: ncaget +# BINARY: 011011 00000 000000 11010 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x68,0x00] + ncaget r0, rfsl0 + +# CHECK: taget +# BINARY: 011011 00000 000000 00110 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x18,0x00] + taget r0, rfsl0 + +# CHECK: tnaget +# BINARY: 011011 00000 000000 10110 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x58,0x00] + tnaget r0, rfsl0 + +# CHECK: tcaget +# BINARY: 011011 00000 000000 01110 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x38,0x00] + tcaget r0, rfsl0 + +# CHECK: tncaget +# BINARY: 011011 00000 000000 11110 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x78,0x00] + tncaget r0, rfsl0 + +# CHECK: eget +# BINARY: 011011 00000 000000 00001 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x04,0x00] + eget r0, rfsl0 + +# CHECK: neget +# BINARY: 011011 00000 000000 10001 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x44,0x00] + neget r0, rfsl0 + +# CHECK: ecget +# BINARY: 011011 00000 000000 01001 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x24,0x00] + ecget r0, rfsl0 + +# CHECK: necget +# BINARY: 011011 00000 000000 11001 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x64,0x00] + necget r0, rfsl0 + +# CHECK: teget +# BINARY: 011011 00000 000000 00101 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x14,0x00] + teget r0, rfsl0 + +# CHECK: tneget +# BINARY: 011011 00000 000000 10101 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x54,0x00] + tneget r0, rfsl0 + +# CHECK: tecget +# BINARY: 011011 00000 000000 01101 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x34,0x00] + tecget r0, rfsl0 + +# CHECK: tnecget +# BINARY: 011011 00000 000000 11101 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x74,0x00] + tnecget r0, rfsl0 + +# CHECK: eaget +# BINARY: 011011 00000 000000 00011 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x0c,0x00] + eaget r0, rfsl0 + +# CHECK: neaget +# BINARY: 011011 00000 000000 10011 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x4c,0x00] + neaget r0, rfsl0 + +# CHECK: ecaget +# BINARY: 011011 00000 000000 01011 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x2c,0x00] + ecaget r0, rfsl0 + +# CHECK: necaget +# BINARY: 011011 00000 000000 11011 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x6c,0x00] + necaget r0, rfsl0 + +# CHECK: teaget +# BINARY: 011011 00000 000000 00111 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x1c,0x00] + teaget r0, rfsl0 + +# CHECK: tneaget +# BINARY: 011011 00000 000000 10111 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x5c,0x00] + tneaget r0, rfsl0 + +# CHECK: tecaget +# BINARY: 011011 00000 000000 01111 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x3c,0x00] + tecaget r0, rfsl0 + +# CHECK: tnecaget +# BINARY: 011011 00000 000000 11111 000000 0000 +# CHECK: encoding: [0x6c,0x00,0x7c,0x00] + tnecaget r0, rfsl0 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 0001 +# CHECK: encoding: [0x6c,0x00,0x00,0x01] + get r0, rfsl1 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 0010 +# CHECK: encoding: [0x6c,0x00,0x00,0x02] + get r0, rfsl2 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 0011 +# CHECK: encoding: [0x6c,0x00,0x00,0x03] + get r0, rfsl3 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 0100 +# CHECK: encoding: [0x6c,0x00,0x00,0x04] + get r0, rfsl4 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 0101 +# CHECK: encoding: [0x6c,0x00,0x00,0x05] + get r0, rfsl5 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 0110 +# CHECK: encoding: [0x6c,0x00,0x00,0x06] + get r0, rfsl6 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 0111 +# CHECK: encoding: [0x6c,0x00,0x00,0x07] + get r0, rfsl7 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 1000 +# CHECK: encoding: [0x6c,0x00,0x00,0x08] + get r0, rfsl8 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 1001 +# CHECK: encoding: [0x6c,0x00,0x00,0x09] + get r0, rfsl9 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 1010 +# CHECK: encoding: [0x6c,0x00,0x00,0x0a] + get r0, rfsl10 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 1011 +# CHECK: encoding: [0x6c,0x00,0x00,0x0b] + get r0, rfsl11 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 1100 +# CHECK: encoding: [0x6c,0x00,0x00,0x0c] + get r0, rfsl12 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 1101 +# CHECK: encoding: [0x6c,0x00,0x00,0x0d] + get r0, rfsl13 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 1110 +# CHECK: encoding: [0x6c,0x00,0x00,0x0e] + get r0, rfsl14 + +# CHECK: get +# BINARY: 011011 00000 000000 00000 000000 1111 +# CHECK: encoding: [0x6c,0x00,0x00,0x0f] + get r0, rfsl15 diff --git a/test/MC/MBlaze/mblaze_imm.s b/test/MC/MBlaze/mblaze_imm.s new file mode 100644 index 00000000000..08b8a0f2681 --- /dev/null +++ b/test/MC/MBlaze/mblaze_imm.s @@ -0,0 +1,194 @@ +# RUN: llvm-mc -triple mblaze-unknown-unknown -show-encoding %s | FileCheck %s + +# In the microblaze instruction set, any TYPE-B instruction with a +# signed immediate value requiring more than 16-bits must be prefixed +# with an IMM instruction that contains the high 16-bits. The higher +# 16-bits are then combined with the lower 16-bits in the original +# instruction to form a 32-bit immediate value. +# +# The generation of IMM instructions is handled automatically by the +# code emitter. Test to ensure that IMM instructions are generated +# when they are suppose to and are not generated when they are not +# needed. + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0x20,0x00,0x00,0x00] + addi r0, r0, 0x00000000 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000000001 +# CHECK: encoding: [0x20,0x00,0x00,0x01] + addi r0, r0, 0x00000001 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000000010 +# CHECK: encoding: [0x20,0x00,0x00,0x02] + addi r0, r0, 0x00000002 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000000100 +# CHECK: encoding: [0x20,0x00,0x00,0x04] + addi r0, r0, 0x00000004 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000001000 +# CHECK: encoding: [0x20,0x00,0x00,0x08] + addi r0, r0, 0x00000008 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000010000 +# CHECK: encoding: [0x20,0x00,0x00,0x10] + addi r0, r0, 0x00000010 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000100000 +# CHECK: encoding: [0x20,0x00,0x00,0x20] + addi r0, r0, 0x00000020 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000001000000 +# CHECK: encoding: [0x20,0x00,0x00,0x40] + addi r0, r0, 0x00000040 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000010000000 +# CHECK: encoding: [0x20,0x00,0x00,0x80] + addi r0, r0, 0x00000080 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000100000000 +# CHECK: encoding: [0x20,0x00,0x01,0x00] + addi r0, r0, 0x00000100 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000001000000000 +# CHECK: encoding: [0x20,0x00,0x02,0x00] + addi r0, r0, 0x00000200 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000010000000000 +# CHECK: encoding: [0x20,0x00,0x04,0x00] + addi r0, r0, 0x00000400 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000100000000000 +# CHECK: encoding: [0x20,0x00,0x08,0x00] + addi r0, r0, 0x00000800 + +# CHECK: addi +# BINARY: 001000 00000 00000 0001000000000000 +# CHECK: encoding: [0x20,0x00,0x10,0x00] + addi r0, r0, 0x00001000 + +# CHECK: addi +# BINARY: 001000 00000 00000 0010000000000000 +# CHECK: encoding: [0x20,0x00,0x20,0x00] + addi r0, r0, 0x00002000 + +# CHECK: addi +# BINARY: 001000 00000 00000 0100000000000000 +# CHECK: encoding: [0x20,0x00,0x40,0x00] + addi r0, r0, 0x00004000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000000000000 +# BINARY: 001000 00000 00000 1000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x00,0x20,0x00,0x80,0x00] + addi r0, r0, 0x00008000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000000000001 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x01,0x20,0x00,0x00,0x00] + addi r0, r0, 0x00010000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000000000010 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x02,0x20,0x00,0x00,0x00] + addi r0, r0, 0x00020000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000000000100 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x04,0x20,0x00,0x00,0x00] + addi r0, r0, 0x00040000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000000001000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x08,0x20,0x00,0x00,0x00] + addi r0, r0, 0x00080000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000000010000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x10,0x20,0x00,0x00,0x00] + addi r0, r0, 0x00100000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000000100000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x20,0x20,0x00,0x00,0x00] + addi r0, r0, 0x00200000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000001000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x40,0x20,0x00,0x00,0x00] + addi r0, r0, 0x00400000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000010000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x00,0x80,0x20,0x00,0x00,0x00] + addi r0, r0, 0x00800000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000000100000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x01,0x00,0x20,0x00,0x00,0x00] + addi r0, r0, 0x01000000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000001000000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x02,0x00,0x20,0x00,0x00,0x00] + addi r0, r0, 0x02000000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000010000000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x04,0x00,0x20,0x00,0x00,0x00] + addi r0, r0, 0x04000000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0000100000000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x08,0x00,0x20,0x00,0x00,0x00] + addi r0, r0, 0x08000000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0001000000000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x10,0x00,0x20,0x00,0x00,0x00] + addi r0, r0, 0x10000000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0010000000000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x20,0x00,0x20,0x00,0x00,0x00] + addi r0, r0, 0x20000000 + +# CHECK: addi +# BINARY: 101100 00000 00000 0100000000000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x40,0x00,0x20,0x00,0x00,0x00] + addi r0, r0, 0x40000000 + +# CHECK: addi +# BINARY: 101100 00000 00000 1000000000000000 +# 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0xb0,0x00,0x80,0x00,0x20,0x00,0x00,0x00] + addi r0, r0, 0x80000000 diff --git a/test/MC/MBlaze/mblaze_operands.s b/test/MC/MBlaze/mblaze_operands.s new file mode 100644 index 00000000000..d5f1d8059f3 --- /dev/null +++ b/test/MC/MBlaze/mblaze_operands.s @@ -0,0 +1,328 @@ +# RUN: llvm-mc -triple mblaze-unknown-unknown -show-encoding %s | FileCheck %s + +# Test to ensure that all register and immediate operands can be parsed by +# the assembly parser correctly. Testing the parsing of FSL immediate +# values is done in a different test. + +# TYPE A: OPCODE RD RA RB FLAGS +# BINARY: 000000 00000 00000 00000 00000000000 + +# CHECK: add +# BINARY: 000000 00000 00000 00000 00000000000 +# CHECK: encoding: [0x00,0x00,0x00,0x00] + add r0, r0, r0 + +# CHECK: add +# BINARY: 000000 00001 00001 00001 00000000000 +# CHECK: encoding: [0x00,0x21,0x08,0x00] + add r1, r1, r1 + +# CHECK: add +# BINARY: 000000 00010 00010 00010 00000000000 +# CHECK: encoding: [0x00,0x42,0x10,0x00] + add r2, r2, r2 + +# CHECK: add +# BINARY: 000000 00011 00011 00011 00000000000 +# CHECK: encoding: [0x00,0x63,0x18,0x00] + add r3, r3, r3 + +# CHECK: add +# BINARY: 000000 00100 00100 00100 00000000000 +# CHECK: encoding: [0x00,0x84,0x20,0x00] + add r4, r4, r4 + +# CHECK: add +# BINARY: 000000 00101 00101 00101 00000000000 +# CHECK: encoding: [0x00,0xa5,0x28,0x00] + add r5, r5, r5 + +# CHECK: add +# BINARY: 000000 00110 00110 00110 00000000000 +# CHECK: encoding: [0x00,0xc6,0x30,0x00] + add r6, r6, r6 + +# CHECK: add +# BINARY: 000000 00111 00111 00111 00000000000 +# CHECK: encoding: [0x00,0xe7,0x38,0x00] + add r7, r7, r7 + +# CHECK: add +# BINARY: 000000 01000 01000 01000 00000000000 +# CHECK: encoding: [0x01,0x08,0x40,0x00] + add r8, r8, r8 + +# CHECK: add +# BINARY: 000000 01001 01001 01001 00000000000 +# CHECK: encoding: [0x01,0x29,0x48,0x00] + add r9, r9, r9 + +# CHECK: add +# BINARY: 000000 01010 01010 01010 00000000000 +# CHECK: encoding: [0x01,0x4a,0x50,0x00] + add r10, r10, r10 + +# CHECK: add +# BINARY: 000000 01011 01011 01011 00000000000 +# CHECK: encoding: [0x01,0x6b,0x58,0x00] + add r11, r11, r11 + +# CHECK: add +# BINARY: 000000 01100 01100 01100 00000000000 +# CHECK: encoding: [0x01,0x8c,0x60,0x00] + add r12, r12, r12 + +# CHECK: add +# BINARY: 000000 01101 01101 01101 00000000000 +# CHECK: encoding: [0x01,0xad,0x68,0x00] + add r13, r13, r13 + +# CHECK: add +# BINARY: 000000 01110 01110 01110 00000000000 +# CHECK: encoding: [0x01,0xce,0x70,0x00] + add r14, r14, r14 + +# CHECK: add +# BINARY: 000000 01111 01111 01111 00000000000 +# CHECK: encoding: [0x01,0xef,0x78,0x00] + add r15, r15, r15 + +# CHECK: add +# BINARY: 000000 10000 10000 10000 00000000000 +# CHECK: encoding: [0x02,0x10,0x80,0x00] + add r16, r16, r16 + +# CHECK: add +# BINARY: 000000 10001 10001 10001 00000000000 +# CHECK: encoding: [0x02,0x31,0x88,0x00] + add r17, r17, r17 + +# CHECK: add +# BINARY: 000000 10010 10010 10010 00000000000 +# CHECK: encoding: [0x02,0x52,0x90,0x00] + add r18, r18, r18 + +# CHECK: add +# BINARY: 000000 10011 10011 10011 00000000000 +# CHECK: encoding: [0x02,0x73,0x98,0x00] + add r19, r19, r19 + +# CHECK: add +# BINARY: 000000 10100 10100 10100 00000000000 +# CHECK: encoding: [0x02,0x94,0xa0,0x00] + add r20, r20, r20 + +# CHECK: add +# BINARY: 000000 10101 10101 10101 00000000000 +# CHECK: encoding: [0x02,0xb5,0xa8,0x00] + add r21, r21, r21 + +# CHECK: add +# BINARY: 000000 10110 10110 10110 00000000000 +# CHECK: encoding: [0x02,0xd6,0xb0,0x00] + add r22, r22, r22 + +# CHECK: add +# BINARY: 000000 10111 10111 10111 00000000000 +# CHECK: encoding: [0x02,0xf7,0xb8,0x00] + add r23, r23, r23 + +# CHECK: add +# BINARY: 000000 11000 11000 11000 00000000000 +# CHECK: encoding: [0x03,0x18,0xc0,0x00] + add r24, r24, r24 + +# CHECK: add +# BINARY: 000000 11001 11001 11001 00000000000 +# CHECK: encoding: [0x03,0x39,0xc8,0x00] + add r25, r25, r25 + +# CHECK: add +# BINARY: 000000 11010 11010 11010 00000000000 +# CHECK: encoding: [0x03,0x5a,0xd0,0x00] + add r26, r26, r26 + +# CHECK: add +# BINARY: 000000 11011 11011 11011 00000000000 +# CHECK: encoding: [0x03,0x7b,0xd8,0x00] + add r27, r27, r27 + +# CHECK: add +# BINARY: 000000 11100 11100 11100 00000000000 +# CHECK: encoding: [0x03,0x9c,0xe0,0x00] + add r28, r28, r28 + +# CHECK: add +# BINARY: 000000 11101 11101 11101 00000000000 +# CHECK: encoding: [0x03,0xbd,0xe8,0x00] + add r29, r29, r29 + +# CHECK: add +# BINARY: 000000 11110 11110 11110 00000000000 +# CHECK: encoding: [0x03,0xde,0xf0,0x00] + add r30, r30, r30 + +# CHECK: add +# BINARY: 000000 11111 11111 11111 00000000000 +# CHECK: encoding: [0x03,0xff,0xf8,0x00] + add r31, r31, r31 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000000000 +# CHECK: encoding: [0x20,0x00,0x00,0x00] + addi r0, r0, 0 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000000001 +# CHECK: encoding: [0x20,0x00,0x00,0x01] + addi r0, r0, 1 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000000010 +# CHECK: encoding: [0x20,0x00,0x00,0x02] + addi r0, r0, 2 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000000100 +# CHECK: encoding: [0x20,0x00,0x00,0x04] + addi r0, r0, 4 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000001000 +# CHECK: encoding: [0x20,0x00,0x00,0x08] + addi r0, r0, 8 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000010000 +# CHECK: encoding: [0x20,0x00,0x00,0x10] + addi r0, r0, 16 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000000100000 +# CHECK: encoding: [0x20,0x00,0x00,0x20] + addi r0, r0, 32 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000001000000 +# CHECK: encoding: [0x20,0x00,0x00,0x40] + addi r0, r0, 64 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000010000000 +# CHECK: encoding: [0x20,0x00,0x00,0x80] + addi r0, r0, 128 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000000100000000 +# CHECK: encoding: [0x20,0x00,0x01,0x00] + addi r0, r0, 256 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000001000000000 +# CHECK: encoding: [0x20,0x00,0x02,0x00] + addi r0, r0, 512 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000010000000000 +# CHECK: encoding: [0x20,0x00,0x04,0x00] + addi r0, r0, 1024 + +# CHECK: addi +# BINARY: 001000 00000 00000 0000100000000000 +# CHECK: encoding: [0x20,0x00,0x08,0x00] + addi r0, r0, 2048 + +# CHECK: addi +# BINARY: 001000 00000 00000 0001000000000000 +# CHECK: encoding: [0x20,0x00,0x10,0x00] + addi r0, r0, 4096 + +# CHECK: addi +# BINARY: 001000 00000 00000 0010000000000000 +# CHECK: encoding: [0x20,0x00,0x20,0x00] + addi r0, r0, 8192 + +# CHECK: addi +# BINARY: 001000 00000 00000 0100000000000000 +# CHECK: encoding: [0x20,0x00,0x40,0x00] + addi r0, r0, 16384 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111111111111 +# CHECK: encoding: [0x20,0x00,0xff,0xff] + addi r0, r0, -1 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111111111110 +# CHECK: encoding: [0x20,0x00,0xff,0xfe] + addi r0, r0, -2 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111111111100 +# CHECK: encoding: [0x20,0x00,0xff,0xfc] + addi r0, r0, -4 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111111111000 +# CHECK: encoding: [0x20,0x00,0xff,0xf8] + addi r0, r0, -8 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111111110000 +# CHECK: encoding: [0x20,0x00,0xff,0xf0] + addi r0, r0, -16 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111111100000 +# CHECK: encoding: [0x20,0x00,0xff,0xe0] + addi r0, r0, -32 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111111000000 +# CHECK: encoding: [0x20,0x00,0xff,0xc0] + addi r0, r0, -64 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111110000000 +# CHECK: encoding: [0x20,0x00,0xff,0x80] + addi r0, r0, -128 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111100000000 +# CHECK: encoding: [0x20,0x00,0xff,0x00] + addi r0, r0, -256 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111111000000000 +# CHECK: encoding: [0x20,0x00,0xfe,0x00] + addi r0, r0, -512 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111110000000000 +# CHECK: encoding: [0x20,0x00,0xfc,0x00] + addi r0, r0, -1024 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111100000000000 +# CHECK: encoding: [0x20,0x00,0xf8,0x00] + addi r0, r0, -2048 + +# CHECK: addi +# BINARY: 001000 00000 00000 1111000000000000 +# CHECK: encoding: [0x20,0x00,0xf0,0x00] + addi r0, r0, -4096 + +# CHECK: addi +# BINARY: 001000 00000 00000 1110000000000000 +# CHECK: encoding: [0x20,0x00,0xe0,0x00] + addi r0, r0, -8192 + +# CHECK: addi +# BINARY: 001000 00000 00000 1100000000000000 +# CHECK: encoding: [0x20,0x00,0xc0,0x00] + addi r0, r0, -16384 + +# CHECK: addi +# BINARY: 001000 00000 00000 1000000000000000 +# CHECK: encoding: [0x20,0x00,0x80,0x00] + addi r0, r0, -32768 diff --git a/test/MC/MBlaze/mblaze_typea.s b/test/MC/MBlaze/mblaze_typea.s new file mode 100644 index 00000000000..8e0c7e8bda9 --- /dev/null +++ b/test/MC/MBlaze/mblaze_typea.s @@ -0,0 +1,72 @@ +# RUN: llvm-mc -triple mblaze-unknown-unknown -show-encoding %s | FileCheck %s + +# Test to make sure that all of the TYPE-A instructions supported by +# the Microblaze can be parsed by the assembly parser. + +# TYPE A: OPCODE RD RA RB FLAGS +# BINARY: 000000 00000 00000 00000 00000000000 + +# CHECK: add +# BINARY: 000000 00001 00010 00011 00000000000 +# CHECK: encoding: [0x00,0x22,0x18,0x00] + add r1, r2, r3 + +# CHECK: addc +# BINARY: 000010 00001 00010 00011 00000000000 +# CHECK: encoding: [0x08,0x22,0x18,0x00] + addc r1, r2, r3 + +# CHECK: addk +# BINARY: 000100 00001 00010 00011 00000000000 +# CHECK: encoding: [0x10,0x22,0x18,0x00] + addk r1, r2, r3 + +# CHECK: addkc +# BINARY: 000110 00001 00010 00011 00000000000 +# CHECK: encoding: [0x18,0x22,0x18,0x00] + addkc r1, r2, r3 + +# CHECK: and +# BINARY: 100001 00001 00010 00011 00000000000 +# CHECK: encoding: [0x84,0x22,0x18,0x00] + and r1, r2, r3 + +# CHECK: andn +# BINARY: 100011 00001 00010 00011 00000000000 +# CHECK: encoding: [0x8c,0x22,0x18,0x00] + andn r1, r2, r3 + +# CHECK: beq +# BINARY: 100111 00000 00010 00011 00000000000 +# CHECK: encoding: [0x9c,0x02,0x18,0x00] + beq r2, r3 + +# CHECK: bge +# BINARY: 100111 00101 00010 00011 00000000000 +# CHECK: encoding: [0x9c,0xa2,0x18,0x00] + bge r2, r3 + +# CHECK: bgt +# BINARY: 100111 00100 00010 00011 00000000000 +# CHECK: encoding: [0x9c,0x82,0x18,0x00] + bgt r2, r3 + +# CHECK: ble +# BINARY: 100111 00011 00010 00011 00000000000 +# CHECK: encoding: [0x9c,0x62,0x18,0x00] + ble r2, r3 + +# CHECK: blt +# BINARY: 100111 00010 00010 00011 00000000000 +# CHECK: encoding: [0x9c,0x42,0x18,0x00] + blt r2, r3 + +# CHECK: bne +# BINARY: 100111 00001 00010 00011 00000000000 +# CHECK: encoding: [0x9c,0x22,0x18,0x00] + bne r2, r3 + +# CHECK: nop +# BINARY: 100000 00000 00000 00000 00000000000 +# CHECK: encoding: [0x80,0x00,0x00,0x00] + nop diff --git a/test/MC/MBlaze/mblaze_typeb.s b/test/MC/MBlaze/mblaze_typeb.s new file mode 100644 index 00000000000..bc24e24b793 --- /dev/null +++ b/test/MC/MBlaze/mblaze_typeb.s @@ -0,0 +1,37 @@ +# RUN: llvm-mc -triple mblaze-unknown-unknown -show-encoding %s | FileCheck %s + +# Test to make sure that all of the TYPE-B instructions supported by +# the Microblaze can be parsed by the assembly parser. + +# TYPE B: OPCODE RD RA IMMEDIATE +# 000000 00000 00000 0000000000000000 + +# CHECK: addi +# BINARY: 001000 00001 00010 0000000000001111 +# CHECK: encoding: [0x20,0x22,0x00,0x0f] + addi r1, r2, 0x000F + +# CHECK: addic +# BINARY: 001010 00001 00010 0000000000001111 +# CHECK: encoding: [0x28,0x22,0x00,0x0f] + addic r1, r2, 0x000F + +# CHECK: addik +# BINARY: 001100 00001 00010 0000000000001111 +# CHECK: encoding: [0x30,0x22,0x00,0x0f] + addik r1, r2, 0x000F + +# CHECK: addikc +# BINARY: 001110 00001 00010 0000000000001111 +# CHECK: encoding: [0x38,0x22,0x00,0x0f] + addikc r1, r2, 0x000F + +# CHECK: andi +# BINARY: 101001 00001 00010 0000000000001111 +# CHECK: encoding: [0xa4,0x22,0x00,0x0f] + andi r1, r2, 0x000F + +# CHECK: andni +# BINARY: 101011 00001 00010 0000000000001111 +# CHECK: encoding: [0xac,0x22,0x00,0x0f] + andni r1, r2, 0x000F