diff options
| author | Michael Bergknoff <Michael.Bergknoff@Sun.COM> | 2009-11-23 07:16:59 -0800 |
|---|---|---|
| committer | Michael Bergknoff <Michael.Bergknoff@Sun.COM> | 2009-11-23 07:16:59 -0800 |
| commit | e64c6c3f1a2cffb126880e90fb7670805896f505 (patch) | |
| tree | ec77d558491f599bc5dea2a5aa4100fe677c2f4f /usr/src/uts/sun4u | |
| parent | 28074f8228d5aca8fd4c44630d7a066b312390f5 (diff) | |
| download | illumos-joyent-e64c6c3f1a2cffb126880e90fb7670805896f505.tar.gz | |
6868072 illegal instruction or I-MMU miss panic happens instead of D-MMU miss
6897829 bcopy optimization in 6629200 could be better
Diffstat (limited to 'usr/src/uts/sun4u')
| -rw-r--r-- | usr/src/uts/sun4u/cpu/opl_olympus_copy.s | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/usr/src/uts/sun4u/cpu/opl_olympus_copy.s b/usr/src/uts/sun4u/cpu/opl_olympus_copy.s index 40c8fe8a30..c0f52b3a9f 100644 --- a/usr/src/uts/sun4u/cpu/opl_olympus_copy.s +++ b/usr/src/uts/sun4u/cpu/opl_olympus_copy.s @@ -19,12 +19,10 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <sys/param.h> #include <sys/errno.h> #include <sys/asm_linkage.h> @@ -992,12 +990,8 @@ bcopy(const void *from, void *to, size_t count) bz,pt %ncc, .bc_sm_exit stb %o3, [%o1 + 1] ldub [%o0 + 2], %o3 ! move final byte - stb %o3, [%o1 + 2] - membar #Sync ! sync error barrier - andn %o4, TRAMP_FLAG, %o4 - stn %o4, [THREAD_REG + T_LOFAULT] ! restore old t_lofault - retl - mov %g0, %o0 ! return 0 + ba,pt %ncc, .bc_sm_exit + stb %o3, [%o1 + 2] .align 16 nop ! instruction alignment ! see discussion at start of file @@ -1027,12 +1021,8 @@ bcopy(const void *from, void *to, size_t count) nop .bc_sm_byte: ldub [%o0], %o3 - stb %o3, [%o1] - membar #Sync ! sync error barrier - andn %o4, TRAMP_FLAG, %o4 - stn %o4, [THREAD_REG + T_LOFAULT] ! restore old t_lofault - retl - mov %g0, %o0 ! return 0 + ba,pt %ncc, .bc_sm_exit + stb %o3, [%o1] .bc_sm_word: subcc %o2, 4, %o2 ! update count @@ -1052,7 +1042,8 @@ bcopy(const void *from, void *to, size_t count) ldub [%o0 + 6], %o3 ! load third byte stb %o3, [%o1 + 6] ! store third byte .bc_sm_exit: - brz,pt %o4, .bc_sm_done + ldn [THREAD_REG + T_LOFAULT], %o3 + brz,pt %o3, .bc_sm_done nop membar #Sync ! sync error barrier andn %o4, TRAMP_FLAG, %o4 |
