Prefer I-units and M-units for nop instructions. This works around

McKinley flaws. It also avoids using the F-unit in the kernel for
no reason.
This commit is contained in:
Marcel Moolenaar 2010-02-22 01:23:41 +00:00
parent 6ed45c0269
commit 93e184c12e
5 changed files with 58 additions and 58 deletions

View File

@ -286,7 +286,7 @@ ENTRY(swapctx, 2)
(p15) br.ret.sptk rp
;;
}
{ .mfb
{ .mib
mov r32=r33
nop 0
br.sptk restorectx
@ -338,10 +338,10 @@ ENTRY(save_callee_saved, 1)
mov r17=b5
;;
}
{ .mfi
{ .mii
st8 [r14]=r17,16 // b5
nop 0
mov r16=ar.lc
nop 0
;;
}
{ .mmb
@ -363,13 +363,13 @@ ENTRY(restore_callee_saved, 1)
add r31=-8,r32
;;
}
{ .mmb
{ .mmi
ld8.fill r4=[r31],16 // r4
ld8.fill r5=[r32],16 // r5
nop 0
;;
}
{ .mmb
{ .mmi
ld8.fill r6=[r31],16 // r6
ld8.fill r7=[r32],16 // r7
nop 0

View File

@ -89,10 +89,10 @@ xhead: data8 xtrace
addl r29=1024*5*8,r0 ;; \
(p15) sub r27=r28,r29 ;; \
} ; \
{ .mib ; \
{ .mmi ; \
st8 [r28]=r27 ; \
mov pr=r25,0x1ffff ; \
nop 0 ;; \
nop 0 ; \
mov pr=r25,0x1ffff ;; \
}
#else
@ -148,10 +148,10 @@ ENTRY_NOPROFILE(exception_save, 0)
add r31=8,r30
;;
}
{ .mib
{ .mmi
mov r22=cr.iip
addl r29=NTLBRT_SAVE,r0 // 22-bit restart token.
nop 0
addl r29=NTLBRT_SAVE,r0 // 22-bit restart token.
;;
}
@ -235,7 +235,7 @@ exception_save_restart:
nop 0
;;
}
{ .mmb
{ .mmi
(p13) mov ar.rnat=r19
mov r18=ar.bsp
nop 0
@ -248,7 +248,7 @@ exception_save_restart:
;;
}
// r19=ifs, r22=iip
{ .mmb
{ .mmi
st8 [r31]=r18,16 // ndirty
st8 [r30]=r19,16 // cfm
nop 0
@ -260,7 +260,7 @@ exception_save_restart:
add r29=16,r30
;;
}
{ .mmb
{ .mmi
st8 [r30]=r17,24 // ifa
st8 [r31]=r18,24 // isr
nop 0
@ -407,7 +407,7 @@ exception_save_restart:
movl gp=__gp
;;
}
{ .mfb
{ .mib
srlz.d
nop 0
br.sptk b7
@ -567,7 +567,7 @@ ENTRY_NOPROFILE(exception_restore, 0)
cmp.le p14,p15=5,r28
;;
}
{ .mmb
{ .mmi
ld8 r25=[r30] // cfm
ld8 r19=[r31] // ip
nop 0
@ -606,13 +606,13 @@ exception_restore_restart:
dep r31=0,r31,0,13 // 8KB aligned
;;
}
{ .mmb
{ .mmi
mov ar.k6=r31
mov ar.rnat=r21
nop 0
;;
}
{ .mmb
{ .mmi
mov ar.unat=r17
mov cr.iip=r19
nop 0
@ -656,7 +656,7 @@ END(exception_restore)
add out1=16,sp ; \
br.call.sptk rp=_func_ ;; \
} ; \
{ .mfb ; \
{ .mib ; \
nop 0 ; \
nop 0 ; \
br.sptk exception_restore ;; \
@ -1021,10 +1021,10 @@ IVT_ENTRY(Data_Nested_TLB, 0x1400)
movl r27=kstack
;;
}
{ .mib
{ .mmi
mov r28=sp
addl r27=KSTACK_PAGES*PAGE_SIZE-16,r0
nop 0
addl r27=KSTACK_PAGES*PAGE_SIZE-16,r0
;;
}
{ .mmi
@ -1287,13 +1287,13 @@ IVT_ENTRY(Break_Instruction, 0x2c00)
(p11) srlz.d
add out1=16,sp
}
{ .mfb
{ .mib
nop 0
nop 0
br.call.sptk rp=trap
;;
}
{ .mfb
{ .mib
nop 0
nop 0
br.sptk exception_restore
@ -1308,19 +1308,19 @@ IVT_ENTRY(External_Interrupt, 0x3000)
br.sptk exception_save
;;
}
{ .mfb
{ .mmi
alloc r15=ar.pfs,0,0,1,0
nop 0
nop 0
;;
}
{ .mfb
{ .mib
add out0=16,sp
nop 0
br.call.sptk rp=interrupt
;;
}
{ .mfb
{ .mib
nop 0
nop 0
br.sptk exception_restore

View File

@ -98,13 +98,13 @@ ENTRY_NOPROFILE(__start, 1)
mov out0=r0 // we are linked at the right address
;; // we just need to process fptrs
}
{ .bbb
{ .mib
nop 0
nop 0
br.call.sptk.many rp=_reloc
;;
}
{ .bbb
{ .mib
nop 0
nop 0
br.call.sptk.many rp=ia64_init
@ -112,21 +112,21 @@ ENTRY_NOPROFILE(__start, 1)
}
// We have the new bspstore in r8 and the new sp in r9.
// Switch onto the new stack and call mi_startup().
{
{ .mmi
mov ar.rsc = 0
;;
mov ar.bspstore = r8
mov sp = r9
;;
}
{
{ .mmi
loadrs
;;
mov ar.rsc = 3
nop 0
;;
}
{
{ .mib
nop 0
nop 0
br.call.sptk.many rp=mi_startup
@ -163,7 +163,7 @@ ENTRY(fork_trampoline, 0)
ld8 out1=[r16]
nop 0
}
{ .mfb
{ .mib
add out2=16,sp
nop 0
br.call.sptk rp=fork_exit
@ -174,7 +174,7 @@ ENTRY(fork_trampoline, 0)
.global enter_userland
.type enter_userland, @function
enter_userland:
{ .mfb
{ .mib
nop 0
nop 0
br.sptk epc_syscall_return
@ -282,7 +282,7 @@ ENTRY_NOPROFILE(os_boot_rendez,0)
add sp = r18, r16
;;
}
{ .mfb
{ .mib
mov ar.rsc = 3
nop 0
br.call.sptk.few rp = ia64_ap_startup
@ -290,7 +290,7 @@ ENTRY_NOPROFILE(os_boot_rendez,0)
}
/* NOT REACHED */
9:
{ .mfb
{ .mib
nop 0
nop 0
br.sptk 9b

View File

@ -227,14 +227,14 @@ ENTRY(casuword, 3)
nop 0
;;
}
{ .mfb
{ .mib
st8.rel [r15]=r0 // Clear onfault
nop 0
br.ret.sptk rp
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -277,14 +277,14 @@ ENTRY(casuword32, 3)
nop 0
;;
}
{ .mfb
{ .mib
st8.rel [r15]=r0 // Clear onfault
nop 0
br.ret.sptk rp
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -338,7 +338,7 @@ ENTRY(subyte, 2)
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -384,7 +384,7 @@ ENTRY(suword16, 2)
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -430,7 +430,7 @@ ENTRY(suword32, 2)
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -477,7 +477,7 @@ XENTRY(suword)
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -531,7 +531,7 @@ ENTRY(fubyte, 1)
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -577,7 +577,7 @@ ENTRY(fuword16, 2)
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -623,7 +623,7 @@ ENTRY(fuword32, 2)
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -670,7 +670,7 @@ XENTRY(fuword)
;;
}
1:
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -684,7 +684,7 @@ END(fuword64)
*/
ENTRY(fuswintr, 1)
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp
@ -693,7 +693,7 @@ ENTRY(fuswintr, 1)
END(fuswintr)
ENTRY(suswintr, 0)
{ .mfb
{ .mib
add ret0=-1,r0
nop 0
br.ret.sptk rp

View File

@ -102,13 +102,13 @@ gw_ret:
;;
}
gw_ret_ia32:
{ .mfb
{ .mmi
flushrs
nop 0
nop 0
;;
}
{ .mfb
{ .mib
nop 0
nop 0
br.ia.sptk b6
@ -193,7 +193,7 @@ ENTRY_NOPROFILE(epc_sigtramp, 0)
mov b7=r16
;;
}
{ .mmb
{ .mmi
alloc r14=ar.pfs, 0, 0, 3, 0
mov ar.rsc=15
nop 0
@ -204,7 +204,7 @@ ENTRY_NOPROFILE(epc_sigtramp, 0)
mov out0=r8
mov out1=r9
}
{ .mfb
{ .mib
add out2=16,sp
nop 0
br.call.sptk rp=b7
@ -257,7 +257,7 @@ ENTRY_NOPROFILE(epc_syscall, 8)
add r31=8,r30
;;
}
{ .mib
{ .mii
mov r22=ar.fpsr
sub r29=r14,r30
nop 0
@ -380,7 +380,7 @@ ENTRY_NOPROFILE(epc_syscall, 8)
}
.global epc_syscall_return
epc_syscall_return:
{ .mfb
{ .mib
add out0=16,sp
nop 0
br.call.sptk rp=do_ast
@ -392,7 +392,7 @@ epc_syscall_return:
(p15) br.spnt 1b // restart syscall
;;
}
{ .mfb
{ .mmi
ld8 r14=[r14] // tf_flags
nop 0
nop 0
@ -422,7 +422,7 @@ epc_syscall_return:
add r31=r31,sp
;;
}
{ .mmb
{ .mmi
ld8 r19=[r15],16 // pr
ld8 r20=[r14],16 // pfs (syscall caller)
nop 0
@ -434,7 +434,7 @@ epc_syscall_return:
mov pr=r19,0x1fffe
;;
}
{ .mmb
{ .mmi
ld8 r23=[r15],16 // tp
ld8 r24=[r14],16 // rsc
nop 0
@ -488,7 +488,7 @@ epc_syscall_return:
dep r30=0,r30,0,13 // 8KB aligned.
;;
}
{ .mib
{ .mii
mov ar.k6=r30
mov r13=r23
nop 0