diff options
| author | Alexei Starovoitov <alexei.starovoitov@gmail.com> | 2015-03-27 18:51:42 +0000 |
|---|---|---|
| committer | Alexei Starovoitov <alexei.starovoitov@gmail.com> | 2015-03-27 18:51:42 +0000 |
| commit | 13cf2cc4052d30360d7e7dd8eff1db53145de02a (patch) | |
| tree | fbbff0957a8cebc72c2bafad7aa99b2ee53d278f /llvm/lib | |
| parent | 2e27df717a5989e299db95cd071ded1d21744a88 (diff) | |
| download | bcm5719-llvm-13cf2cc4052d30360d7e7dd8eff1db53145de02a.tar.gz bcm5719-llvm-13cf2cc4052d30360d7e7dd8eff1db53145de02a.zip | |
[bpf] add support for bpf pseudo instruction
Expose bpf pseudo load instruction via intrinsic. It is used by front-ends that
can encode file descriptors directly into IR instead of relying on relocations.
llvm-svn: 233396
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/BPF/BPFInstrInfo.td | 23 | ||||
| -rw-r--r-- | llvm/lib/Target/BPF/MCTargetDesc/BPFMCCodeEmitter.cpp | 2 |
2 files changed, 24 insertions, 1 deletions
diff --git a/llvm/lib/Target/BPF/BPFInstrInfo.td b/llvm/lib/Target/BPF/BPFInstrInfo.td index 47001f01ff0..1ab7a7754cd 100644 --- a/llvm/lib/Target/BPF/BPFInstrInfo.td +++ b/llvm/lib/Target/BPF/BPFInstrInfo.td @@ -257,6 +257,29 @@ class LD_IMM64<bits<4> Pseudo, string OpcodeStr> } def LD_imm64 : LD_IMM64<0, "ld_64">; +def LD_pseudo + : InstBPF<(outs GPR:$dst), (ins i64imm:$pseudo, u64imm:$imm), + "ld_pseudo\t$dst, $pseudo, $imm", + [(set GPR:$dst, (int_bpf_pseudo imm:$pseudo, imm:$imm))]> { + + bits<3> mode; + bits<2> size; + bits<4> dst; + bits<64> imm; + bits<4> pseudo; + + let Inst{63-61} = mode; + let Inst{60-59} = size; + let Inst{51-48} = dst; + let Inst{55-52} = pseudo; + let Inst{47-32} = 0; + let Inst{31-0} = imm{31-0}; + + let mode = 0; // BPF_IMM + let size = 3; // BPF_DW + let BPFClass = 0; // BPF_LD +} + // STORE instructions class STORE<bits<2> SizeOp, string OpcodeStr, list<dag> Pattern> : InstBPF<(outs), (ins GPR:$src, MEMri:$addr), diff --git a/llvm/lib/Target/BPF/MCTargetDesc/BPFMCCodeEmitter.cpp b/llvm/lib/Target/BPF/MCTargetDesc/BPFMCCodeEmitter.cpp index 9c51d66dbc2..280d2f1e57f 100644 --- a/llvm/lib/Target/BPF/MCTargetDesc/BPFMCCodeEmitter.cpp +++ b/llvm/lib/Target/BPF/MCTargetDesc/BPFMCCodeEmitter.cpp @@ -125,7 +125,7 @@ void BPFMCCodeEmitter::EncodeInstruction(const MCInst &MI, raw_ostream &OS, // Keep track of the current byte being emitted unsigned CurByte = 0; - if (Opcode == BPF::LD_imm64) { + if (Opcode == BPF::LD_imm64 || Opcode == BPF::LD_pseudo) { uint64_t Value = getBinaryCodeForInstr(MI, Fixups, STI); EmitByte(Value >> 56, CurByte, OS); EmitByte(((Value >> 48) & 0xff), CurByte, OS); |

