Commit a0c4cb4a7026977266d08d3e6af27d4dd04ed1e4
1 parent
188d8579
sparc fixes
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1117 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
41 additions
and
12 deletions
target-sparc/exec.h
... | ... | @@ -25,6 +25,8 @@ void helper_st_asi(int asi, int size, int sign); |
25 | 25 | void helper_rett(void); |
26 | 26 | void helper_ldfsr(void); |
27 | 27 | void set_cwp(int new_cwp); |
28 | +void do_fitos(void); | |
29 | +void do_fitod(void); | |
28 | 30 | void do_fabss(void); |
29 | 31 | void do_fsqrts(void); |
30 | 32 | void do_fsqrtd(void); | ... | ... |
target-sparc/op.c
... | ... | @@ -932,20 +932,32 @@ void OPPROTO op_fcmpd(void) |
932 | 932 | do_fcmpd(); |
933 | 933 | } |
934 | 934 | |
935 | +#ifdef USE_INT_TO_FLOAT_HELPERS | |
935 | 936 | void OPPROTO op_fitos(void) |
936 | 937 | { |
937 | - FT0 = (float) *((int32_t *)&FT1); | |
938 | + do_fitos(); | |
938 | 939 | } |
939 | 940 | |
940 | -void OPPROTO op_fdtos(void) | |
941 | +void OPPROTO op_fitod(void) | |
941 | 942 | { |
942 | - FT0 = (float) DT1; | |
943 | + do_fitod(); | |
944 | +} | |
945 | +#else | |
946 | +void OPPROTO op_fitos(void) | |
947 | +{ | |
948 | + FT0 = (float) *((int32_t *)&FT1); | |
943 | 949 | } |
944 | 950 | |
945 | 951 | void OPPROTO op_fitod(void) |
946 | 952 | { |
947 | 953 | DT0 = (double) *((int32_t *)&FT1); |
948 | 954 | } |
955 | +#endif | |
956 | + | |
957 | +void OPPROTO op_fdtos(void) | |
958 | +{ | |
959 | + FT0 = (float) DT1; | |
960 | +} | |
949 | 961 | |
950 | 962 | void OPPROTO op_fstod(void) |
951 | 963 | { | ... | ... |
target-sparc/op_helper.c
... | ... | @@ -2,22 +2,34 @@ |
2 | 2 | #include <fenv.h> |
3 | 3 | #include "exec.h" |
4 | 4 | |
5 | -void OPPROTO do_fabss(void) | |
5 | +#ifdef USE_INT_TO_FLOAT_HELPERS | |
6 | +void do_fitos(void) | |
7 | +{ | |
8 | + FT0 = (float) *((int32_t *)&FT1); | |
9 | +} | |
10 | + | |
11 | +void do_fitod(void) | |
12 | +{ | |
13 | + DT0 = (double) *((int32_t *)&FT1); | |
14 | +} | |
15 | +#endif | |
16 | + | |
17 | +void do_fabss(void) | |
6 | 18 | { |
7 | 19 | FT0 = fabsf(FT1); |
8 | 20 | } |
9 | 21 | |
10 | -void OPPROTO do_fsqrts(void) | |
22 | +void do_fsqrts(void) | |
11 | 23 | { |
12 | 24 | FT0 = sqrtf(FT1); |
13 | 25 | } |
14 | 26 | |
15 | -void OPPROTO do_fsqrtd(void) | |
27 | +void do_fsqrtd(void) | |
16 | 28 | { |
17 | 29 | DT0 = sqrt(DT1); |
18 | 30 | } |
19 | 31 | |
20 | -void OPPROTO do_fcmps (void) | |
32 | +void do_fcmps (void) | |
21 | 33 | { |
22 | 34 | if (isnan(FT0) || isnan(FT1)) { |
23 | 35 | T0 = FSR_FCC1 | FSR_FCC0; |
... | ... | @@ -31,7 +43,7 @@ void OPPROTO do_fcmps (void) |
31 | 43 | env->fsr = T0; |
32 | 44 | } |
33 | 45 | |
34 | -void OPPROTO do_fcmpd (void) | |
46 | +void do_fcmpd (void) | |
35 | 47 | { |
36 | 48 | if (isnan(DT0) || isnan(DT1)) { |
37 | 49 | T0 = FSR_FCC1 | FSR_FCC0; |
... | ... | @@ -45,7 +57,7 @@ void OPPROTO do_fcmpd (void) |
45 | 57 | env->fsr = T0; |
46 | 58 | } |
47 | 59 | |
48 | -void OPPROTO helper_ld_asi(int asi, int size, int sign) | |
60 | +void helper_ld_asi(int asi, int size, int sign) | |
49 | 61 | { |
50 | 62 | switch(asi) { |
51 | 63 | case 3: /* MMU probe */ |
... | ... | @@ -76,7 +88,7 @@ void OPPROTO helper_ld_asi(int asi, int size, int sign) |
76 | 88 | } |
77 | 89 | } |
78 | 90 | |
79 | -void OPPROTO helper_st_asi(int asi, int size, int sign) | |
91 | +void helper_st_asi(int asi, int size, int sign) | |
80 | 92 | { |
81 | 93 | switch(asi) { |
82 | 94 | case 3: /* MMU flush */ |
... | ... | @@ -125,7 +137,7 @@ void do_ldd_kernel(uint32_t addr) |
125 | 137 | #endif |
126 | 138 | #endif |
127 | 139 | |
128 | -void OPPROTO helper_rett() | |
140 | +void helper_rett() | |
129 | 141 | { |
130 | 142 | int cwp; |
131 | 143 | env->psret = 1; | ... | ... |
target-sparc/translate.c
... | ... | @@ -291,7 +291,10 @@ GEN32(gen_op_store_DT2_fpr, gen_op_store_DT2_fpr_fprf); |
291 | 291 | |
292 | 292 | #if defined(CONFIG_USER_ONLY) |
293 | 293 | #define gen_op_ldst(name) gen_op_##name##_raw() |
294 | -#define OP_LD_TABLE(width) | |
294 | +#define OP_LD_TABLE(width) \ | |
295 | +static void gen_op_##width##a(int insn, int is_ld, int size, int sign) \ | |
296 | +{ \ | |
297 | +} | |
295 | 298 | #define supervisor(dc) 0 |
296 | 299 | #else |
297 | 300 | #define gen_op_ldst(name) (*gen_op_##name[dc->mem_idx])() | ... | ... |