1// RUN: llvm-tblgen -gen-disassembler -I %p/../../../include %s | FileCheck %s
2
3include "llvm/Target/Target.td"
4
5def archInstrInfo : InstrInfo { }
6
7def arch : Target {
8    let InstructionSet = archInstrInfo;
9}
10
11let OutOperandList = (outs), Size = 2 in {
12
13def foo : Instruction {
14    let InOperandList = (ins i32imm:$factor);
15    field bits<16> Inst;
16    field bits<16> SoftFail = 0;
17    bits<8> factor;
18    let factor{0} = 0; // zero initial value
19    let Inst{15...8} = factor{7...0};
20    }
21
22def bar : Instruction {
23    let InOperandList = (ins i32imm:$factor);
24    field bits<16> Inst;
25    field bits<16> SoftFail = 0;
26    bits<8> factor;
27    let factor{0} = 1; // non-zero initial value
28    let Inst{15...8} = factor{7...0};
29    }
30
31def bax : Instruction {
32    let InOperandList = (ins i32imm:$factor);
33    field bits<16> Inst;
34    field bits<16> SoftFail = 0;
35    bits<33> factor;
36    let factor{32} = 1; // non-zero initial value
37    let Inst{15...8} = factor{32...25};
38    }
39
40}
41
42// CHECK: tmp = fieldFromInstruction(insn, 9, 7) << 1;
43// CHECK: tmp = 0x1;
44// CHECK: tmp |= fieldFromInstruction(insn, 9, 7) << 1;
45// CHECK: tmp = 0x100000000;
46// CHECK: tmp |= fieldFromInstruction(insn, 8, 7) << 25;
47