Commit 8f577d3d29996ad5c60ac6419881557183806d8b

Authored by blueswir1
1 parent dbe7fb91

Enable all alignment checks


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3404 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 5 additions and 48 deletions
target-sparc/translate.c
@@ -346,13 +346,6 @@ GEN32(gen_op_load_fpr_DT1, gen_op_load_fpr_DT1_fprf); @@ -346,13 +346,6 @@ GEN32(gen_op_load_fpr_DT1, gen_op_load_fpr_DT1_fprf);
346 GEN32(gen_op_store_DT0_fpr, gen_op_store_DT0_fpr_fprf); 346 GEN32(gen_op_store_DT0_fpr, gen_op_store_DT0_fpr_fprf);
347 GEN32(gen_op_store_DT1_fpr, gen_op_store_DT1_fpr_fprf); 347 GEN32(gen_op_store_DT1_fpr, gen_op_store_DT1_fpr_fprf);
348 348
349 -#ifdef ALIGN_7_BUGS_FIXED  
350 -#else  
351 -#ifndef CONFIG_USER_ONLY  
352 -#define gen_op_check_align_T0_7()  
353 -#endif  
354 -#endif  
355 -  
356 /* moves */ 349 /* moves */
357 #ifdef CONFIG_USER_ONLY 350 #ifdef CONFIG_USER_ONLY
358 #define supervisor(dc) 0 351 #define supervisor(dc) 0
@@ -2941,9 +2934,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -2941,9 +2934,7 @@ static void disas_sparc_insn(DisasContext * dc)
2941 (xop > 0x2c && xop <= 0x33) || xop == 0x1f || xop == 0x3d) { 2934 (xop > 0x2c && xop <= 0x33) || xop == 0x1f || xop == 0x3d) {
2942 switch (xop) { 2935 switch (xop) {
2943 case 0x0: /* load word */ 2936 case 0x0: /* load word */
2944 -#ifdef CONFIG_USER_ONLY  
2945 gen_op_check_align_T0_3(); 2937 gen_op_check_align_T0_3();
2946 -#endif  
2947 #ifndef TARGET_SPARC64 2938 #ifndef TARGET_SPARC64
2948 gen_op_ldst(ld); 2939 gen_op_ldst(ld);
2949 #else 2940 #else
@@ -2954,15 +2945,13 @@ static void disas_sparc_insn(DisasContext * dc) @@ -2954,15 +2945,13 @@ static void disas_sparc_insn(DisasContext * dc)
2954 gen_op_ldst(ldub); 2945 gen_op_ldst(ldub);
2955 break; 2946 break;
2956 case 0x2: /* load unsigned halfword */ 2947 case 0x2: /* load unsigned halfword */
2957 -#ifdef CONFIG_USER_ONLY  
2958 gen_op_check_align_T0_1(); 2948 gen_op_check_align_T0_1();
2959 -#endif  
2960 gen_op_ldst(lduh); 2949 gen_op_ldst(lduh);
2961 break; 2950 break;
2962 case 0x3: /* load double word */ 2951 case 0x3: /* load double word */
2963 - gen_op_check_align_T0_7();  
2964 if (rd & 1) 2952 if (rd & 1)
2965 goto illegal_insn; 2953 goto illegal_insn;
  2954 + gen_op_check_align_T0_7();
2966 gen_op_ldst(ldd); 2955 gen_op_ldst(ldd);
2967 gen_movl_T0_reg(rd + 1); 2956 gen_movl_T0_reg(rd + 1);
2968 break; 2957 break;
@@ -2970,18 +2959,14 @@ static void disas_sparc_insn(DisasContext * dc) @@ -2970,18 +2959,14 @@ static void disas_sparc_insn(DisasContext * dc)
2970 gen_op_ldst(ldsb); 2959 gen_op_ldst(ldsb);
2971 break; 2960 break;
2972 case 0xa: /* load signed halfword */ 2961 case 0xa: /* load signed halfword */
2973 -#ifdef CONFIG_USER_ONLY  
2974 gen_op_check_align_T0_1(); 2962 gen_op_check_align_T0_1();
2975 -#endif  
2976 gen_op_ldst(ldsh); 2963 gen_op_ldst(ldsh);
2977 break; 2964 break;
2978 case 0xd: /* ldstub -- XXX: should be atomically */ 2965 case 0xd: /* ldstub -- XXX: should be atomically */
2979 gen_op_ldst(ldstub); 2966 gen_op_ldst(ldstub);
2980 break; 2967 break;
2981 case 0x0f: /* swap register with memory. Also atomically */ 2968 case 0x0f: /* swap register with memory. Also atomically */
2982 -#ifdef CONFIG_USER_ONLY  
2983 gen_op_check_align_T0_3(); 2969 gen_op_check_align_T0_3();
2984 -#endif  
2985 gen_movl_reg_T1(rd); 2970 gen_movl_reg_T1(rd);
2986 gen_op_ldst(swap); 2971 gen_op_ldst(swap);
2987 break; 2972 break;
@@ -2992,9 +2977,8 @@ static void disas_sparc_insn(DisasContext * dc) @@ -2992,9 +2977,8 @@ static void disas_sparc_insn(DisasContext * dc)
2992 goto illegal_insn; 2977 goto illegal_insn;
2993 if (!supervisor(dc)) 2978 if (!supervisor(dc))
2994 goto priv_insn; 2979 goto priv_insn;
2995 -#elif CONFIG_USER_ONLY  
2996 - gen_op_check_align_T0_3();  
2997 #endif 2980 #endif
  2981 + gen_op_check_align_T0_3();
2998 gen_ld_asi(insn, 4, 0); 2982 gen_ld_asi(insn, 4, 0);
2999 break; 2983 break;
3000 case 0x11: /* load unsigned byte alternate */ 2984 case 0x11: /* load unsigned byte alternate */
@@ -3012,9 +2996,8 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3012,9 +2996,8 @@ static void disas_sparc_insn(DisasContext * dc)
3012 goto illegal_insn; 2996 goto illegal_insn;
3013 if (!supervisor(dc)) 2997 if (!supervisor(dc))
3014 goto priv_insn; 2998 goto priv_insn;
3015 -#elif CONFIG_USER_ONLY  
3016 - gen_op_check_align_T0_1();  
3017 #endif 2999 #endif
  3000 + gen_op_check_align_T0_1();
3018 gen_ld_asi(insn, 2, 0); 3001 gen_ld_asi(insn, 2, 0);
3019 break; 3002 break;
3020 case 0x13: /* load double word alternate */ 3003 case 0x13: /* load double word alternate */
@@ -3045,9 +3028,8 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3045,9 +3028,8 @@ static void disas_sparc_insn(DisasContext * dc)
3045 goto illegal_insn; 3028 goto illegal_insn;
3046 if (!supervisor(dc)) 3029 if (!supervisor(dc))
3047 goto priv_insn; 3030 goto priv_insn;
3048 -#elif CONFIG_USER_ONLY  
3049 - gen_op_check_align_T0_1();  
3050 #endif 3031 #endif
  3032 + gen_op_check_align_T0_1();
3051 gen_ld_asi(insn, 2, 1); 3033 gen_ld_asi(insn, 2, 1);
3052 break; 3034 break;
3053 case 0x1d: /* ldstuba -- XXX: should be atomically */ 3035 case 0x1d: /* ldstuba -- XXX: should be atomically */
@@ -3065,9 +3047,8 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3065,9 +3047,8 @@ static void disas_sparc_insn(DisasContext * dc)
3065 goto illegal_insn; 3047 goto illegal_insn;
3066 if (!supervisor(dc)) 3048 if (!supervisor(dc))
3067 goto priv_insn; 3049 goto priv_insn;
3068 -#elif CONFIG_USER_ONLY  
3069 - gen_op_check_align_T0_3();  
3070 #endif 3050 #endif
  3051 + gen_op_check_align_T0_3();
3071 gen_movl_reg_T1(rd); 3052 gen_movl_reg_T1(rd);
3072 gen_swap_asi(insn); 3053 gen_swap_asi(insn);
3073 break; 3054 break;
@@ -3081,9 +3062,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3081,9 +3062,7 @@ static void disas_sparc_insn(DisasContext * dc)
3081 #endif 3062 #endif
3082 #ifdef TARGET_SPARC64 3063 #ifdef TARGET_SPARC64
3083 case 0x08: /* V9 ldsw */ 3064 case 0x08: /* V9 ldsw */
3084 -#ifdef CONFIG_USER_ONLY  
3085 gen_op_check_align_T0_3(); 3065 gen_op_check_align_T0_3();
3086 -#endif  
3087 gen_op_ldst(ldsw); 3066 gen_op_ldst(ldsw);
3088 break; 3067 break;
3089 case 0x0b: /* V9 ldx */ 3068 case 0x0b: /* V9 ldx */
@@ -3091,9 +3070,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3091,9 +3070,7 @@ static void disas_sparc_insn(DisasContext * dc)
3091 gen_op_ldst(ldx); 3070 gen_op_ldst(ldx);
3092 break; 3071 break;
3093 case 0x18: /* V9 ldswa */ 3072 case 0x18: /* V9 ldswa */
3094 -#ifdef CONFIG_USER_ONLY  
3095 gen_op_check_align_T0_3(); 3073 gen_op_check_align_T0_3();
3096 -#endif  
3097 gen_ld_asi(insn, 4, 1); 3074 gen_ld_asi(insn, 4, 1);
3098 break; 3075 break;
3099 case 0x1b: /* V9 ldxa */ 3076 case 0x1b: /* V9 ldxa */
@@ -3103,9 +3080,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3103,9 +3080,7 @@ static void disas_sparc_insn(DisasContext * dc)
3103 case 0x2d: /* V9 prefetch, no effect */ 3080 case 0x2d: /* V9 prefetch, no effect */
3104 goto skip_move; 3081 goto skip_move;
3105 case 0x30: /* V9 ldfa */ 3082 case 0x30: /* V9 ldfa */
3106 -#ifdef CONFIG_USER_ONLY  
3107 gen_op_check_align_T0_3(); 3083 gen_op_check_align_T0_3();
3108 -#endif  
3109 gen_ldf_asi(insn, 4); 3084 gen_ldf_asi(insn, 4);
3110 goto skip_move; 3085 goto skip_move;
3111 case 0x33: /* V9 lddfa */ 3086 case 0x33: /* V9 lddfa */
@@ -3129,16 +3104,12 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3129,16 +3104,12 @@ static void disas_sparc_insn(DisasContext * dc)
3129 goto jmp_insn; 3104 goto jmp_insn;
3130 switch (xop) { 3105 switch (xop) {
3131 case 0x20: /* load fpreg */ 3106 case 0x20: /* load fpreg */
3132 -#ifdef CONFIG_USER_ONLY  
3133 gen_op_check_align_T0_3(); 3107 gen_op_check_align_T0_3();
3134 -#endif  
3135 gen_op_ldst(ldf); 3108 gen_op_ldst(ldf);
3136 gen_op_store_FT0_fpr(rd); 3109 gen_op_store_FT0_fpr(rd);
3137 break; 3110 break;
3138 case 0x21: /* load fsr */ 3111 case 0x21: /* load fsr */
3139 -#ifdef CONFIG_USER_ONLY  
3140 gen_op_check_align_T0_3(); 3112 gen_op_check_align_T0_3();
3141 -#endif  
3142 gen_op_ldst(ldf); 3113 gen_op_ldst(ldf);
3143 gen_op_ldfsr(); 3114 gen_op_ldfsr();
3144 break; 3115 break;
@@ -3157,18 +3128,14 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3157,18 +3128,14 @@ static void disas_sparc_insn(DisasContext * dc)
3157 gen_movl_reg_T1(rd); 3128 gen_movl_reg_T1(rd);
3158 switch (xop) { 3129 switch (xop) {
3159 case 0x4: 3130 case 0x4:
3160 -#ifdef CONFIG_USER_ONLY  
3161 gen_op_check_align_T0_3(); 3131 gen_op_check_align_T0_3();
3162 -#endif  
3163 gen_op_ldst(st); 3132 gen_op_ldst(st);
3164 break; 3133 break;
3165 case 0x5: 3134 case 0x5:
3166 gen_op_ldst(stb); 3135 gen_op_ldst(stb);
3167 break; 3136 break;
3168 case 0x6: 3137 case 0x6:
3169 -#ifdef CONFIG_USER_ONLY  
3170 gen_op_check_align_T0_1(); 3138 gen_op_check_align_T0_1();
3171 -#endif  
3172 gen_op_ldst(sth); 3139 gen_op_ldst(sth);
3173 break; 3140 break;
3174 case 0x7: 3141 case 0x7:
@@ -3187,9 +3154,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3187,9 +3154,7 @@ static void disas_sparc_insn(DisasContext * dc)
3187 if (!supervisor(dc)) 3154 if (!supervisor(dc))
3188 goto priv_insn; 3155 goto priv_insn;
3189 #endif 3156 #endif
3190 -#ifdef CONFIG_USER_ONLY  
3191 gen_op_check_align_T0_3(); 3157 gen_op_check_align_T0_3();
3192 -#endif  
3193 gen_st_asi(insn, 4); 3158 gen_st_asi(insn, 4);
3194 break; 3159 break;
3195 case 0x15: 3160 case 0x15:
@@ -3208,9 +3173,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3208,9 +3173,7 @@ static void disas_sparc_insn(DisasContext * dc)
3208 if (!supervisor(dc)) 3173 if (!supervisor(dc))
3209 goto priv_insn; 3174 goto priv_insn;
3210 #endif 3175 #endif
3211 -#ifdef CONFIG_USER_ONLY  
3212 gen_op_check_align_T0_1(); 3176 gen_op_check_align_T0_1();
3213 -#endif  
3214 gen_st_asi(insn, 2); 3177 gen_st_asi(insn, 2);
3215 break; 3178 break;
3216 case 0x17: 3179 case 0x17:
@@ -3246,9 +3209,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3246,9 +3209,7 @@ static void disas_sparc_insn(DisasContext * dc)
3246 goto jmp_insn; 3209 goto jmp_insn;
3247 switch (xop) { 3210 switch (xop) {
3248 case 0x24: 3211 case 0x24:
3249 -#ifdef CONFIG_USER_ONLY  
3250 gen_op_check_align_T0_3(); 3212 gen_op_check_align_T0_3();
3251 -#endif  
3252 gen_op_load_fpr_FT0(rd); 3213 gen_op_load_fpr_FT0(rd);
3253 gen_op_ldst(stf); 3214 gen_op_ldst(stf);
3254 break; 3215 break;
@@ -3279,9 +3240,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3279,9 +3240,7 @@ static void disas_sparc_insn(DisasContext * dc)
3279 switch (xop) { 3240 switch (xop) {
3280 #ifdef TARGET_SPARC64 3241 #ifdef TARGET_SPARC64
3281 case 0x34: /* V9 stfa */ 3242 case 0x34: /* V9 stfa */
3282 -#ifdef CONFIG_USER_ONLY  
3283 gen_op_check_align_T0_3(); 3243 gen_op_check_align_T0_3();
3284 -#endif  
3285 gen_op_load_fpr_FT0(rd); 3244 gen_op_load_fpr_FT0(rd);
3286 gen_stf_asi(insn, 4); 3245 gen_stf_asi(insn, 4);
3287 break; 3246 break;
@@ -3291,9 +3250,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -3291,9 +3250,7 @@ static void disas_sparc_insn(DisasContext * dc)
3291 gen_stf_asi(insn, 8); 3250 gen_stf_asi(insn, 8);
3292 break; 3251 break;
3293 case 0x3c: /* V9 casa */ 3252 case 0x3c: /* V9 casa */
3294 -#ifdef CONFIG_USER_ONLY  
3295 gen_op_check_align_T0_3(); 3253 gen_op_check_align_T0_3();
3296 -#endif  
3297 flush_T2(dc); 3254 flush_T2(dc);
3298 gen_movl_reg_T2(rd); 3255 gen_movl_reg_T2(rd);
3299 gen_cas_asi(insn); 3256 gen_cas_asi(insn);