18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file IA64syscallstub.h 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Assembly language file macros 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Bob Montgomery 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* $Id: IA64syscallstub.h,v 1.3 2008/01/21 21:35:17 movement Exp $ */ 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define SYSCALLSTUB_POST(name) \ 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .sbss; \ 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .align 8; \ 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .type .post_saverp_##name, @object; \ 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .size .post_saverp_##name, 8; \ 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.post_saverp_##name: \ 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .skip 8; \ 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .text; \ 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .global post_stub_##name; \ 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .align 32; \ 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .proc post_stub_##name; \ 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpost_stub_##name: \ 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.L1_##name: \ 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r3=ip; \ 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r16=.L2_##name - .L1_##name, r3; \ 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov b6=r16; \ 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.ret.sptk.many b6; \ 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.L2_##name: \ 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r3=ip; \ 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r15=gp; /* save kgp */ \ 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r17=rp; \ 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r14=.post_fptr_##name - .L2_##name, r3; \ 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd adds r14=8, r14; \ 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 gp=[r14]; \ 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r14=@ltoff(old_sys_##name), gp; \ 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r16=@gprel(.post_saverp_##name), gp; \ 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd st8 [r16]=r17; /* save krp */ \ 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov gp=r15; /* restore kgp */ \ 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov b6 = r14; \ 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.call.sptk.many b0=b6; \ 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.L3_##name: \ 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r3=ip; \ 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r15=gp; /* save kgp */ \ 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r14=.post_fptr_##name - .L3_##name, r3; \ 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd adds r14=8, r14; \ 718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 gp=[r14]; \ 738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.call.sptk.many b0=post_call_stub_##name; \ 748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r16=@gprel(.post_saverp_##name), gp; \ 768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r16]; \ 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov b0 = r14; \ 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov gp = r15; /* preserved */ \ 818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.cond.sptk.many b0; \ 828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .align 16; \ 838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.post_fptr_##name: \ 848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd data8 @fptr(post_sys_##name); \ 858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .endp post_stub_##name; \ 868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .align 16; \ 878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .global post_call_stub_##name; \ 888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .proc post_call_stub_##name; \ 898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpost_call_stub_##name: \ 908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd alloc loc1=ar.pfs, 8, 6, 8, 0; \ 918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc0=rp; \ 928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc2=r15; /* preserve it */ \ 938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc3=r8; \ 948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc4=r10; \ 958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc5=gp; \ 968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out0 = r8; /* old rv */ \ 978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out1 = in0; \ 988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out2 = in1; \ 998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out3 = in2; \ 1008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out4 = in3; \ 1018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out5 = in4; \ 1028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out6 = in5; \ 1038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out7 = in6; \ 1048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.call.sptk.many rp = post_sys_##name; \ 1068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov ar.pfs = loc1; \ 1088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov rp = loc0; \ 1098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r15=loc2; \ 1108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r8=loc3; \ 1118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r10=loc4; \ 1128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov gp=loc5; \ 1138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.ret.sptk.few rp; \ 1148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .endp post_call_stub_##name; 1158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define SYSCALLSTUB_PRE(name) \ 1178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .text; \ 1188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .global pre_stub_##name; \ 1198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .align 32; \ 1208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .proc pre_stub_##name; \ 1218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpre_stub_##name: \ 1228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.L4_##name: \ 1238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r3=ip; \ 1248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r17=.L5_##name - .L4_##name, r3; \ 1268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov b6=r17; \ 1288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.ret.sptk.many b6; \ 1308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.L5_##name: \ 1328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r3=ip; \ 1338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r15=gp; /* save kgp */ \ 1348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r16=rp; /* save krp */ \ 1358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r14=.pre_fptr_##name - .L5_##name, r3; \ 1378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 1398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd adds r14=8, r14; \ 1418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 gp=[r14]; \ 1438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.call.sptk.many b0=pre_call_stub_##name; \ 1458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /* kernel gp still in r15 */ \ 1478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /* kernel rp still in r16 */ \ 1488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /* module gp in gp */ \ 1498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd addl r14=@ltoff(old_sys_##name), gp; \ 1518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 1538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 1558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov gp=r15; /* restore kgp */ \ 1568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ld8 r14=[r14]; \ 1588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov rp=r16; /* restore krp */ \ 1598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov b6 = r14; \ 1618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /* use the saved krp */ \ 1638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.call.sptk.many b6=b6; \ 1648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .align 16; \ 1668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd.pre_fptr_##name: \ 1678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd data8 @fptr(pre_sys_##name); \ 1688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .endp pre_stub_##name; \ 1698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .align 16; \ 1708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .global pre_call_stub_##name; \ 1718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .proc pre_call_stub_##name; \ 1728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpre_call_stub_##name: \ 1738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd alloc loc1=ar.pfs, 8, 5, 8, 0; \ 1748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc0=rp; \ 1758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc2=r15; /* preserve it */ \ 1768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc3=r16; /* preserve it */ \ 1778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov loc4=gp; \ 1788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out0 = in0; \ 1798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out1 = in1; \ 1808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out2 = in2; \ 1818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out3 = in3; \ 1828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out4 = in4; \ 1838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out5 = in5; \ 1848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out6 = in6; \ 1858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov out7 = in7; \ 1868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.call.sptk.many rp = pre_sys_##name; \ 1888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ;; \ 1898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov ar.pfs = loc1; \ 1908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov rp = loc0; \ 1918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r15=loc2; \ 1928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov r16=loc3; \ 1938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd mov gp=loc4; \ 1948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd br.ret.sptk.few rp; \ 1958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd .endp pre_call_stub_##name; 1968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 198