mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
For 64-bit the rest of the general regs are ok for the q constraint. Make
sure we can emit both the high and low versions of those registers. Fixes rdar://10392864 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145579 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0becc96b24
commit
7d5a61e975
@ -665,7 +665,7 @@ unsigned getX86SubSuperRegister(unsigned Reg, EVT VT, bool High) {
|
||||
case MVT::i8:
|
||||
if (High) {
|
||||
switch (Reg) {
|
||||
default: return 0;
|
||||
default: return getX86SubSuperRegister(Reg, MVT::i64, High);
|
||||
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
||||
return X86::AH;
|
||||
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
|
||||
@ -785,6 +785,22 @@ unsigned getX86SubSuperRegister(unsigned Reg, EVT VT, bool High) {
|
||||
return X86::R15D;
|
||||
}
|
||||
case MVT::i64:
|
||||
// For 64-bit mode if we've requested a "high" register and the
|
||||
// Q or r constraints we want one of these high registers or
|
||||
// just the register name otherwise.
|
||||
if (High) {
|
||||
switch (Reg) {
|
||||
case X86::SIL: case X86::SI: case X86::ESI: case X86::RSI:
|
||||
return X86::SI;
|
||||
case X86::DIL: case X86::DI: case X86::EDI: case X86::RDI:
|
||||
return X86::DI;
|
||||
case X86::BPL: case X86::BP: case X86::EBP: case X86::RBP:
|
||||
return X86::BP;
|
||||
case X86::SPL: case X86::SP: case X86::ESP: case X86::RSP:
|
||||
return X86::SP;
|
||||
// Fallthrough.
|
||||
}
|
||||
}
|
||||
switch (Reg) {
|
||||
default: return Reg;
|
||||
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
|
||||
|
@ -20,3 +20,10 @@ define void @test3(double %tmp) nounwind {
|
||||
call void asm sideeffect "$0", "q"(double %tmp) nounwind
|
||||
ret void
|
||||
}
|
||||
|
||||
; rdar://10392864
|
||||
define void @test4(i8 signext %val, i8 signext %a, i8 signext %b, i8 signext %c, i8 signext %d) nounwind {
|
||||
entry:
|
||||
%0 = tail call { i8, i8, i8, i8, i8 } asm "foo $1, $2, $3, $4, $1\0Axchgb ${0:b}, ${0:h}", "=q,={ax},={bx},={cx},={dx},0,1,2,3,4,~{dirflag},~{fpsr},~{flags}"(i8 %val, i8 %a, i8 %b, i8 %c, i8 %d) nounwind
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user