mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-11 13:29:36 +00:00
Add encoding for VSTR.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118220 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0bb780c0e0
commit
2f46f1f59c
@ -1461,6 +1461,17 @@ class ADI5<bits<4> opcod1, bits<2> opcod2, dag oops, dag iops,
|
||||
string opc, string asm, list<dag> pattern>
|
||||
: VFPI<oops, iops, AddrMode5, Size4Bytes, IndexModeNone,
|
||||
VFPLdStFrm, itin, opc, asm, "", pattern> {
|
||||
// Instruction operands.
|
||||
bits<5> Dd;
|
||||
bits<13> addr;
|
||||
|
||||
// Encode instruction operands.
|
||||
let Inst{23} = addr{8}; // U (add = (U == '1'))
|
||||
let Inst{22} = Dd{4};
|
||||
let Inst{19-16} = addr{12-9}; // Rn
|
||||
let Inst{15-12} = Dd{3-0};
|
||||
let Inst{7-0} = addr{7-0}; // imm8
|
||||
|
||||
// TODO: Mark the instructions with the appropriate subtarget info.
|
||||
let Inst{27-24} = opcod1;
|
||||
let Inst{21-20} = opcod2;
|
||||
@ -1476,6 +1487,17 @@ class ASI5<bits<4> opcod1, bits<2> opcod2, dag oops, dag iops,
|
||||
string opc, string asm, list<dag> pattern>
|
||||
: VFPI<oops, iops, AddrMode5, Size4Bytes, IndexModeNone,
|
||||
VFPLdStFrm, itin, opc, asm, "", pattern> {
|
||||
// Instruction operands.
|
||||
bits<5> Sd;
|
||||
bits<13> addr;
|
||||
|
||||
// Encode instruction operands.
|
||||
let Inst{23} = addr{8}; // U (add = (U == '1'))
|
||||
let Inst{22} = Sd{0};
|
||||
let Inst{19-16} = addr{12-9}; // Rn
|
||||
let Inst{15-12} = Sd{4-1};
|
||||
let Inst{7-0} = addr{7-0}; // imm8
|
||||
|
||||
// TODO: Mark the instructions with the appropriate subtarget info.
|
||||
let Inst{27-24} = opcod1;
|
||||
let Inst{21-20} = opcod2;
|
||||
|
@ -54,43 +54,21 @@ let canFoldAsLoad = 1, isReMaterializable = 1 in {
|
||||
|
||||
def VLDRD : ADI5<0b1101, 0b01, (outs DPR:$Dd), (ins addrmode5:$addr),
|
||||
IIC_fpLoad64, "vldr", ".64\t$Dd, $addr",
|
||||
[(set DPR:$Dd, (f64 (load addrmode5:$addr)))]> {
|
||||
// Instruction operands.
|
||||
bits<5> Dd;
|
||||
bits<13> addr;
|
||||
|
||||
// Encode instruction operands.
|
||||
let Inst{23} = addr{8}; // U (add = (U == '1'))
|
||||
let Inst{22} = Dd{4};
|
||||
let Inst{19-16} = addr{12-9}; // Rn
|
||||
let Inst{15-12} = Dd{3-0};
|
||||
let Inst{7-0} = addr{7-0}; // imm8
|
||||
}
|
||||
[(set DPR:$Dd, (f64 (load addrmode5:$addr)))]>;
|
||||
|
||||
def VLDRS : ASI5<0b1101, 0b01, (outs SPR:$Sd), (ins addrmode5:$addr),
|
||||
IIC_fpLoad32, "vldr", ".32\t$Sd, $addr",
|
||||
[(set SPR:$Sd, (load addrmode5:$addr))]> {
|
||||
// Instruction operands.
|
||||
bits<5> Sd;
|
||||
bits<13> addr;
|
||||
|
||||
// Encode instruction operands.
|
||||
let Inst{23} = addr{8}; // U (add = (U == '1'))
|
||||
let Inst{22} = Sd{0};
|
||||
let Inst{19-16} = addr{12-9}; // Rn
|
||||
let Inst{15-12} = Sd{4-1};
|
||||
let Inst{7-0} = addr{7-0}; // imm8
|
||||
}
|
||||
[(set SPR:$Sd, (load addrmode5:$addr))]>;
|
||||
|
||||
} // End of 'let canFoldAsLoad = 1, isReMaterializable = 1 in'
|
||||
|
||||
def VSTRD : ADI5<0b1101, 0b00, (outs), (ins DPR:$src, addrmode5:$addr),
|
||||
IIC_fpStore64, "vstr", ".64\t$src, $addr",
|
||||
[(store (f64 DPR:$src), addrmode5:$addr)]>;
|
||||
def VSTRD : ADI5<0b1101, 0b00, (outs), (ins DPR:$Dd, addrmode5:$addr),
|
||||
IIC_fpStore64, "vstr", ".64\t$Dd, $addr",
|
||||
[(store (f64 DPR:$Dd), addrmode5:$addr)]>;
|
||||
|
||||
def VSTRS : ASI5<0b1101, 0b00, (outs), (ins SPR:$src, addrmode5:$addr),
|
||||
IIC_fpStore32, "vstr", ".32\t$src, $addr",
|
||||
[(store SPR:$src, addrmode5:$addr)]>;
|
||||
def VSTRS : ASI5<0b1101, 0b00, (outs), (ins SPR:$Sd, addrmode5:$addr),
|
||||
IIC_fpStore32, "vstr", ".32\t$Sd, $addr",
|
||||
[(store SPR:$Sd, addrmode5:$addr)]>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Load / store multiple Instructions.
|
||||
|
@ -193,3 +193,17 @@
|
||||
vldr.32 s5, [pc]
|
||||
vldr.32 s5, [pc,#0]
|
||||
vldr.32 s5, [pc,#-0]
|
||||
|
||||
@ CHECK: vstr.64 d4, [r1] @ encoding: [0x00,0x4b,0x81,0xed]
|
||||
@ CHECK: vstr.64 d4, [r1, #24] @ encoding: [0x06,0x4b,0x81,0xed]
|
||||
@ CHECK: vstr.64 d4, [r1, #-24] @ encoding: [0x06,0x4b,0x01,0xed]
|
||||
vstr.64 d4, [r1]
|
||||
vstr.64 d4, [r1, #24]
|
||||
vstr.64 d4, [r1, #-24]
|
||||
|
||||
@ CHECK: vstr.32 s4, [r1] @ encoding: [0x00,0x2a,0x81,0xed]
|
||||
@ CHECK: vstr.32 s4, [r1, #24] @ encoding: [0x06,0x2a,0x81,0xed]
|
||||
@ CHECK: vstr.32 s4, [r1, #-24] @ encoding: [0x06,0x2a,0x01,0xed]
|
||||
vstr.32 s4, [r1]
|
||||
vstr.32 s4, [r1, #24]
|
||||
vstr.32 s4, [r1, #-24]
|
||||
|
Loading…
x
Reference in New Issue
Block a user