Disable the fake direct page registers which are wider than 16-bits for now to workaround a problem. LLVM seems to promote everything to 32-bit if you say the machine has 32-bit or better registers even if I have indicated that the native bit width is 16. Disabling these gets me one step closer to my first successful compile.

This commit is contained in:
Jeremy Rand 2015-09-03 23:41:00 -04:00
parent 74cb03d2f6
commit 4fb15c1a07
2 changed files with 7 additions and 1 deletions

View File

@ -811,10 +811,16 @@ WDC65816TargetLowering::WDC65816TargetLowering(TargetMachine &TM)
: TargetLowering(TM, new TargetLoweringObjectFileELF()) {
addRegisterClass(MVT::i16, &WDC::Int16RegsRegClass);
#if 0 // WDC_TODO - turn these off for now...
// The problem here is that if LLVM thinks we have 32bit and 64bit registers
// then it insists on promoting ints to 32-bit even though we have said we are
// natively a 16-bit machine. Also, I haven't bothered to tell LLVM yet how to
// load values into these registers which I think confuses it. So, off for now.
addRegisterClass(MVT::i32, &WDC::Int32RegsRegClass);
addRegisterClass(MVT::i64, &WDC::Int64RegsRegClass);
addRegisterClass(MVT::f32, &WDC::Float32RegsRegClass);
addRegisterClass(MVT::f64, &WDC::Float64RegsRegClass);
#endif
computeRegisterProperties();
#if 0 // WDC_TODO - For sure we need something here...

View File

@ -37,7 +37,7 @@ namespace llvm {
bool is64Bit() const { return false; }
std::string getDataLayout() const {
return std::string("e-p:32:8:8-i16:8:8-f32:8:8-f68:8:8-n16");
return std::string("e-p:32:8:8-i8:8:8-i16:8:8-i32:8:8-f32:8:8-f64:8:8-n16:8");
}
#if 0 // WDC_TODO - do I need any of this?