Add copy implementations to palcode.
palcode/osfpal.s: Add copypal loop copy implementation.
This commit is contained in:
parent
b582b5058e
commit
f33cf070c7
3 changed files with 10631 additions and 2 deletions
|
@ -3143,7 +3143,7 @@ pal_restore_state:
|
||||||
//
|
//
|
||||||
|
|
||||||
mfpr r31, pt0 // pad last load to icsr write (in case of replay, icsr will be written anyway) //orig
|
mfpr r31, pt0 // pad last load to icsr write (in case of replay, icsr will be written anyway) //orig
|
||||||
mfpr r31, pt0 // " //orig
|
mfpr r31, pt0 // "" //orig
|
||||||
mfpr r0, icsr // Get icsr //orig
|
mfpr r0, icsr // Get icsr //orig
|
||||||
//orig ldah r2, <1@<icsr_v_sde-16>>(r31) // Get a one in SHADOW_ENABLE bit location
|
//orig ldah r2, <1@<icsr_v_sde-16>>(r31) // Get a one in SHADOW_ENABLE bit location
|
||||||
ldah r2, (1<<(ICSR_V_SDE-16))(r31) // Get a one in SHADOW_ENABLE bit location //orig
|
ldah r2, (1<<(ICSR_V_SDE-16))(r31) // Get a one in SHADOW_ENABLE bit location //orig
|
||||||
|
@ -4707,7 +4707,8 @@ CallPal_OpcDecBE:
|
||||||
|
|
||||||
CALL_PAL_UNPRIV(0x00BF)
|
CALL_PAL_UNPRIV(0x00BF)
|
||||||
CallPal_OpcDecBF:
|
CallPal_OpcDecBF:
|
||||||
br r31, osfpal_calpal_opcdec
|
// MODIFIED BY EGH 2/25/04
|
||||||
|
br r31, copypal_impl
|
||||||
|
|
||||||
|
|
||||||
/*======================================================================*/
|
/*======================================================================*/
|
||||||
|
@ -5121,3 +5122,121 @@ hw_rei_update_spe_10_: mfpr r9, pt_pcbb // Kernel mode
|
||||||
br r31, pal_ic_flush // Pal restriction - must flush Icache if changing ICSR<SPE>
|
br r31, pal_ic_flush // Pal restriction - must flush Icache if changing ICSR<SPE>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
copypal_impl:
|
||||||
|
mov r16, r0
|
||||||
|
ble r18, finished #if len <=0 we are finished
|
||||||
|
ldq_u r8, 0(r17)
|
||||||
|
xor r17, r16, r9
|
||||||
|
and r9, 7, r9
|
||||||
|
and r16, 7, r10
|
||||||
|
bne r9, unaligned
|
||||||
|
beq r10, aligned
|
||||||
|
ldq_u r9, 0(r16)
|
||||||
|
addq r18, r10, r18
|
||||||
|
mskqh r8, r17, r8
|
||||||
|
mskql r9, r17, r9
|
||||||
|
bis r8, r9, r8
|
||||||
|
aligned:
|
||||||
|
subq r18, 1, r10
|
||||||
|
bic r10, 7, r10
|
||||||
|
and r18, 7, r18
|
||||||
|
beq r10, aligned_done
|
||||||
|
loop:
|
||||||
|
stq_u r8, 0(r16)
|
||||||
|
ldq_u r8, 8(r17)
|
||||||
|
subq r10, 8, r10
|
||||||
|
lda r16,8(r16)
|
||||||
|
lda r17,8(r17)
|
||||||
|
bne r10, loop
|
||||||
|
aligned_done:
|
||||||
|
bne r18, few_left
|
||||||
|
stq_u r8, 0(r16)
|
||||||
|
br r31, finished
|
||||||
|
few_left:
|
||||||
|
mskql r8, r18, r10
|
||||||
|
ldq_u r9, 0(r16)
|
||||||
|
mskqh r9, r18, r9
|
||||||
|
bis r10, r9, r10
|
||||||
|
stq_u r10, 0(r16)
|
||||||
|
br r31, finished
|
||||||
|
unaligned:
|
||||||
|
addq r17, r18, r25
|
||||||
|
cmpule r18, 8, r9
|
||||||
|
bne r9, unaligned_few_left
|
||||||
|
beq r10, unaligned_dest_aligned
|
||||||
|
and r16, 7, r10
|
||||||
|
subq r31, r10, r10
|
||||||
|
addq r10, 8, r10
|
||||||
|
ldq_u r9, 7(r17)
|
||||||
|
extql r8, r17, r8
|
||||||
|
extqh r9, r17, r9
|
||||||
|
bis r8, r9, r12
|
||||||
|
insql r12, r16, r12
|
||||||
|
ldq_u r13, 0(r16)
|
||||||
|
mskql r13, r16, r13
|
||||||
|
bis r12, r13, r12
|
||||||
|
stq_u r12, 0(r16)
|
||||||
|
addq r16, r10, r16
|
||||||
|
addq r17, r10, r17
|
||||||
|
subq r18, r10, r18
|
||||||
|
ldq_u r8, 0(r17)
|
||||||
|
unaligned_dest_aligned:
|
||||||
|
subq r18, 1, r10
|
||||||
|
bic r10, 7, r10
|
||||||
|
and r18, 7, r18
|
||||||
|
beq r10, unaligned_partial_left
|
||||||
|
unaligned_loop:
|
||||||
|
ldq_u r9, 7(r17)
|
||||||
|
lda r17, 8(r17)
|
||||||
|
extql r8, r17, r12
|
||||||
|
extqh r9, r17, r13
|
||||||
|
subq r10, 8, r10
|
||||||
|
bis r12, r13, r13
|
||||||
|
stq r13, 0(r16)
|
||||||
|
lda r16, 8(r16)
|
||||||
|
beq r10, unaligned_second_partial_left
|
||||||
|
ldq_u r8, 7(r17)
|
||||||
|
lda r17, 8(r17)
|
||||||
|
extql r9, r17, r12
|
||||||
|
extqh r8, r17, r13
|
||||||
|
bis r12, r13, r13
|
||||||
|
subq r10, 8, r10
|
||||||
|
stq r13, 0(r16)
|
||||||
|
lda r16, 8(r16)
|
||||||
|
bne r10, unaligned_loop
|
||||||
|
unaligned_partial_left:
|
||||||
|
mov r8, r9
|
||||||
|
unaligned_second_partial_left:
|
||||||
|
ldq_u r8, -1(r25)
|
||||||
|
extql r9, r17, r9
|
||||||
|
extqh r8, r17, r8
|
||||||
|
bis r8, r9, r8
|
||||||
|
bne r18, few_left
|
||||||
|
stq_u r8, 0(r16)
|
||||||
|
br r31, finished
|
||||||
|
unaligned_few_left:
|
||||||
|
ldq_u r9, -1(r25)
|
||||||
|
extql r8, r17, r8
|
||||||
|
extqh r9, r17, r9
|
||||||
|
bis r8, r9, r8
|
||||||
|
insqh r8, r16, r9
|
||||||
|
insql r8, r16, r8
|
||||||
|
lda r12, -1(r31)
|
||||||
|
mskql r12, r18, r13
|
||||||
|
cmovne r13, r13, r12
|
||||||
|
insqh r12, r16, r13
|
||||||
|
insql r12, r16, r12
|
||||||
|
addq r16, r18, r10
|
||||||
|
ldq_u r14, 0(r16)
|
||||||
|
ldq_u r25, -1(r10)
|
||||||
|
bic r14, r12, r14
|
||||||
|
bic r25, r13, r25
|
||||||
|
and r8, r12, r8
|
||||||
|
and r9, r13, r9
|
||||||
|
bis r8, r14, r8
|
||||||
|
bis r9, r25, r9
|
||||||
|
stq_u r9, -1(r10)
|
||||||
|
stq_u r8, 0(r16)
|
||||||
|
finished:
|
||||||
|
hw_rei
|
||||||
|
|
5257
system/alpha/palcode/osfpal_cache_copy.s
Normal file
5257
system/alpha/palcode/osfpal_cache_copy.s
Normal file
File diff suppressed because it is too large
Load diff
5253
system/alpha/palcode/osfpal_cache_copy_unaligned.s
Normal file
5253
system/alpha/palcode/osfpal_cache_copy_unaligned.s
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue