21 lines
985 B
Plaintext
21 lines
985 B
Plaintext
- Implement the 'h' register constraint on mips64. This lets clang build
|
|
pieces of software that use the constraint if the compiler claims
|
|
to be compatible with GCC 4.2.1.
|
|
Note that the constraint was removed in GCC 4.4. The reason was that
|
|
'h' could generate code whose result is unpredictable. The underlying
|
|
reason is that the HI and LO registers are special, and the optimizer
|
|
has to be careful when choosing the order of HI/LO accesses. It looks
|
|
that LLVM has the needed logic.
|
|
|
|
Index: tools/clang/lib/Basic/Targets/Mips.h
|
|
--- tools/clang/lib/Basic/Targets/Mips.h.orig
|
|
+++ tools/clang/lib/Basic/Targets/Mips.h
|
|
@@ -239,6 +239,7 @@ class LLVM_LIBRARY_VISIBILITY MipsTargetInfo : public
|
|
case 'y': // Equivalent to "r", backward compatibility only.
|
|
case 'f': // floating-point registers.
|
|
case 'c': // $25 for indirect jumps
|
|
+ case 'h': // hi register
|
|
case 'l': // lo register
|
|
case 'x': // hilo register pair
|
|
Info.setAllowsRegister();
|