1/* $NetBSD$ */ 2 3//++ 4// Copyright (c) 1996-99 Intel Corp. 5// 6// 7// Module Name: 8// 9// palproc.s 10// 11// Abstract: 12// 13// Contains an implementation for making PAL PROC calls on 14// IA-64 architecture. 15// 16// 17// 18// Revision History: 19// 20//-- 21 22 .file "palproc.s" 23 24#include "palproc.h" 25 26 27//----------------------------------------------------------------------------- 28//++ 29// MakeStaticPALCall 30// 31// This routine is called whenever an architected static calling convention 32// based PAL call is to be made. This call does use RSE actually, but our policy 33// in making static PAL calls before memory is available is to make sure that 34// we do not nest too deep and allocate beyond 96 banked registers. In other 35// words we carefully code calls and control flow before memory is available. 36// 37// Arguments : All parameters set up to do static PAL call. 38// 39// On Entry : 40// 41// Return Value: 42// 43// As per static calling conventions. 44// 45//-- 46//--------------------------------------------------------------------------- 47PROCEDURE_ENTRY(MakeStaticPALCall) 48 49 NESTED_SETUP (5,8,0,0) 50 mov loc3 = b5 51 mov loc4 = r2 52 mov loc7 = r1;; 53 54 movl loc6 = PAL_MC_CLEAR_LOG 55 mov r2 = psr;; 56 mov loc5 = r2 57 58 cmp.eq p6,p7 = r28,loc6;; 59 (p7)movl loc6 = PAL_MC_DYNAMIC_STATE;; 60 (p7)cmp.eq p6,p7 = r28,loc6;; 61 62 (p7)movl loc6 = PAL_MC_ERROR_INFO;; 63 (p7)cmp.eq p6,p7 = r28,loc6;; 64 65 (p7)movl loc6 = PAL_MC_RESUME;; 66 (p7)cmp.eq p6,p7 = r28,loc6 67 68 mov loc6 = 0x1;; 69 (p7)dep r2 = loc6,r2,13,1;; // psr.ic = 1 70 71// p6 will be true, if it is one of the MCHK calls. There has been lots of debate 72// on psr.ic for these values. For now, do not do any thing to psr.ic 73 74// (p6)dep r2 = r0,r2,13,1;; // psr.ic = 0 75 dep r2 = r0,r2,14,1;; // psr.i = 0 76 77 mov psr.l = r2 78 srlz.d;; // Needs data serailization. 79 srlz.i;; // Needs instruction serailization. 80 81StaticGetPALLocalIP: 82 mov loc2 = ip;; 83 add loc2 = StaticComeBackFromPALCall - StaticGetPALLocalIP,loc2;; 84 mov b0 = loc2 // return address after Pal call 85 mov r28 = in1 // get the input parameters to PAL call 86 mov r29 = in2 87 mov r30 = in3;; 88 mov r31 = in4 89 mov b5 = in0;; // get the PalProcEntrypt from input 90 br.sptk b5 // Take the plunge. 91 92StaticComeBackFromPALCall: 93 94 mov psr.l = loc5;; 95 srlz.d;; // Needs data serailization. 96 srlz.i;; // Needs instruction serailization. 97 98 mov b5 = loc3 99 mov r2 = loc4 100 mov r1 = loc7 101 102 NESTED_RETURN 103 104PROCEDURE_EXIT(MakeStaticPALCall) 105 106 107//----------------------------------------------------------------------------- 108//++ 109// MakeStackedPALCall 110// 111// This routine is called whenever an architected stacked calling convention 112// based PAL call is to be made. This call is made after memory is available. 113// Although stacked calls could be made directly from 'C', there is a PAL 114// requirement which forces the index to be in GR28 and hence this stub is 115// needed 116// 117// Arguments : All parameters set up to do stacted PAL call. 118// 119// On Entry : 120// in0: PAL_PROC entrypoint 121// in1-in4 : PAL_PROC arguments 122// 123// Return Value: 124// 125// As per stacked calling conventions. 126// 127//-- 128//--------------------------------------------------------------------------- 129PROCEDURE_ENTRY(MakeStackedPALCall) 130 131 NESTED_SETUP (5,8,4,0) 132 mov loc3 = b5 133 mov loc4 = r2 134 mov loc7 = r1 135 mov r2 = psr;; 136 mov loc5 = r2;; 137 dep r2 = r0,r2,14,1;; // psr.i = 0 138 mov psr.l = r2 139 srlz.d;; // Needs data serailization. 140 srlz.i;; // Needs instruction serailization. 141 142StackedGetPALLocalIP: 143 mov r28 = in1 // get the input parameters to PAL call 144 mov out0 = in1 145 mov out1 = in2;; 146 mov out2 = in3 147 mov out3 = in4 148 mov b5 = in0;; // get the PalProcEntrypt from input 149 br.call.dpnt b0=b5;; // Take the plunge. 150 151StackedComeBackFromPALCall: 152 153 mov psr.l = loc5;; 154 srlz.d;; // Needs data serailization. 155 srlz.i;; // Needs instruction serailization. 156 mov b5 = loc3 157 mov r2 = loc4 158 mov r1 = loc7 159 160 NESTED_RETURN 161 162PROCEDURE_EXIT(MakeStackedPALCall) 163 164