Search
lxdream.org :: lxdream/test/sh4/div0.s
lxdream 0.9.1
released Jun 29
Download Now
filename test/sh4/div0.s
changeset 364:d738f6883d4a
author nkeynes
date Fri Feb 08 00:06:56 2008 +0000 (16 years ago)
permissions -rw-r--r--
last change Fix LDS/STS to FPUL/FPSCR to check the FPU disabled bit. Fixes
the linux 2.4.0-test8 kernel boot
(this wasn't exactly very well documented in the original manual)
file annotate diff log raw
nkeynes@364
     1
.section .text
nkeynes@364
     2
.include "sh4/inc.s"
nkeynes@364
     3
!
nkeynes@364
     4
! Test DIV0 operation
nkeynes@364
     5
!
nkeynes@364
     6
.global _test_div0
nkeynes@364
     7
_test_div0:
nkeynes@364
     8
	start_test
nkeynes@364
     9
	mov.l r11, @-r15
nkeynes@364
    10
	mov.l r10, @-r15
nkeynes@364
    11
nkeynes@364
    12
test_div0u:
nkeynes@364
    13
	add #1, r12
nkeynes@364
    14
	stc sr, r2
nkeynes@364
    15
	mov.l test_div0_sr_mask, r0
nkeynes@364
    16
	or r0, r2
nkeynes@364
    17
	ldc r2, sr
nkeynes@364
    18
nkeynes@364
    19
	div0u
nkeynes@364
    20
	stc sr, r3
nkeynes@364
    21
	mov r3, r4
nkeynes@364
    22
	and r0, r4
nkeynes@364
    23
	tst r4, r4
nkeynes@364
    24
	bf test_div0u_fail
nkeynes@364
    25
	not r0, r0
nkeynes@364
    26
	and r0, r3
nkeynes@364
    27
	and r0, r2
nkeynes@364
    28
	cmp/eq r2, r3
nkeynes@364
    29
	bt test_div0s
nkeynes@364
    30
test_div0u_fail:
nkeynes@364
    31
	fail test_div0_str_k
nkeynes@364
    32
	
nkeynes@364
    33
test_div0s:	
nkeynes@364
    34
	mova test_div0s_data, r0
nkeynes@364
    35
	mov r0, r11
nkeynes@364
    36
	mov #4, r10
nkeynes@364
    37
nkeynes@364
    38
test_div0s_loop:
nkeynes@364
    39
	add #1, r12
nkeynes@364
    40
	mov.l @r11+, r1
nkeynes@364
    41
	mov.l @r11+, r2
nkeynes@364
    42
	mov.l @r11+, r3
nkeynes@364
    43
	div0s r1,r2
nkeynes@364
    44
	stc sr, r4
nkeynes@364
    45
	mov.l test_div0_sr_mask, r0
nkeynes@364
    46
	and r0,r4
nkeynes@364
    47
	cmp/eq r3,r4
nkeynes@364
    48
	bt test_div0s_ok
nkeynes@364
    49
	fail test_div0_str_k
nkeynes@364
    50
test_div0s_ok:	
nkeynes@364
    51
	dt r10
nkeynes@364
    52
	bf test_div0s_loop
nkeynes@364
    53
	
nkeynes@364
    54
test_div0_end:
nkeynes@364
    55
	mov.l @r15+, r10
nkeynes@364
    56
	mov.l @r15+, r11
nkeynes@364
    57
	end_test test_div0_str_k
nkeynes@364
    58
nkeynes@364
    59
test_div0s_data:
nkeynes@364
    60
	.long 0x01234567
nkeynes@364
    61
	.long 0x12345678
nkeynes@364
    62
	.long 0x00000000
nkeynes@364
    63
	.long 0xFFFF8912
nkeynes@364
    64
	.long 0x7ABC1526
nkeynes@364
    65
	.long 0x00000201
nkeynes@364
    66
	.long 0x55443322
nkeynes@364
    67
	.long 0x80000234
nkeynes@364
    68
	.long 0x00000101
nkeynes@364
    69
	.long 0xFFFFFFFF
nkeynes@364
    70
	.long 0x9CD39495
nkeynes@364
    71
	.long 0x00000300
nkeynes@364
    72
	
nkeynes@364
    73
test_div0_sr_mask:
nkeynes@364
    74
	.long 0x00000301
nkeynes@364
    75
	
nkeynes@364
    76
test_div0_str_k:
nkeynes@364
    77
	.long test_div0_str
nkeynes@364
    78
test_div0_str:
nkeynes@364
    79
	.string "DIV0"
nkeynes@364
    80
	
.