mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
8b6f5df4ae
The "half vectors" are now widened to full size by the legalizer. The only exception is in parameter passing, where half vectors are expanded. This causes changes to some dejagnu tests. llvm-svn: 111360
58 lines
2.8 KiB
TableGen
58 lines
2.8 KiB
TableGen
//===- SPUCallingConv.td - Calling Conventions for CellSPU -*- tablegen -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This describes the calling conventions for the STI Cell SPU architecture.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
/// CCIfSubtarget - Match if the current subtarget has a feature F.
|
|
class CCIfSubtarget<string F, CCAction A>
|
|
: CCIf<!strconcat("State.getTarget().getSubtarget<PPCSubtarget>().", F), A>;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Return Value Calling Convention
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Return-value convention for Cell SPU: return value to be passed in reg 3-74
|
|
def RetCC_SPU : CallingConv<[
|
|
CCIfType<[i8,i16,i32,i64,i128,f32,f64,v16i8,v8i16,v4i32,v2i64,v4f32,v2f64],
|
|
CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
|
|
R12, R13, R14, R15, R16, R17, R18, R19, R20,
|
|
R21, R22, R23, R24, R25, R26, R27, R28, R29,
|
|
R30, R31, R32, R33, R34, R35, R36, R37, R38,
|
|
R39, R40, R41, R42, R43, R44, R45, R46, R47,
|
|
R48, R49, R50, R51, R52, R53, R54, R55, R56,
|
|
R57, R58, R59, R60, R61, R62, R63, R64, R65,
|
|
R66, R67, R68, R69, R70, R71, R72, R73, R74]>>
|
|
]>;
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// CellSPU Argument Calling Conventions
|
|
//===----------------------------------------------------------------------===//
|
|
def CCC_SPU : CallingConv<[
|
|
CCIfType<[i8, i16, i32, i64, i128, f32, f64,
|
|
v16i8, v8i16, v4i32, v4f32, v2i64, v2f64],
|
|
CCAssignToReg<[R3, R4, R5, R6, R7, R8, R9, R10, R11,
|
|
R12, R13, R14, R15, R16, R17, R18, R19, R20,
|
|
R21, R22, R23, R24, R25, R26, R27, R28, R29,
|
|
R30, R31, R32, R33, R34, R35, R36, R37, R38,
|
|
R39, R40, R41, R42, R43, R44, R45, R46, R47,
|
|
R48, R49, R50, R51, R52, R53, R54, R55, R56,
|
|
R57, R58, R59, R60, R61, R62, R63, R64, R65,
|
|
R66, R67, R68, R69, R70, R71, R72, R73, R74]>>,
|
|
// Integer/FP values get stored in stack slots that are 8 bytes in size and
|
|
// 8-byte aligned if there are no more registers to hold them.
|
|
CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
|
|
|
|
// Vectors get 16-byte stack slots that are 16-byte aligned.
|
|
CCIfType<[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64],
|
|
CCAssignToStack<16, 16>>
|
|
]>;
|