Search
lxdream.org :: lxdream/test/sh4/fmov.s
lxdream 0.9.1
released Jun 29
Download Now
filename test/sh4/fmov.s
changeset 732:f05753bbe723
prev358:65043a8f5785
author nkeynes
date Tue Feb 28 18:22:52 2012 +1000 (12 years ago)
permissions -rw-r--r--
last change Add a GL-only video driver for android usage (since the Java code is
responsible for creating the context)
file annotate diff log raw
nkeynes@358
     1
.section .text
nkeynes@358
     2
.include "sh4/inc.s"
nkeynes@358
     3
!
nkeynes@358
     4
! Test fmov (all variants)
nkeynes@358
     5
! (not arithmetic)
nkeynes@358
     6
nkeynes@358
     7
.global _test_fmov
nkeynes@358
     8
_test_fmov:	
nkeynes@358
     9
	start_test
nkeynes@358
    10
nkeynes@358
    11
	xor r0,r0
nkeynes@358
    12
	lds r0, fpscr
nkeynes@358
    13
	
nkeynes@358
    14
test_fmov_1:  ! single precision reg-to-reg
nkeynes@358
    15
	add #1, r12
nkeynes@358
    16
nkeynes@358
    17
	fldi0 fr0
nkeynes@358
    18
	fldi1 fr1
nkeynes@358
    19
	flds fr0, fpul
nkeynes@358
    20
	sts fpul, r0
nkeynes@358
    21
	tst r0, r0
nkeynes@358
    22
	bf test_fmov_1_fail
nkeynes@358
    23
	fmov fr1, fr0
nkeynes@358
    24
	flds fr0, fpul
nkeynes@358
    25
	sts fpul, r0
nkeynes@358
    26
	mov.l test_fmov_1_result, r1
nkeynes@358
    27
	cmp/eq r0, r1
nkeynes@358
    28
	bt test_fmov_2
nkeynes@358
    29
test_fmov_1_fail:
nkeynes@358
    30
	fail test_fmov_str_k
nkeynes@358
    31
	bra test_fmov_2
nkeynes@358
    32
	nop
nkeynes@358
    33
nkeynes@358
    34
test_fmov_1_result:
nkeynes@358
    35
	.long 0x3F800000
nkeynes@358
    36
nkeynes@358
    37
test_fmov_2:	! reg-to-reg double prec
nkeynes@358
    38
	add #1, r12
nkeynes@358
    39
	mov.l test_fmov_2_input_a, r1
nkeynes@358
    40
	lds r1, fpul
nkeynes@358
    41
	fsts fpul, fr4
nkeynes@358
    42
	mov.l test_fmov_2_input_b, r3
nkeynes@358
    43
	lds r3, fpul
nkeynes@358
    44
	fsts fpul, fr5
nkeynes@358
    45
	fldi0 fr8
nkeynes@358
    46
	fldi0 fr9
nkeynes@358
    47
	fschg
nkeynes@358
    48
	flds fr8, fpul
nkeynes@358
    49
	sts fpul, r0
nkeynes@358
    50
	tst r0, r0
nkeynes@358
    51
	bf test_fmov_2_fail
nkeynes@358
    52
	flds fr9, fpul
nkeynes@358
    53
	sts fpul, r0
nkeynes@358
    54
	tst r0, r0
nkeynes@358
    55
	bf test_fmov_2_fail
nkeynes@358
    56
	fmov fr4, fr8
nkeynes@358
    57
	flds fr8, fpul
nkeynes@358
    58
	sts fpul, r0
nkeynes@358
    59
	flds fr9, fpul
nkeynes@358
    60
	sts fpul, r2
nkeynes@358
    61
	cmp/eq r0, r1
nkeynes@358
    62
	bf test_fmov_2_fail
nkeynes@358
    63
	cmp/eq r2, r3
nkeynes@358
    64
	bt test_fmov_3
nkeynes@358
    65
test_fmov_2_fail:
nkeynes@358
    66
	fail test_fmov_str_k
nkeynes@358
    67
	bra test_fmov_3
nkeynes@358
    68
	nop
nkeynes@358
    69
test_fmov_2_input_a:
nkeynes@358
    70
	.long 0x12345678
nkeynes@358
    71
test_fmov_2_input_b:
nkeynes@358
    72
	.long 0x9ABCDEF0
nkeynes@358
    73
nkeynes@358
    74
test_fmov_3: ! double size DRm to XDn
nkeynes@358
    75
	add #1, r12
nkeynes@358
    76
	frchg
nkeynes@358
    77
	fldi0 fr8
nkeynes@358
    78
	fldi0 fr9
nkeynes@358
    79
	frchg
nkeynes@358
    80
	fldi0 fr8
nkeynes@358
    81
	fldi0 fr9
nkeynes@358
    82
	mov.l test_fmov_3_input_a, r2
nkeynes@358
    83
	lds r2, fpul
nkeynes@358
    84
	fsts fpul, fr2
nkeynes@358
    85
	mov.l test_fmov_3_input_b, r3
nkeynes@358
    86
	lds r3, fpul
nkeynes@358
    87
	fsts fpul, fr3
nkeynes@358
    88
nkeynes@358
    89
	fmov fr2, fr9
nkeynes@358
    90
	flds fr8, fpul
nkeynes@358
    91
	sts fpul, r0
nkeynes@358
    92
	flds fr9, fpul
nkeynes@358
    93
	sts fpul, r1
nkeynes@358
    94
	tst r0, r0
nkeynes@358
    95
	bf test_fmov_3_fail
nkeynes@358
    96
	tst r1, r1
nkeynes@358
    97
	bf test_fmov_3_fail
nkeynes@358
    98
	frchg
nkeynes@358
    99
	flds fr8, fpul
nkeynes@358
   100
	sts fpul, r0
nkeynes@358
   101
	flds fr9, fpul
nkeynes@358
   102
	sts fpul, r1
nkeynes@358
   103
	cmp/eq r0, r2
nkeynes@358
   104
	bf test_fmov_3_fail
nkeynes@358
   105
	cmp/eq r1, r3
nkeynes@358
   106
	bt test_fmov_4
nkeynes@358
   107
nkeynes@358
   108
test_fmov_3_fail:
nkeynes@358
   109
	fail test_fmov_str_k
nkeynes@358
   110
	bra test_fmov_4
nkeynes@358
   111
	nop
nkeynes@358
   112
nkeynes@358
   113
test_fmov_3_input_a:
nkeynes@358
   114
	.long 0x86421357
nkeynes@358
   115
test_fmov_3_input_b:
nkeynes@358
   116
	.long 0x97532468
nkeynes@358
   117
	
nkeynes@358
   118
test_fmov_4: ! double size XDm to DRn
nkeynes@358
   119
	add #1, r12
nkeynes@358
   120
	mov.l test_fmov_4_input_a, r2
nkeynes@358
   121
	lds r2, fpul
nkeynes@358
   122
	fsts fpul, fr6
nkeynes@358
   123
	mov.l test_fmov_4_input_b, r3
nkeynes@358
   124
	lds r3, fpul
nkeynes@358
   125
	fsts fpul, fr7
nkeynes@358
   126
	fldi0 fr0
nkeynes@358
   127
	fldi0 fr1
nkeynes@358
   128
	frchg
nkeynes@358
   129
	fldi0 fr6
nkeynes@358
   130
	fldi0 fr7
nkeynes@358
   131
nkeynes@358
   132
	fmov fr7, fr0
nkeynes@358
   133
	flds fr0, fpul
nkeynes@358
   134
	sts fpul, r0
nkeynes@358
   135
	flds fr1, fpul
nkeynes@358
   136
	sts fpul, r1
nkeynes@358
   137
	cmp/eq r0, r2
nkeynes@358
   138
	bf test_fmov_4_fail
nkeynes@358
   139
	cmp/eq r1, r3
nkeynes@358
   140
	bf test_fmov_4_fail
nkeynes@358
   141
	frchg
nkeynes@358
   142
	flds fr0, fpul
nkeynes@358
   143
	sts fpul, r0
nkeynes@358
   144
	flds fr1, fpul
nkeynes@358
   145
	sts fpul, r1
nkeynes@358
   146
	tst r0, r0
nkeynes@358
   147
	bf test_fmov_4_fail
nkeynes@358
   148
	tst r1, r1
nkeynes@358
   149
	bt test_fmov_5
nkeynes@358
   150
	
nkeynes@358
   151
test_fmov_4_fail:
nkeynes@358
   152
	fail test_fmov_str_k
nkeynes@358
   153
	bra test_fmov_5
nkeynes@358
   154
	nop
nkeynes@358
   155
nkeynes@358
   156
test_fmov_4_input_a:
nkeynes@358
   157
	.long 0xACADACA0
nkeynes@358
   158
test_fmov_4_input_b:
nkeynes@358
   159
	.long 0x12233445
nkeynes@358
   160
	
nkeynes@358
   161
nkeynes@358
   162
test_fmov_5: ! double size @Rm to DRn, DRm to @Rn
nkeynes@358
   163
	add #1, r12
nkeynes@358
   164
	mova test_fmov_5_data_a, r0
nkeynes@358
   165
	mov r0, r4
nkeynes@358
   166
	xor r1, r1
nkeynes@358
   167
	mov.l r1, @r0
nkeynes@358
   168
	add #4, r0
nkeynes@358
   169
	mov.l r1, @r0
nkeynes@358
   170
	mova test_fmov_5_input_a, r0
nkeynes@358
   171
	fmov @r0, fr8
nkeynes@358
   172
	mov.l test_fmov_5_input_a, r0
nkeynes@358
   173
	mov.l test_fmov_5_input_b, r1
nkeynes@358
   174
	flds fr8, fpul
nkeynes@358
   175
	sts fpul, r5
nkeynes@358
   176
	flds fr9, fpul
nkeynes@358
   177
	sts fpul, r6
nkeynes@358
   178
	cmp/eq r0, r5
nkeynes@358
   179
	bf test_fmov_5_fail
nkeynes@358
   180
	cmp/eq r1, r6
nkeynes@358
   181
	bf test_fmov_5_fail
nkeynes@358
   182
	fmov fr8, @r4
nkeynes@358
   183
	mov.l test_fmov_5_data_a, r2
nkeynes@358
   184
	mov.l test_fmov_5_data_b, r3
nkeynes@358
   185
	cmp/eq r0, r2
nkeynes@358
   186
	bf test_fmov_5_fail
nkeynes@358
   187
	cmp/eq r1, r3
nkeynes@358
   188
	bt test_fmov_6
nkeynes@358
   189
test_fmov_5_fail:
nkeynes@358
   190
	fail test_fmov_str_k
nkeynes@358
   191
	bra test_fmov_6
nkeynes@358
   192
	nop
nkeynes@358
   193
	
nkeynes@358
   194
test_fmov_5_input_a:
nkeynes@358
   195
	.long 0xFEEDBEEF
nkeynes@358
   196
test_fmov_5_input_b:
nkeynes@358
   197
	.long 0xDEAD1234
nkeynes@358
   198
test_fmov_5_data_a:
nkeynes@358
   199
	.long 0
nkeynes@358
   200
test_fmov_5_data_b:	
nkeynes@358
   201
	.long 0
nkeynes@358
   202
nkeynes@358
   203
test_fmov_6:	! double size @Rm+ to DRn, DRm to @-Rn
nkeynes@358
   204
	add #1, r12
nkeynes@358
   205
	mova test_fmov_6_data_a, r0
nkeynes@358
   206
	mov r0, r4
nkeynes@358
   207
	xor r1, r1
nkeynes@358
   208
	mov.l r1, @r4
nkeynes@358
   209
	add #4, r4
nkeynes@358
   210
	mov.l r1, @r4
nkeynes@358
   211
	add #4, r4
nkeynes@358
   212
	mova test_fmov_6_input_a, r0
nkeynes@358
   213
	mov r0, r7
nkeynes@358
   214
	fmov @r7+, fr10
nkeynes@358
   215
	mov.l test_fmov_6_input_a, r0
nkeynes@358
   216
	mov.l test_fmov_6_input_b, r1
nkeynes@358
   217
	flds fr10, fpul
nkeynes@358
   218
	sts fpul, r5
nkeynes@358
   219
	flds fr11, fpul
nkeynes@358
   220
	sts fpul, r6
nkeynes@358
   221
	cmp/eq r0, r5
nkeynes@358
   222
	bf test_fmov_6_fail
nkeynes@358
   223
	cmp/eq r1, r6
nkeynes@358
   224
	bf test_fmov_6_fail
nkeynes@358
   225
	fmov fr10, @-r4
nkeynes@358
   226
	mov.l test_fmov_6_data_a, r2
nkeynes@358
   227
	mov.l test_fmov_6_data_b, r3
nkeynes@358
   228
	cmp/eq r0, r2
nkeynes@358
   229
	bf test_fmov_6_fail
nkeynes@358
   230
	cmp/eq r1, r3
nkeynes@358
   231
	bf test_fmov_6_fail
nkeynes@358
   232
	mova test_fmov_6_data_a, r0
nkeynes@358
   233
	cmp/eq r0, r4
nkeynes@358
   234
	bf test_fmov_6_fail
nkeynes@358
   235
	cmp/eq r0, r7
nkeynes@358
   236
	bt test_fmov_7
nkeynes@358
   237
test_fmov_6_fail:
nkeynes@358
   238
	fail test_fmov_str_k
nkeynes@358
   239
	bra test_fmov_7
nkeynes@358
   240
	nop
nkeynes@358
   241
	
nkeynes@358
   242
test_fmov_6_input_a:
nkeynes@358
   243
	.long 0x42318576
nkeynes@358
   244
test_fmov_6_input_b:
nkeynes@358
   245
	.long 0xF0AFD34F
nkeynes@358
   246
test_fmov_6_data_a:
nkeynes@358
   247
	.long 0
nkeynes@358
   248
test_fmov_6_data_b:	
nkeynes@358
   249
	.long 0
nkeynes@358
   250
	
nkeynes@358
   251
test_fmov_7:	! double size @Rm,@R0 to DRn, DRm to @Rn,@R0
nkeynes@358
   252
	add #1, r12
nkeynes@358
   253
	mova test_fmov_7_data_a, r0
nkeynes@358
   254
	mov r0, r4
nkeynes@358
   255
	xor r1, r1
nkeynes@358
   256
	mov.l r1, @r4
nkeynes@358
   257
	add #4, r4
nkeynes@358
   258
	mov.l r1, @r4
nkeynes@358
   259
	add #48, r4
nkeynes@358
   260
	mova test_fmov_7_input_a, r0
nkeynes@358
   261
	mov r0, r7
nkeynes@358
   262
	xor r0, r0
nkeynes@358
   263
	add #-31, r7
nkeynes@358
   264
	add #31, r0
nkeynes@358
   265
	fmov @(r0,r7), fr10
nkeynes@358
   266
	mov.l test_fmov_7_input_a, r0
nkeynes@358
   267
	mov.l test_fmov_7_input_b, r1
nkeynes@358
   268
	flds fr10, fpul
nkeynes@358
   269
	sts fpul, r5
nkeynes@358
   270
	flds fr11, fpul
nkeynes@358
   271
	sts fpul, r6
nkeynes@358
   272
	cmp/eq r0, r5
nkeynes@358
   273
	bf test_fmov_7_fail
nkeynes@358
   274
	cmp/eq r1, r6
nkeynes@358
   275
	bf test_fmov_7_fail
nkeynes@358
   276
	xor r0, r0
nkeynes@358
   277
	add #-52, r0
nkeynes@358
   278
	fmov fr10, @(r0,r4)
nkeynes@358
   279
	mov.l test_fmov_7_input_a, r0
nkeynes@358
   280
	mov.l test_fmov_7_data_a, r2
nkeynes@358
   281
	mov.l test_fmov_7_data_b, r3
nkeynes@358
   282
	cmp/eq r0, r2
nkeynes@358
   283
	bf test_fmov_7_fail
nkeynes@358
   284
	cmp/eq r1, r3
nkeynes@358
   285
	bf test_fmov_7_fail
nkeynes@358
   286
	mova test_fmov_7_data_a, r0
nkeynes@358
   287
	add #52, r0
nkeynes@358
   288
	cmp/eq r0, r4
nkeynes@358
   289
	bf test_fmov_7_fail
nkeynes@358
   290
	mova test_fmov_7_input_a, r0
nkeynes@358
   291
	add #-31, r0
nkeynes@358
   292
	cmp/eq r0, r7
nkeynes@358
   293
	bt test_fmov_8
nkeynes@358
   294
test_fmov_7_fail:
nkeynes@358
   295
	fail test_fmov_str_k
nkeynes@358
   296
	bra test_fmov_8
nkeynes@358
   297
	nop
nkeynes@358
   298
	
nkeynes@358
   299
test_fmov_7_input_a:
nkeynes@358
   300
	.long 0xABBACADA
nkeynes@358
   301
test_fmov_7_input_b:
nkeynes@358
   302
	.long 0x43546576
nkeynes@358
   303
test_fmov_7_data_a:
nkeynes@358
   304
	.long 0
nkeynes@358
   305
test_fmov_7_data_b:	
nkeynes@358
   306
	.long 0
nkeynes@732
   307
test_fmov_str_k:
nkeynes@732
   308
	.long test_fmov_str
nkeynes@358
   309
nkeynes@732
   310
! Test non-64-bit aligned memory read/writes with FMOV variants
nkeynes@732
   311
nkeynes@732
   312
test_fmov_8: ! @Rm to DRn
nkeynes@732
   313
	add #1, r12
nkeynes@732
   314
	mova test_fmov_ua64_a, r0
nkeynes@732
   315
	expect_exc 0x000000E0
nkeynes@732
   316
test_fmov_8_exc_pc:	
nkeynes@732
   317
	fmov @r0, fr8
nkeynes@732
   318
	assert_exc_caught test_fmov_str_k_2 test_fmov_8_exc_pc
nkeynes@732
   319
	
nkeynes@732
   320
test_fmov_9: ! DRm to @Rm
nkeynes@732
   321
	add #1, r12
nkeynes@732
   322
	mova test_fmov_ua64_a, r0
nkeynes@732
   323
	expect_exc 0x00000100
nkeynes@732
   324
test_fmov_9_exc_pc:
nkeynes@732
   325
	fmov fr8, @r0
nkeynes@732
   326
	assert_exc_caught test_fmov_str_k_2 test_fmov_9_exc_pc
nkeynes@732
   327
	
nkeynes@732
   328
test_fmov_10: ! @Rm+ to DRn
nkeynes@732
   329
	add #1, r12
nkeynes@732
   330
	mova test_fmov_ua64_a, r0
nkeynes@732
   331
	expect_exc 0x000000E0
nkeynes@732
   332
test_fmov_10_exc_pc:	
nkeynes@732
   333
	fmov @r0+, fr8
nkeynes@732
   334
	assert_exc_caught test_fmov_str_k_2 test_fmov_10_exc_pc
nkeynes@732
   335
	
nkeynes@732
   336
test_fmov_11: ! DRm to @Rm-
nkeynes@732
   337
	add #1, r12
nkeynes@732
   338
	mova test_fmov_ua64_a, r0
nkeynes@732
   339
	expect_exc 0x00000100
nkeynes@732
   340
test_fmov_11_exc_pc:
nkeynes@732
   341
	fmov fr8, @-r0
nkeynes@732
   342
	assert_exc_caught test_fmov_str_k_2 test_fmov_11_exc_pc
nkeynes@732
   343
nkeynes@732
   344
test_fmov_12: ! @(R0,Rm) to DRn
nkeynes@732
   345
	add #1, r12
nkeynes@732
   346
	mova test_fmov_ua64_pad, r0
nkeynes@732
   347
	mov #4, r4
nkeynes@732
   348
	expect_exc 0x000000E0
nkeynes@732
   349
test_fmov_12_exc_pc:	
nkeynes@732
   350
	fmov @(r0,r4), fr8
nkeynes@732
   351
	assert_exc_caught test_fmov_str_k_2 test_fmov_12_exc_pc
nkeynes@732
   352
	
nkeynes@732
   353
test_fmov_13: ! DRm to @(R0,Rn)
nkeynes@732
   354
	add #1, r12
nkeynes@732
   355
	mova test_fmov_ua64_pad, r0
nkeynes@732
   356
	mov #4, r4
nkeynes@732
   357
	expect_exc 0x00000100
nkeynes@732
   358
test_fmov_13_exc_pc:
nkeynes@732
   359
	fmov fr8, @(r0,r4)
nkeynes@732
   360
	assert_exc_caught test_fmov_str_k_2 test_fmov_13_exc_pc
nkeynes@732
   361
nkeynes@732
   362
	
nkeynes@732
   363
	bra test_fmov_end
nkeynes@732
   364
nkeynes@732
   365
nkeynes@732
   366
.align 8
nkeynes@732
   367
test_fmov_ua64_pad:
nkeynes@732
   368
	.long 0  ! ensure not aligned on 64-bit boundaries
nkeynes@732
   369
test_fmov_ua64_a:
nkeynes@732
   370
	.long 0x09080706
nkeynes@732
   371
test_fmov_u64_b:
nkeynes@732
   372
	.long 0x14253647
nkeynes@732
   373
nkeynes@358
   374
	
nkeynes@358
   375
test_fmov_end:
nkeynes@358
   376
	xor r0, r0
nkeynes@358
   377
	lds r0, fpscr
nkeynes@732
   378
	end_test test_fmov_str_k_2
nkeynes@358
   379
	
nkeynes@358
   380
test_fmov_str:
nkeynes@358
   381
	.string "FMOV"
nkeynes@358
   382
	
nkeynes@358
   383
.align 4
nkeynes@732
   384
test_fmov_str_k_2:
nkeynes@358
   385
	.long test_fmov_str
nkeynes@732
   386
	
.