1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-24 21:42:54 +02:00
llvm-mirror/lib/Target/PowerPC
Misha Brukman 42e53e4d94 * Set the is64bit boolean flag in PowerPCRegisterInfo
* Doubles are 8 bytes in 64-bit PowerPC, and use the general register class
* Use double-word loads and stores for restoring from/saving to stack
* Do not allocate R2 if compiling for AIX

llvm-svn: 15670
2004-08-11 23:44:55 +00:00
..
LICENSE.TXT Added Louis Gerbarg. Louis is given credit in the CREDITS.TXT file, so I 2004-08-05 23:46:27 +00:00
Makefile Generate a code emitter for PowerPC as well, this will be used in the JIT. 2004-08-09 17:24:32 +00:00
PowerPC.h 64-bit instruction selector and AIX-specific 64-bit asm printer 2004-08-11 23:42:15 +00:00
PowerPC.td * Fix file header to use tablegen emacs mode instead of c++ 2004-08-10 21:24:44 +00:00
PowerPCBranchSelector.cpp Renamed PPC32 (namespace for regs, opcodes) to PPC to include 64-bit targets 2004-08-10 22:47:03 +00:00
PowerPCInstrBuilder.h * Wrap long lines (comments and code) 2004-07-07 20:01:36 +00:00
PowerPCInstrFormats.td Add support for 64-bit CMPDI, CMPLDI, and CMPLD opcodes 2004-08-11 20:56:14 +00:00
PowerPCInstrInfo.cpp Renamed PPC32 (namespace for regs, opcodes) to PPC to include 64-bit targets 2004-08-10 22:47:03 +00:00
PowerPCInstrInfo.h Breaking up the PowerPC target into 32- and 64-bit subparts, Part III: the rest. 2004-08-11 00:11:25 +00:00
PowerPCInstrInfo.td Fix names of 64-bit CMP*D* opcodes, add LWA and STD* opcodes 2004-08-11 23:33:34 +00:00
PowerPCJITInfo.h Breaking up the PowerPC target into 32- and 64-bit subparts, Part III: the rest. 2004-08-11 00:11:25 +00:00
PowerPCPEI.cpp Renamed PPC32 (namespace for regs, opcodes) to PPC to include 64-bit targets 2004-08-10 22:47:03 +00:00
PowerPCRegisterInfo.cpp * Set the is64bit boolean flag in PowerPCRegisterInfo 2004-08-11 23:44:55 +00:00
PowerPCRegisterInfo.h * Set the is64bit boolean flag in PowerPCRegisterInfo 2004-08-11 23:44:55 +00:00
PowerPCRegisterInfo.td * Set the is64bit boolean flag in PowerPCRegisterInfo 2004-08-11 23:44:55 +00:00
PowerPCTargetMachine.cpp Hyphenate ##-bit and remove first-person from comments. 2004-08-11 13:35:44 +00:00
PowerPCTargetMachine.h Clean up 32/64bit and Darwin/AIX split. Next steps: 64 bit ISel, AIX asm printer. 2004-08-11 07:40:04 +00:00
PPC32AsmPrinter.cpp Breaking up the PowerPC target into 32- and 64-bit subparts, Part I: 32-bit. 2004-08-11 00:09:42 +00:00
PPC32CodeEmitter.cpp Breaking up the PowerPC target into 32- and 64-bit subparts, Part I: 32-bit. 2004-08-11 00:09:42 +00:00
PPC32ISelSimple.cpp Clean up 32/64bit and Darwin/AIX split. Next steps: 64 bit ISel, AIX asm printer. 2004-08-11 07:40:04 +00:00
PPC32JITInfo.h Clean up 32/64bit and Darwin/AIX split. Next steps: 64 bit ISel, AIX asm printer. 2004-08-11 07:40:04 +00:00
PPC32TargetMachine.h Clean up 32/64bit and Darwin/AIX split. Next steps: 64 bit ISel, AIX asm printer. 2004-08-11 07:40:04 +00:00
PPC64AsmPrinter.cpp 64-bit instruction selector and AIX-specific 64-bit asm printer 2004-08-11 23:42:15 +00:00
PPC64CodeEmitter.cpp Breaking up the PowerPC target into 32- and 64-bit subparts: Part II: 64-bit. 2004-08-11 00:10:41 +00:00
PPC64ISelSimple.cpp 64-bit instruction selector and AIX-specific 64-bit asm printer 2004-08-11 23:42:15 +00:00
PPC64JITInfo.h Clean up 32/64bit and Darwin/AIX split. Next steps: 64 bit ISel, AIX asm printer. 2004-08-11 07:40:04 +00:00
PPC64TargetMachine.h Clean up 32/64bit and Darwin/AIX split. Next steps: 64 bit ISel, AIX asm printer. 2004-08-11 07:40:04 +00:00
README.txt Fix casts of float to unsigned long 2004-08-10 20:42:36 +00:00

TODO:
* implement cast fp to bool
* implement signed right shift by reg
* fix ulong to double:
  floatdidf assumes signed longs.  so if the high but of a ulong
  just happens to be set, you get the wrong sign.  The fix for this
  is to call cmpdi2 to compare against zero, if so shift right by one,
  convert to fp, and multiply by (add to itself).  the sequence would
  look like:
  {r3:r4} holds ulong a;
  li r5, 0
  li r6, 0 (set r5:r6 to ulong 0)
  call cmpdi2 ==> sets r3 <, =, > 0
  if r3 > 0
  call floatdidf as usual
  else
  shift right ulong a, 1 (we could use emitShift)
  call floatdidf
  fadd f1, f1, f1 (fp left shift by 1)
* PowerPCPEI.cpp needs to be replaced by shiny new target hook
* setCondInst needs to know branchless versions of seteq/setne/etc
* cast elimination pass (uint -> sbyte -> short, kill the byte -> short)
* should hint to the branch select pass that it doesn't need to print the
  second unconditional branch, so we don't end up with things like:
	b .LBBl42__2E_expand_function_8_674	; loopentry.24
	b .LBBl42__2E_expand_function_8_42	; NewDefault
	b .LBBl42__2E_expand_function_8_42	; NewDefault

Current hacks:
* lazy insert of GlobalBaseReg definition at front of first MBB
  A prime candidate for sabre's future "slightly above ISel" passes.
* cast code is huge, unwieldy.  Should probably be broken up into
  smaller pieces.
* visitLoadInst is getting awfully cluttered as well.

Currently failing tests:
* SingleSource
  `- Regression
  |  `- casts (ulong to fp failure)
  `- Benchmarks
  |  `- Shootout-C++ : most programs fail, miscompilations
  `- UnitTests
  |  `- C++Catch
  |  `- SimpleC++Test
  |  `- ConditionalExpr (also C++)
* MultiSource
  |- Applications
  |  `- burg: miscompilation
  |  `- siod: llc bus error
  |  `- hbd: miscompilation
  |  `- d (make_dparser): miscompilation
  `- Benchmarks
     `- MallocBench/make: miscompilation