Date: Sat, 10 May 2003 23:49:41 -0700 (PDT) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 30939 for review Message-ID: <200305110649.h4B6nfIP047598@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=30939 Change 30939 by marcel@marcel_nfs on 2003/05/10 23:48:58 Add support for swithing to ia32. We need to restore the scratch registers as they hold the ia32 state and jump to userland not with a regular branch, but with br.ia. That's about it here... Affected files ... .. //depot/projects/ia64_epc/sys/ia64/ia64/syscall.s#18 edit Differences ... ==== //depot/projects/ia64_epc/sys/ia64/ia64/syscall.s#18 (text+ko) ==== @@ -92,6 +92,13 @@ br.sptk b6 ;; } +gw_ret_ia32: + mov ar.rnat=r0 + mov ar.rsc=0xc + mov ar.pfs=r0 + ;; + br.ia.sptk b6 + ;; ENTRY(break_sigtramp, 0) { .mib @@ -432,10 +439,10 @@ mov ar.pfs=r20 ;; } -{ .mmb +{ .mmi ld8 gp=[r15],16 // gp ld8 r27=[r14],16 // ndirty - nop 0 + tbit.z p14,p15=r26,34 // p14=ia64, p15=ia32 ;; } { .mmi @@ -450,10 +457,10 @@ nop 0 ;; } -{ .mmi - ld8 r9=[r14] // r9 - ld8 r10=[r15] // r10 - dep r26=-1,r26,19,1 // Set psr.dfh +{ .mmb + ld8 r9=[r14],40 // r9 + ld8 r10=[r15],40 // r10 +(p15) br.spnt epc_syscall_setup_ia32 ;; } { .mmi @@ -487,4 +494,64 @@ br.ret.sptk b7 ;; } +epc_syscall_setup_ia32: +{ .mmi + loadrs + mov ar.k7=r31 + mov sp=r16 + ;; +} +{ .mmi + mov r30=ar.bspstore + ;; + mov ar.bspstore=r21 + dep r30=0,r30,0,9 + ;; +} +{ .mmi + mov ar.k6=r30 + mov ar.unat=r17 + mov r11=r26 + ;; +} + + ld8 r16=[r14],16 + ld8 r17=[r15],16 + ;; + ld8 r18=[r14],16 + ld8 r19=[r15],16 + ;; + ld8 r20=[r14],16 + ld8 r21=[r15],16 + ;; + ld8 r22=[r14],16 + ld8 r23=[r15],16 + ;; + ld8 r24=[r14],16 + ld8 r25=[r15],16 + ;; + ld8 r26=[r14],16 + ld8 r27=[r15],16 + ;; + ld8 r28=[r14],16 + ld8 r29=[r15],16 + ;; + ld8 r30=[r14],40 + ld8 r31=[r15],40 + ;; + ld8 r2=[r14],16 + ld8 r3=[r15],8 + ;; + mov ar.csd=r2 + mov ar.ssd=r3 + ;; + mov r2=ar.k5 + mov psr.l=r11 + ;; + srlz.d + add r2=gw_ret_ia32-ia64_gateway_page,r2 + ;; + mov b7=r2 + br.ret.sptk b7 + ;; END(epc_syscall)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200305110649.h4B6nfIP047598>