Skip to content
  1. Apr 02, 2013
    • Jakob Stoklund Olesen's avatar
      Add 64-bit shift instructions. · c1d1a481
      Jakob Stoklund Olesen authored
      SPARC v9 defines new 64-bit shift instructions. The 32-bit shift right
      instructions are still usable as zero and sign extensions.
      
      This adds new F3_Sr and F3_Si instruction formats that probably should
      be used for the 32-bit shifts as well. They don't really encode an
      simm13 field.
      
      llvm-svn: 178525
      c1d1a481
    • Jakob Stoklund Olesen's avatar
      Add predicates for distinguishing 32-bit and 64-bit modes. · 739d722e
      Jakob Stoklund Olesen authored
      The 'sparc' architecture produces 32-bit code while 'sparcv9' produces
      64-bit code.
      
      It is also possible to run 32-bit code using SPARC v9 instructions with:
      
        llc -march=sparc -mattr=+v9
      
      llvm-svn: 178524
      739d722e
    • Jakob Stoklund Olesen's avatar
      Add support for 64-bit calling convention. · 0b21f35a
      Jakob Stoklund Olesen authored
      This is far from complete, but it is enough to make it possible to write
      test cases using i64 arguments.
      
      Missing features:
      - Floating point arguments.
      - Receiving arguments on the stack.
      - Calls.
      
      llvm-svn: 178523
      0b21f35a
    • Jakob Stoklund Olesen's avatar
      Add an I64Regs register class for 64-bit registers. · 5ad3b353
      Jakob Stoklund Olesen authored
      We are going to use the same registers for 32-bit and 64-bit values, but
      in two different register classes. The I64Regs register class has a
      larger spill size and alignment.
      
      The addition of an i64 register class confuses TableGen's type
      inference, so it is necessary to clarify the type of some immediates and
      the G0 register.
      
      In 64-bit mode, pointers are i64 and should use the I64Regs register
      class. Implement getPointerRegClass() to dynamically provide the pointer
      register class depending on the subtarget. Use ptr_rc and iPTR for
      memory operands.
      
      Finally, add the i64 type to the IntRegs register class. This register
      class is not used to hold i64 values, I64Regs is for that. The type is
      required to appease TableGen's type checking in output patterns like this:
      
        def : Pat<(add i64:$a, i64:$b), (ADDrr $a, $b)>;
      
      SPARC v9 uses the same ADDrr instruction for i32 and i64 additions, and
      TableGen doesn't know to check the type of register sub-classes.
      
      llvm-svn: 178522
      5ad3b353
    • Hal Finkel's avatar
      Fix typo in PPCISelLowering · 93d75ea0
      Hal Finkel authored
      Thanks to Bill Schmidt for finding this in review of r178480.
      
      llvm-svn: 178521
      93d75ea0
    • Andrew Trick's avatar
      The divide unit is not pipeline, but it is still buffered. · e1d88cfb
      Andrew Trick authored
      Buffered means a later divide may be executed out-of-order while a
      prior divide is sitting (buffered) in a reservation station.
      
      You can tell it's not pipelined, because operations that use it
      reserve it for more than one cycle:
      
      def : WriteRes<WriteIDiv, [HWPort0, HWDivider]> {
        let Latency = 25;
        let ResourceCycles = [1, 10];
      }
      
      We don't currently distinguish between an unpipeline operation and one
      that is split into multiple micro-ops requiring the same unit. Except
      that the later may have NumMicroOps > 1 if they also consume
      issue/dispatch resources.
      
      llvm-svn: 178519
      e1d88cfb
    • NAKAMURA Takumi's avatar
      Target/R600: Fix CMake build to add missing files. · fd98f7f2
      NAKAMURA Takumi authored
      llvm-svn: 178508
      fd98f7f2
  2. Apr 01, 2013
  3. Mar 31, 2013
  4. Mar 30, 2013
Loading