Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Xing Lin
qemu
Commits
0f8a249a
Commit
0f8a249a
authored
Sep 20, 2007
by
blueswir1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Detabify
git-svn-id:
svn://svn.savannah.nongnu.org/qemu/trunk@3195
c046a42c-6fe2-441c-8c8c-71466251a162
parent
2e03286b
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
2212 additions
and
2212 deletions
+2212
-2212
target-sparc/cpu.h
target-sparc/cpu.h
+26
-26
target-sparc/helper.c
target-sparc/helper.c
+252
-252
target-sparc/op.c
target-sparc/op.c
+153
-153
target-sparc/op_helper.c
target-sparc/op_helper.c
+308
-308
target-sparc/op_mem.h
target-sparc/op_mem.h
+7
-7
target-sparc/translate.c
target-sparc/translate.c
+1466
-1466
No files found.
target-sparc/cpu.h
View file @
0f8a249a
...
...
@@ -22,9 +22,9 @@
#define TARGET_HAS_ICE 1
#if !defined(TARGET_SPARC64)
#define ELF_MACHINE
EM_SPARC
#define ELF_MACHINE
EM_SPARC
#else
#define ELF_MACHINE
EM_SPARCV9
#define ELF_MACHINE
EM_SPARCV9
#endif
/*#define EXCP_INTERRUPT 0x100*/
...
...
@@ -143,8 +143,8 @@
#define FSR_FCC0 (1<<10)
/* MMU */
#define MMU_E
(1<<0)
#define MMU_NF
(1<<1)
#define MMU_E
(1<<0)
#define MMU_NF
(1<<1)
#define PTE_ENTRYTYPE_MASK 3
#define PTE_ACCESS_MASK 0x1c
...
...
@@ -152,8 +152,8 @@
#define PTE_PPN_SHIFT 7
#define PTE_ADDR_MASK 0xffffff00
#define PG_ACCESSED_BIT
5
#define PG_MODIFIED_BIT
6
#define PG_ACCESSED_BIT
5
#define PG_MODIFIED_BIT
6
#define PG_CACHE_BIT 7
#define PG_ACCESSED_MASK (1 << PG_ACCESSED_BIT)
...
...
@@ -221,7 +221,7 @@ typedef struct CPUSPARCState {
uint64_t
tnpc
[
MAXTL
];
uint64_t
tstate
[
MAXTL
];
uint32_t
tt
[
MAXTL
];
uint32_t
xcc
;
/* Extended integer condition codes */
uint32_t
xcc
;
/* Extended integer condition codes */
uint32_t
asi
;
uint32_t
pstate
;
uint32_t
tl
;
...
...
@@ -245,12 +245,12 @@ typedef struct CPUSPARCState {
}
CPUSPARCState
;
#if defined(TARGET_SPARC64)
#define GET_FSR32(env) (env->fsr & 0xcfc1ffff)
#define PUT_FSR32(env, val) do { uint32_t _tmp = val;
\
env->fsr = (_tmp & 0xcfc1c3ff) | (env->fsr & 0x3f00000000ULL);
\
#define PUT_FSR32(env, val) do { uint32_t _tmp = val;
\
env->fsr = (_tmp & 0xcfc1c3ff) | (env->fsr & 0x3f00000000ULL);
\
} while (0)
#define GET_FSR64(env) (env->fsr & 0x3fcfc1ffffULL)
#define PUT_FSR64(env, val) do { uint64_t _tmp = val;
\
env->fsr = _tmp & 0x3fcfc1c3ffULL;
\
#define PUT_FSR64(env, val) do { uint64_t _tmp = val;
\
env->fsr = _tmp & 0x3fcfc1c3ffULL;
\
} while (0)
#else
#define GET_FSR32(env) (env->fsr)
...
...
@@ -268,31 +268,31 @@ void sparc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt,
int
cpu_sparc_register
(
CPUSPARCState
*
env
,
const
sparc_def_t
*
def
);
#define GET_PSR(env) (env->version | (env->psr & PSR_ICC) | \
(env->psref? PSR_EF : 0) |
\
(env->psrpil << 8) |
\
(env->psrs? PSR_S : 0) |
\
(env->psrps? PSR_PS : 0) |
\
(env->psret? PSR_ET : 0) | env->cwp)
(env->psref? PSR_EF : 0) |
\
(env->psrpil << 8) |
\
(env->psrs? PSR_S : 0) |
\
(env->psrps? PSR_PS : 0) |
\
(env->psret? PSR_ET : 0) | env->cwp)
#ifndef NO_CPU_IO_DEFS
void
cpu_set_cwp
(
CPUSPARCState
*
env1
,
int
new_cwp
);
#endif
#define PUT_PSR(env, val) do { int _tmp = val;
\
env->psr = _tmp & PSR_ICC;
\
env->psref = (_tmp & PSR_EF)? 1 : 0;
\
env->psrpil = (_tmp & PSR_PIL) >> 8;
\
env->psrs = (_tmp & PSR_S)? 1 : 0;
\
env->psrps = (_tmp & PSR_PS)? 1 : 0;
\
env->psret = (_tmp & PSR_ET)? 1 : 0;
\
#define PUT_PSR(env, val) do { int _tmp = val;
\
env->psr = _tmp & PSR_ICC;
\
env->psref = (_tmp & PSR_EF)? 1 : 0;
\
env->psrpil = (_tmp & PSR_PIL) >> 8;
\
env->psrs = (_tmp & PSR_S)? 1 : 0;
\
env->psrps = (_tmp & PSR_PS)? 1 : 0;
\
env->psret = (_tmp & PSR_ET)? 1 : 0;
\
cpu_set_cwp(env, _tmp & PSR_CWP); \
} while (0)
#ifdef TARGET_SPARC64
#define GET_CCR(env) (((env->xcc >> 20) << 4) | ((env->psr & PSR_ICC) >> 20))
#define PUT_CCR(env, val) do { int _tmp = val;
\
env->xcc = (_tmp >> 4) << 20;
\
env->psr = (_tmp & 0xf) << 20;
\
#define PUT_CCR(env, val) do { int _tmp = val;
\
env->xcc = (_tmp >> 4) << 20;
\
env->psr = (_tmp & 0xf) << 20;
\
} while (0)
#define GET_CWP64(env) (NWINDOWS - 1 - (env)->cwp)
#define PUT_CWP64(env, val) \
...
...
target-sparc/helper.c
View file @
0f8a249a
This diff is collapsed.
Click to expand it.
target-sparc/op.c
View file @
0f8a249a
...
...
@@ -376,33 +376,33 @@ void OPPROTO op_add_T1_T0_cc(void)
env
->
psr
=
0
;
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
((
T0
&
0xffffffff
)
<
(
src1
&
0xffffffff
))
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
((((
src1
&
0xffffffff
)
^
(
T1
&
0xffffffff
)
^
-
1
)
&
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
xcc
=
0
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
if
(
T0
<
src1
)
env
->
xcc
|=
PSR_CARRY
;
env
->
xcc
|=
PSR_CARRY
;
if
(((
src1
^
T1
^
-
1
)
&
(
src1
^
T0
))
&
(
1ULL
<<
63
))
env
->
xcc
|=
PSR_OVF
;
env
->
xcc
|=
PSR_OVF
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
T0
<
src1
)
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
(((
src1
^
T1
^
-
1
)
&
(
src1
^
T0
))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
#endif
FORCE_RET
();
}
...
...
@@ -448,26 +448,26 @@ void OPPROTO op_addx_T1_T0_cc(void)
}
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
((((
src1
&
0xffffffff
)
^
(
T1
&
0xffffffff
)
^
-
1
)
&
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
if
(((
src1
^
T1
^
-
1
)
&
(
src1
^
T0
))
&
(
1ULL
<<
63
))
env
->
xcc
|=
PSR_OVF
;
env
->
xcc
|=
PSR_OVF
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(((
src1
^
T1
^
-
1
)
&
(
src1
^
T0
))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
#endif
FORCE_RET
();
}
...
...
@@ -481,37 +481,37 @@ void OPPROTO op_tadd_T1_T0_cc(void)
env
->
psr
=
0
;
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
((
T0
&
0xffffffff
)
<
(
src1
&
0xffffffff
))
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
((((
src1
&
0xffffffff
)
^
(
T1
&
0xffffffff
)
^
-
1
)
&
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
if
((
src1
&
0x03
)
||
(
T1
&
0x03
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
env
->
xcc
=
0
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
if
(
T0
<
src1
)
env
->
xcc
|=
PSR_CARRY
;
env
->
xcc
|=
PSR_CARRY
;
if
(((
src1
^
T1
^
-
1
)
&
(
src1
^
T0
))
&
(
1ULL
<<
63
))
env
->
xcc
|=
PSR_OVF
;
env
->
xcc
|=
PSR_OVF
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
T0
<
src1
)
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
(((
src1
^
T1
^
-
1
)
&
(
src1
^
T0
))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
if
((
src1
&
0x03
)
||
(
T1
&
0x03
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
#endif
FORCE_RET
();
}
...
...
@@ -528,7 +528,7 @@ void OPPROTO op_tadd_T1_T0_ccTV(void)
#ifdef TARGET_SPARC64
if
((((
src1
&
0xffffffff
)
^
(
T1
&
0xffffffff
)
^
-
1
)
&
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
raise_exception
(
TT_TOVF
);
#else
if
((
src1
&
0x03
)
||
(
T1
&
0x03
))
...
...
@@ -538,26 +538,26 @@ void OPPROTO op_tadd_T1_T0_ccTV(void)
env
->
psr
=
0
;
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
((
T0
&
0xffffffff
)
<
(
src1
&
0xffffffff
))
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
env
->
xcc
=
0
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
if
(
T0
<
src1
)
env
->
xcc
|=
PSR_CARRY
;
env
->
xcc
|=
PSR_CARRY
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
T0
<
src1
)
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
#endif
FORCE_RET
();
}
...
...
@@ -576,33 +576,33 @@ void OPPROTO op_sub_T1_T0_cc(void)
env
->
psr
=
0
;
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
((
src1
&
0xffffffff
)
<
(
T1
&
0xffffffff
))
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
((((
src1
&
0xffffffff
)
^
(
T1
&
0xffffffff
))
&
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
xcc
=
0
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
if
(
src1
<
T1
)
env
->
xcc
|=
PSR_CARRY
;
env
->
xcc
|=
PSR_CARRY
;
if
(((
src1
^
T1
)
&
(
src1
^
T0
))
&
(
1ULL
<<
63
))
env
->
xcc
|=
PSR_OVF
;
env
->
xcc
|=
PSR_OVF
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
src1
<
T1
)
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
(((
src1
^
T1
)
&
(
src1
^
T0
))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
#endif
FORCE_RET
();
}
...
...
@@ -648,26 +648,26 @@ void OPPROTO op_subx_T1_T0_cc(void)
}
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
((((
src1
&
0xffffffff
)
^
(
T1
&
0xffffffff
))
&
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
if
(((
src1
^
T1
)
&
(
src1
^
T0
))
&
(
1ULL
<<
63
))
env
->
xcc
|=
PSR_OVF
;
env
->
xcc
|=
PSR_OVF
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(((
src1
^
T1
)
&
(
src1
^
T0
))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
#endif
FORCE_RET
();
}
...
...
@@ -681,37 +681,37 @@ void OPPROTO op_tsub_T1_T0_cc(void)
env
->
psr
=
0
;
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
((
src1
&
0xffffffff
)
<
(
T1
&
0xffffffff
))
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
((((
src1
&
0xffffffff
)
^
(
T1
&
0xffffffff
))
&
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
if
((
src1
&
0x03
)
||
(
T1
&
0x03
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
env
->
xcc
=
0
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
if
(
src1
<
T1
)
env
->
xcc
|=
PSR_CARRY
;
env
->
xcc
|=
PSR_CARRY
;
if
(((
src1
^
T1
)
&
(
src1
^
T0
))
&
(
1ULL
<<
63
))
env
->
xcc
|=
PSR_OVF
;
env
->
xcc
|=
PSR_OVF
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
src1
<
T1
)
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
(((
src1
^
T1
)
&
(
src1
^
T0
))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
if
((
src1
&
0x03
)
||
(
T1
&
0x03
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
#endif
FORCE_RET
();
}
...
...
@@ -728,7 +728,7 @@ void OPPROTO op_tsub_T1_T0_ccTV(void)
#ifdef TARGET_SPARC64
if
((((
src1
&
0xffffffff
)
^
(
T1
&
0xffffffff
))
&
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
((
src1
&
0xffffffff
)
^
(
T0
&
0xffffffff
)))
&
(
1
<<
31
))
raise_exception
(
TT_TOVF
);
#else
if
(((
src1
^
T1
)
&
(
src1
^
T0
))
&
(
1
<<
31
))
...
...
@@ -738,26 +738,26 @@ void OPPROTO op_tsub_T1_T0_ccTV(void)
env
->
psr
=
0
;
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
((
src1
&
0xffffffff
)
<
(
T1
&
0xffffffff
))
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
env
->
xcc
=
0
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
if
(
src1
<
T1
)
env
->
xcc
|=
PSR_CARRY
;
env
->
xcc
|=
PSR_CARRY
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
src1
<
T1
)
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
#endif
FORCE_RET
();
}
...
...
@@ -833,13 +833,13 @@ void OPPROTO op_mulscc_T1_T0(void)
T0
+=
T1
;
env
->
psr
=
0
;
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
T0
<
src1
)
env
->
psr
|=
PSR_CARRY
;
env
->
psr
|=
PSR_CARRY
;
if
(((
src1
^
T1
^
-
1
)
&
(
src1
^
T0
))
&
(
1
<<
31
))
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
env
->
y
=
(
b2
<<
31
)
|
(
env
->
y
>>
1
);
FORCE_RET
();
}
...
...
@@ -858,11 +858,11 @@ void OPPROTO op_udiv_T1_T0(void)
x0
=
x0
/
x1
;
if
(
x0
>
0xffffffff
)
{
T0
=
0xffffffff
;
T1
=
1
;
T0
=
0xffffffff
;
T1
=
1
;
}
else
{
T0
=
x0
;
T1
=
0
;
T0
=
x0
;
T1
=
0
;
}
FORCE_RET
();
}
...
...
@@ -881,11 +881,11 @@ void OPPROTO op_sdiv_T1_T0(void)
x0
=
x0
/
x1
;
if
((
int32_t
)
x0
!=
x0
)
{
T0
=
x0
<
0
?
0x80000000
:
0x7fffffff
;
T1
=
1
;
T0
=
x0
<
0
?
0x80000000
:
0x7fffffff
;
T1
=
1
;
}
else
{
T0
=
x0
;
T1
=
0
;
T0
=
x0
;
T1
=
0
;
}
FORCE_RET
();
}
...
...
@@ -895,24 +895,24 @@ void OPPROTO op_div_cc(void)
env
->
psr
=
0
;
#ifdef TARGET_SPARC64
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
T1
)
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
env
->
xcc
=
0
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
if
(
T1
)
env
->
psr
|=
PSR_OVF
;
env
->
psr
|=
PSR_OVF
;
#endif
FORCE_RET
();
}
...
...
@@ -939,9 +939,9 @@ void OPPROTO op_sdivx_T1_T0(void)
raise_exception
(
TT_DIV_ZERO
);
}
if
(
T0
==
INT64_MIN
&&
T1
==
-
1
)
T0
=
INT64_MIN
;
T0
=
INT64_MIN
;
else
T0
/=
(
target_long
)
T1
;
T0
/=
(
target_long
)
T1
;
FORCE_RET
();
}
#endif
...
...
@@ -951,20 +951,20 @@ void OPPROTO op_logic_T0_cc(void)
env
->
psr
=
0
;
#ifdef TARGET_SPARC64
if
(
!
(
T0
&
0xffffffff
))
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
env
->
xcc
=
0
;
if
(
!
T0
)
env
->
xcc
|=
PSR_ZERO
;
env
->
xcc
|=
PSR_ZERO
;
if
((
int64_t
)
T0
<
0
)
env
->
xcc
|=
PSR_NEG
;
env
->
xcc
|=
PSR_NEG
;
#else
if
(
!
T0
)
env
->
psr
|=
PSR_ZERO
;
env
->
psr
|=
PSR_ZERO
;
if
((
int32_t
)
T0
<
0
)
env
->
psr
|=
PSR_NEG
;
env
->
psr
|=
PSR_NEG
;
#endif
FORCE_RET
();
}
...
...
@@ -1200,17 +1200,17 @@ void OPPROTO op_save(void)
cwp
=
(
env
->
cwp
-
1
)
&
(
NWINDOWS
-
1
);
if
(
env
->
cansave
==
0
)
{
raise_exception
(
TT_SPILL
|
(
env
->
otherwin
!=
0
?
(
TT_WOTHER
|
((
env
->
wstate
&
0x38
)
>>
1
))
:
((
env
->
wstate
&
0x7
)
<<
2
)));
(
TT_WOTHER
|
((
env
->
wstate
&
0x38
)
>>
1
))
:
((
env
->
wstate
&
0x7
)
<<
2
)));
}
else
{
if
(
env
->
cleanwin
-
env
->
canrestore
==
0
)
{
// XXX Clean windows without trap
raise_exception
(
TT_CLRWIN
);
}
else
{
env
->
cansave
--
;
env
->
canrestore
++
;
set_cwp
(
cwp
);
}
if
(
env
->
cleanwin
-
env
->
canrestore
==
0
)
{
// XXX Clean windows without trap
raise_exception
(
TT_CLRWIN
);
}
else
{
env
->
cansave
--
;
env
->
canrestore
++
;
set_cwp
(
cwp
);
}
}
FORCE_RET
();
}
...
...
@@ -1221,12 +1221,12 @@ void OPPROTO op_restore(void)
cwp
=
(
env
->
cwp
+
1
)
&
(
NWINDOWS
-
1
);
if
(
env
->
canrestore
==
0
)
{
raise_exception
(
TT_FILL
|
(
env
->
otherwin
!=
0
?