Intel ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS MANUAL VOLUME 3 REV 2.3 Manual page 40

Architecture software developer's manual revision 2.3
Hide thumbs Also See for ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS MANUAL VOLUME 3 REV 2.3:
Table of Contents

Advertisement

system is required to provide an Illegal Operation fault handler which emulates taken
and not-taken long branches. Presence of this instruction is indicated by a 1 in the lb bit
of CPUID register 4. See
page
1:34.
Operation:
tmp_IP = IP + (imm
if (!followed_by_stop())
undefined_behavior();
if (!instruction_implemented(BRL))
illegal_operation_fault();
switch (btype) {
case 'cond':
tmp_taken = PR[qp];
break;
case 'call':
tmp_taken = PR[qp];
if (tmp_taken) {
}
break;
}
if (tmp_taken) {
taken_branch = 1;
IP = tmp_IP;
if (!impl_uia_fault_supported() &&
((PSR.it && unimplemented_virtual_address(tmp_IP, PSR.vm))
|| (!PSR.it && unimplemented_physical_address(tmp_IP))))
unimplemented_instruction_address_trap(0,tmp_IP);
if (PSR.tb)
taken_branch_trap();
}
Illegal Operation fault
Interruptions:
Unimplemented Instruction Address trap
Volume 3: Instruction Reference
Section 3.1.11, "Processor Identification Registers" on
<< 4);
60
BR[b
] = IP + 16;
1
AR[PFS].pfm = CFM;
AR[PFS].pec = AR[EC];
AR[PFS].ppl = PSR.cpl;
alat_frame_update(CFM.sol, 0);
rse_preserve_frame(CFM.sol);
CFM.sof -= CFM.sol;
CFM.sol = 0;
CFM.sor = 0;
CFM.rrb.gr = 0;
CFM.rrb.fr = 0;
CFM.rrb.pr = 0;
// determine branch target
// simple conditional branch
// call saves a return link
// ... and saves the stack frame
// new frame size is size of outs
// set the new value for IP
Taken Branch trap
brl
3:31

Advertisement

Table of Contents
loading

This manual is also suitable for:

Itanium 9150m

Table of Contents