mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-30 17:33:24 +00:00
Submit the basic port of the rest of ARM constant islands code to Mips.
Two test cases are added which reflect the next level of functionality: constants getting moved to water areas that are out of range from the initial placement at the end of the function and basic blocks being split to create water when none exists that can be used. There is a bunch of this code that is not complete and has been marked with IN_PROGRESS. I will finish cleaning this all up during the next week or two and submit the rest of the test cases. I have elminated some code for dealing with inline assembly because to me it unecessarily complicates things and some of the newer features of llvm like function attributies and builtin assembler give me better tools to solve the alignment issues created there. Also, for Mips16 I even have the option of not doing constant islands in the present of inline assembler if I chose. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194019 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6f744ee498
commit
1ef9083122
@ -60,6 +60,11 @@ class FRI16_ins<bits<5> op, string asmstr,
|
||||
InstrItinClass itin>:
|
||||
FRI16_ins_base<op, asmstr, "\t$rx, $imm \t# 16 bit inst", itin>;
|
||||
|
||||
class FRI16_TCP_ins<bits<5> _op, string asmstr,
|
||||
InstrItinClass itin>:
|
||||
FRI16<_op, (outs CPU16Regs:$rx), (ins pcrel16:$imm, i32imm:$size),
|
||||
!strconcat(asmstr, "\t$rx, $imm\t# 16 bit inst"), [], itin>;
|
||||
|
||||
class FRI16R_ins_base<bits<5> op, string asmstr, string asmstr2,
|
||||
InstrItinClass itin>:
|
||||
FRI16<op, (outs), (ins CPU16Regs:$rx, simm16:$imm),
|
||||
@ -174,7 +179,7 @@ class FEXT_RI16_B_ins<bits<5> _op, string asmstr,
|
||||
|
||||
class FEXT_RI16_TCP_ins<bits<5> _op, string asmstr,
|
||||
InstrItinClass itin>:
|
||||
FEXT_RI16<_op, (outs CPU16Regs:$rx), (ins pcrel16:$imm),
|
||||
FEXT_RI16<_op, (outs CPU16Regs:$rx), (ins pcrel16:$imm, i32imm:$size),
|
||||
!strconcat(asmstr, "\t$rx, $imm"), [], itin>;
|
||||
|
||||
class FEXT_2RI16_ins<bits<5> _op, string asmstr,
|
||||
@ -802,6 +807,8 @@ def LwRxSpImmX16: FEXT_RI16_SP_explicit_ins<0b10010, "lw", IILoad>, MayLoad{
|
||||
let Uses = [SP];
|
||||
}
|
||||
|
||||
def LwRxPcTcp16: FRI16_TCP_ins<0b10110, "lw", IILoad>, MayLoad;
|
||||
|
||||
def LwRxPcTcpX16: FEXT_RI16_TCP_ins<0b10110, "lw", IILoad>, MayLoad;
|
||||
//
|
||||
// Format: MOVE r32, rz MIPS16e
|
||||
@ -1869,3 +1876,4 @@ let neverHasSideEffects = 1, isNotDuplicable = 1 in
|
||||
def CONSTPOOL_ENTRY :
|
||||
MipsPseudo16<(outs), (ins cpinst_operand:$instid, cpinst_operand:$cpidx,
|
||||
i32imm:$size), "foo", []>;
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user