Skip to content
  1. May 14, 2013
    • Eric Christopher's avatar
      Temporarily revert "Subtract isn't commutative, fix this for MMX psub." · 3eee7454
      Eric Christopher authored
      It's causing failures on the atom bot.
      
      llvm-svn: 181812
      3eee7454
    • Eric Christopher's avatar
      Subtract isn't commutative, fix this for MMX psub. · 0344f495
      Eric Christopher authored
      Patch by Andrea DiBiagio.
      
      llvm-svn: 181809
      0344f495
    • Jyotsna Verma's avatar
      Hexagon: Add patterns to generate 'combine' instructions. · 2dca82ad
      Jyotsna Verma authored
      llvm-svn: 181805
      2dca82ad
    • Jyotsna Verma's avatar
      Hexagon: ArePredicatesComplement should not restrict itself to TFRs. · 11bd54af
      Jyotsna Verma authored
      llvm-svn: 181803
      11bd54af
    • Bill Schmidt's avatar
      PPC32: Fix stack collision between FP and CR save areas. · ef3d1a24
      Bill Schmidt authored
      The changes to CR spill handling missed a case for 32-bit PowerPC.
      The code in PPCFrameLowering::processFunctionBeforeFrameFinalized()
      checks whether CR spill has occurred using a flag in the function
      info.  This flag is only set by storeRegToStackSlot and
      loadRegFromStackSlot.  spillCalleeSavedRegisters does not call
      storeRegToStackSlot, but instead produces MI directly.  Thus we don't
      see the CR is spilled when assigning frame offsets, and the CR spill
      ends up colliding with some other location (generally the FP slot).
      
      This patch sets the flag in spillCalleeSavedRegisters for PPC32 so
      that the CR spill is properly detected and gets its own slot in the
      stack frame.
      
      llvm-svn: 181800
      ef3d1a24
    • Jyotsna Verma's avatar
      c61e350a
    • Tom Stellard's avatar
      R600/SI: Add processor type for Hainan asic · 1e21b530
      Tom Stellard authored
      
      
      Patch by: Alex Deucher
      
      Reviewed-by: default avatarTom Stellard <thomas.stellard@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      
      NOTE: This is a candidate for the 3.3 branch.
      llvm-svn: 181792
      1e21b530
    • Richard Sandiford's avatar
      [SystemZ] Add disassembler support · eb9af294
      Richard Sandiford authored
      llvm-svn: 181777
      eb9af294
    • Richard Sandiford's avatar
      [SystemZ] Rework handling of constant PC-relative operands · 1fb5883d
      Richard Sandiford authored
      The GNU assembler treats things like:
      
              brasl   %r14, 100
      
      in the same way as:
      
              brasl   %r14, .+100
      
      rather than as a branch to absolute address 100.  We implemented this in
      LLVM by creating an immediate operand rather than the usual expr operand,
      and by handling immediate operands specially in the code emitter.
      This was undesirable for (at least) three reasons:
      
      - the specialness of immediate operands was exposed to the backend MC code,
        rather than being limited to the assembler parser.
      
      - in disassembly, an immediate operand really is an absolute address.
        (Note that this means reassembling printed disassembly can't recreate
        the original code.)
      
      - it would interfere with any assembly manipulation that we might
        try in future.  E.g. operations like branch shortening can change
        the relative position of instructions, but any code that updates
        sym+offset addresses wouldn't update an immediate "100" operand
        in the same way as an explicit ".+100" operand.
      
      This patch changes the implementation so that the assembler creates
      a "." label for immediate PC-relative operands, so that the operand
      to the MCInst is always the absolute address.  The patch also adds
      some error checking of the offset.
      
      llvm-svn: 181773
      1fb5883d
    • Richard Sandiford's avatar
      [SystemZ] Remove bogus isAsmParserOnly · 6a808f98
      Richard Sandiford authored
      Marking instructions as isAsmParserOnly stops them from being disassembled.
      However, in cases where separate asm and codegen versions exist, we actually
      want to disassemble to the asm ones.
      
      No functional change intended.
      
      llvm-svn: 181772
      6a808f98
    • Richard Sandiford's avatar
      [SystemZ] Match operands to fields by name rather than by order · 7d37cd26
      Richard Sandiford authored
      The SystemZ port currently relies on the order of the instruction operands
      matching the order of the instruction field lists.  This isn't desirable
      for disassembly, where the two are matched only by name.  E.g. the R1 and R2
      fields of an RR instruction should have corresponding R1 and R2 operands.
      
      The main complication is that addresses are compound operands,
      and as far as I know there is no mechanism to allow individual
      suboperands to be selected by name in "let Inst{...} = ..." assignments.
      Luckily it doesn't really matter though.  The SystemZ instruction
      encoding groups all address fields together in a predictable order,
      so it's just as valid to see the entire compound address operand as
      a single field.  That's the approach taken in this patch.
      
      Matching by name in turn means that the operands to COPY SIGN and
      CONVERT TO FIXED instructions can be given in natural order.
      (It was easier to do this at the same time as the rename,
      since otherwise the intermediate step was too confusing.)
      
      No functional change intended.
      
      llvm-svn: 181771
      7d37cd26
    • Richard Sandiford's avatar
      [SystemZ] Match operands to fields by name rather than by order · d454ec0c
      Richard Sandiford authored
      The SystemZ port currently relies on the order of the instruction operands
      matching the order of the instruction field lists.  This isn't desirable
      for disassembly, where the two are matched only by name.  E.g. the R1 and R2
      fields of an RR instruction should have corresponding R1 and R2 operands.
      
      The main complication is that addresses are compound operands,
      and as far as I know there is no mechanism to allow individual
      suboperands to be selected by name in "let Inst{...} = ..." assignments.
      Luckily it doesn't really matter though.  The SystemZ instruction
      encoding groups all address fields together in a predictable order,
      so it's just as valid to see the entire compound address operand as
      a single field.  That's the approach taken in this patch.
      
      Matching by name in turn means that the operands to COPY SIGN and
      CONVERT TO FIXED instructions can be given in natural order.
      (It was easier to do this at the same time as the rename,
      since otherwise the intermediate step was too confusing.)
      
      No functional change intended.
      
      llvm-svn: 181769
      d454ec0c
    • Reed Kotler's avatar
      Fix typo. · 821e86f0
      Reed Kotler authored
      llvm-svn: 181759
      821e86f0
    • Reed Kotler's avatar
      Removed an unnamed namespace and forgot to make two of the functions inside · cad47f02
      Reed Kotler authored
      "static".
      
      llvm-svn: 181754
      cad47f02
    • Reed Kotler's avatar
      This is the first of three patches which creates stubs used for · 2c4657d9
      Reed Kotler authored
      Mips16/32 floating point interoperability.
      
      When Mips16 code calls external functions that would normally have some
      of its parameters or return values passed in floating point registers,
      it needs (Mips32) helper functions to do this because while in Mips16 mode
      there is no ability to access the floating point registers.
      
      In Pic mode, this is done with a set of predefined functions in libc.
      This case is already handled in llvm for Mips16.
      
      In static relocation mode, for efficiency reasons, the compiler generates
      stubs that the linker will use if it turns out that the external function
      is a Mips32 function. (If it's Mips16, then it does not need the helper
      stubs).
      
      These stubs are identically named and the linker knows about these tricks
      and will not create multiple copies and will delete them if they are not
      needed.
      
      llvm-svn: 181753
      2c4657d9
  2. May 13, 2013
  3. May 11, 2013
    • Rafael Espindola's avatar
      Change getFrameMoves to return a const reference. · 1b09836b
      Rafael Espindola authored
      To add a frame now there is a dedicated addFrameMove which also takes
      care of constructing the move itself.
      
      llvm-svn: 181657
      1b09836b
    • Reed Kotler's avatar
      Checkin in of first of several patches to finish implementation of · 783c7944
      Reed Kotler authored
      mips16/mips32 floating point interoperability. 
      
      This patch fixes returns from mips16 functions so that if the function
      was in fact called by a mips32 hard float routine, then values
      that would have been returned in floating point registers are so returned.
      
      Mips16 mode has no floating point instructions so there is no way to
      load values into floating point registers.
      
      This is needed when returning float, double, single complex, double complex
      in the Mips ABI.
      
      Helper functions in libc for mips16 are available to do this.
      
      For efficiency purposes, these helper functions have a different calling
      convention from normal Mips calls.
      
      Registers v0,v1,a0,a1 are used to pass parameters instead of
      a0,a1,a2,a3.
      
      This is because v0,v1,a0,a1 are the natural registers used to return
      floating point values in soft float. These values can then be moved
      to the appropriate floating point registers with no extra cost.
      
      The only register that is modified is ra in this call.
      
      The helper functions make sure that the return values are in the floating
      point registers that they would be in if soft float was not in effect
      (which it is for mips16, though the soft float is implemented using a mips32
      library that uses hard float).
       
      
      llvm-svn: 181641
      783c7944
  4. May 10, 2013
Loading