1# sh testcase for all fmov instructions 2# mach: sh 3# as(sh): -defsym sim_cpu=0 4 5 .include "testutils.inc" 6 7 .macro init 8 fldi0 fr0 9 fldi1 fr1 10 fldi1 fr2 11 fldi1 fr3 12 .endm 13 14 start 15 16fmov1: # Test fr -> fr. 17 set_grs_a5a5 18 set_fprs_a5a5 19 init 20 single_prec 21 sz_32 22 fmov fr0, fr1 23 # Ensure fr0 and fr1 are now equal. 24 fcmp/eq fr0, fr1 25 bt fmov2 26 fail 27 28fmov2: # Test dr -> dr. 29 init 30 double_prec 31 sz_64 32 fmov dr0, dr2 33 # Ensure dr0 and dr2 are now equal. 34 fcmp/eq dr0, dr2 35 bt fmov3 36 fail 37 38fmov3: # Test dr -> xd and xd -> dr. 39 init 40 sz_64 41 fmov dr0, xd0 42 # Ensure dr0 and xd0 are now equal. 43 fmov xd0, dr2 44 fcmp/eq dr0, dr2 45 bt fmov4 46 fail 47 48fmov4: # Test xd -> xd. 49 init 50 sz_64 51 double_prec 52 fmov dr0, xd0 53 fmov xd0, xd2 54 fmov xd2, dr2 55 # Ensure dr0 and dr2 are now equal. 56 fcmp/eq dr0, dr2 57 bt .L0 58 fail 59 60 # FIXME: test fmov.s fr -> @gr, fmov dr -> @gr 61 # FIXME: test fmov.s @gr -> fr, fmov @gr -> dr 62 # FIXME: test fmov.s @gr+ -> fr, fmov @gr+ -> dr 63 # FIXME: test fmov.s fr -> @-gr, fmov dr -> @-gr 64 # FIXME: test fmov.s @(r0,gr) -> fr, fmov @(r0,gr) -> dr 65 # FIXME: test fmov.s fr -> @(r0,gr), fmov dr -> @(r0,gr) 66 67.L0: 68 test_grs_a5a5 69 sz_32 70 single_prec 71 assert_fpreg_i 0, fr0 72 assert_fpreg_i 1, fr1 73 assert_fpreg_i 0, fr2 74 assert_fpreg_i 1, fr3 75 test_fpr_a5a5 fr4 76 test_fpr_a5a5 fr5 77 test_fpr_a5a5 fr6 78 test_fpr_a5a5 fr7 79 test_fpr_a5a5 fr8 80 test_fpr_a5a5 fr9 81 test_fpr_a5a5 fr10 82 test_fpr_a5a5 fr11 83 test_fpr_a5a5 fr12 84 test_fpr_a5a5 fr13 85 test_fpr_a5a5 fr14 86 test_fpr_a5a5 fr15 87 88fmov5: # Test fr -> @rn and @rn -> fr. 89 init 90 sz_32 91 single_prec 92 # FIXME! Use a reserved memory location! 93 mov #40, r0 94 shll8 r0 95 fmov fr0, @r0 96 fmov @r0, fr1 97 fcmp/eq fr0, fr1 98 bt fmov6 99 fail 100 101fmov6: # Test dr -> @rn and @rn -> dr. 102 init 103 sz_64 104 double_prec 105 mov #40, r0 106 shll8 r0 107 fmov dr0, @r0 108 fmov @r0, dr2 109 fcmp/eq dr0, dr2 110 bt fmov7 111 fail 112 113fmov7: # Test xd -> @rn and @rn -> xd. 114 init 115 sz_64 116 double_prec 117 mov #40, r0 118 shll8 r0 119 fmov dr0, xd0 120 fmov xd0, @r0 121 fmov @r0, xd2 122 fmov xd2, dr2 123 fcmp/eq dr0, dr2 124 bt fmov8 125 fail 126 127fmov8: # Test fr -> @-rn. 128 init 129 sz_32 130 single_prec 131 mov #40, r0 132 shll8 r0 133 # Preserve. 134 mov r0, r1 135 fmov fr0, @-r0 136 fmov @r0, fr2 137 fcmp/eq fr0, fr2 138 bt f8b 139 fail 140f8b: # check pre-dec. 141 add #4, r0 142 cmp/eq r0, r1 143 bt fmov9 144 fail 145 146fmov9: # Test dr -> @-rn. 147 init 148 sz_64 149 double_prec 150 mov #40, r0 151 shll8 r0 152 # Preserve r0. 153 mov r0, r1 154 fmov dr0, @-r0 155 fmov @r0, dr2 156 fcmp/eq dr0, dr2 157 bt f9b 158 fail 159f9b: # check pre-dec. 160 add #8, r0 161 cmp/eq r0, r1 162 bt fmov10 163 fail 164 165fmov10: # Test xd -> @-rn. 166 init 167 sz_64 168 double_prec 169 mov #40, r0 170 shll8 r0 171 # Preserve r0. 172 mov r0, r1 173 fmov dr0, xd0 174 fmov xd0, @-r0 175 fmov @r0, xd2 176 fmov xd2, dr2 177 fcmp/eq dr0, dr2 178 bt f10b 179 fail 180f10b: # check pre-dec. 181 add #8, r0 182 cmp/eq r0, r1 183 bt fmov11 184 fail 185 186fmov11: # Test @rn+ -> fr. 187 init 188 sz_32 189 single_prec 190 mov #40, r0 191 shll8 r0 192 # Preserve r0. 193 mov r0, r1 194 fmov fr0, @r0 195 fmov @r0+, fr2 196 fcmp/eq fr0, fr2 197 bt f11b 198 fail 199f11b: # check post-inc. 200 add #4, r1 201 cmp/eq r0, r1 202 bt fmov12 203 fail 204 205fmov12: # Test @rn+ -> dr. 206 init 207 sz_64 208 double_prec 209 mov #40, r0 210 shll8 r0 211 # preserve r0. 212 mov r0, r1 213 fmov dr0, @r0 214 fmov @r0+, dr2 215 fcmp/eq dr0, dr2 216 bt f12b 217 fail 218f12b: # check post-inc. 219 add #8, r1 220 cmp/eq r0, r1 221 bt fmov13 222 fail 223 224fmov13: # Test @rn -> xd. 225 init 226 sz_64 227 double_prec 228 mov #40, r0 229 shll8 r0 230 # Preserve r0. 231 mov r0, r1 232 fmov dr0, xd0 233 fmov xd0, @r0 234 fmov @r0+, xd2 235 fmov xd2, dr2 236 fcmp/eq dr0, dr2 237 bt f13b 238 fail 239f13b: 240 add #8, r1 241 cmp/eq r0, r1 242 bt fmov14 243 fail 244 245fmov14: # Test fr -> @(r0,rn), @(r0, rn) -> fr. 246 init 247 sz_32 248 single_prec 249 mov #40, r0 250 shll8 r0 251 mov #0, r1 252 fmov fr0, @(r0, r1) 253 fmov @(r0, r1), fr1 254 fcmp/eq fr0, fr1 255 bt fmov15 256 fail 257 258fmov15: # Test dr -> @(r0, rn), @(r0, rn) -> dr. 259 init 260 sz_64 261 double_prec 262 mov #40, r0 263 shll8 r0 264 mov #0, r1 265 fmov dr0, @(r0, r1) 266 fmov @(r0, r1), dr2 267 fcmp/eq dr0, dr2 268 bt fmov16 269 fail 270 271fmov16: # Test xd -> @(r0, rn), @(r0, rn) -> xd. 272 init 273 sz_64 274 double_prec 275 mov #40, r0 276 shll8 r0 277 mov #0, r1 278 fmov dr0, xd0 279 fmov xd0, @(r0, r1) 280 fmov @(r0, r1), xd2 281 fmov xd2, dr2 282 fcmp/eq dr0, dr2 283 bt .L1 284 fail 285.L1: 286 assertreg0 0x2800 287 assertreg 0, r1 288 test_gr_a5a5 r2 289 test_gr_a5a5 r3 290 test_gr_a5a5 r4 291 test_gr_a5a5 r5 292 test_gr_a5a5 r6 293 test_gr_a5a5 r7 294 test_gr_a5a5 r8 295 test_gr_a5a5 r9 296 test_gr_a5a5 r10 297 test_gr_a5a5 r11 298 test_gr_a5a5 r12 299 test_gr_a5a5 r13 300 test_gr_a5a5 r14 301 302 sz_32 303 single_prec 304 assert_fpreg_i 0, fr0 305 assert_fpreg_i 1, fr1 306 assert_fpreg_i 0, fr2 307 assert_fpreg_i 1, fr3 308 test_fpr_a5a5 fr4 309 test_fpr_a5a5 fr5 310 test_fpr_a5a5 fr6 311 test_fpr_a5a5 fr7 312 test_fpr_a5a5 fr8 313 test_fpr_a5a5 fr9 314 test_fpr_a5a5 fr10 315 test_fpr_a5a5 fr11 316 test_fpr_a5a5 fr12 317 test_fpr_a5a5 fr13 318 test_fpr_a5a5 fr14 319 test_fpr_a5a5 fr15 320 321 pass 322 exit 0 323