2005-03-17 19:17:03 +01:00
|
|
|
//===-- IA64.td - Target definition file for Intel IA64 -------------------===//
|
|
|
|
//
|
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
|
|
|
// This file was developed by Duraid Madina and is distributed under the
|
|
|
|
// University of Illinois Open Source License. See LICENSE.TXT for details.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// This is a target description file for the Intel IA64 architecture,
|
|
|
|
// also known variously as ia64, IA-64, IPF, "the Itanium architecture" etc.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
// Get the target-independent interfaces which we are implementing...
|
|
|
|
//
|
|
|
|
include "../Target.td"
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Register File Description
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
include "IA64RegisterInfo.td"
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Instruction Descriptions
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
include "IA64InstrInfo.td"
|
|
|
|
|
|
|
|
def IA64InstrInfo : InstrInfo {
|
|
|
|
let PHIInst = PHI;
|
|
|
|
}
|
|
|
|
|
|
|
|
def IA64 : Target {
|
|
|
|
// The following registers are always saved across calls:
|
|
|
|
let CalleeSavedRegisters =
|
|
|
|
|
|
|
|
//'preserved' GRs:
|
|
|
|
|
|
|
|
[r4, r5, r6, r7,
|
|
|
|
|
|
|
|
//'special' GRs:
|
|
|
|
|
2005-04-06 08:18:36 +02:00
|
|
|
// r1, // global data pointer (GP) - XXX NOT callee saved, we do it ourselves
|
|
|
|
// r12, // memory stack pointer (SP)- XXX NOT callee saved, we do it ourselves
|
2005-03-17 19:17:03 +01:00
|
|
|
// **** r13 (thread pointer) we do not touch, ever. it's not here. ****//
|
|
|
|
//r15, // our frame pointer (FP)
|
|
|
|
|
|
|
|
//'stacked' GRs the RSE takes care of, we don't worry about
|
|
|
|
/* We don't want PEI::calculateCallerSavedRegisters to worry about them,
|
|
|
|
since the RSE takes care of them (and we determinethe appropriate
|
|
|
|
'alloc' instructions and save/restore ar.pfs ourselves, in instruction
|
|
|
|
selection)
|
|
|
|
|
|
|
|
**************************************************************************
|
|
|
|
* 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, r75, r76, r77, r78, r79, r80, r81, r82, r83,
|
|
|
|
* r84, r85, r86, r87, r88, r89, r90, r91, r92, r93, r94, r95,
|
|
|
|
* r96, r97, r98, r99, r100, r101, r102, r103, r104, r105, r106, r107,
|
|
|
|
* r108, r109, r110, r111, r112, r113, r114, r115, r116, r117, r118, r119,
|
|
|
|
* r120, r121, r122, r123, r124, r125, r126, r127,
|
|
|
|
**************************************************************************
|
|
|
|
*/
|
|
|
|
//'preserved' FP regs:
|
|
|
|
|
|
|
|
F2,F3,F4,F5,
|
|
|
|
F16,F17,F18,F19,F20,F21,F22,F23,
|
|
|
|
F24,F25,F26,F27,F28,F29,F30,F31,
|
|
|
|
|
|
|
|
//'preserved' predicate regs:
|
|
|
|
|
|
|
|
p1, p2, p3, p4, p5,
|
|
|
|
p16, p17, p18, p19, p20, p21, p22, p23,
|
|
|
|
p24, p25, p26, p27, p28, p29, p30, p31,
|
|
|
|
p32, p33, p34, p35, p36, p37, p38, p39,
|
|
|
|
p40, p41, p42, p43, p44, p45, p46, p47,
|
|
|
|
p48, p49, p50, p51, p52, p53, p54, p55,
|
|
|
|
p56, p57, p58, p59, p60, p61, p62, p63];
|
|
|
|
|
|
|
|
// We don't go anywhere near the LP32 variant of IA64 as
|
|
|
|
// sometimes seen in (for example) HP-UX
|
|
|
|
let PointerType = i64;
|
|
|
|
|
|
|
|
// Our instruction set
|
|
|
|
let InstructionSet = IA64InstrInfo;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|