| Paul Mundt | 180ae20 | 2008-12-12 16:53:14 +0900 | [diff] [blame] | 1 | 	.global	__sdivsi3 | 
| Paul Mundt | 1031a3a | 2009-05-09 17:57:21 +0900 | [diff] [blame] | 2 | 	.global	__sdivsi3_1 | 
 | 3 | 	.global	__sdivsi3_2 | 
| Paul Mundt | 180ae20 | 2008-12-12 16:53:14 +0900 | [diff] [blame] | 4 | 	.section	.text..SHmedia32,"ax" | 
 | 5 | 	.align	2 | 
 | 6 |  | 
 | 7 | 	/* inputs: r4,r5 */ | 
 | 8 | 	/* clobbered: r1,r18,r19,r20,r21,r25,tr0 */ | 
 | 9 | 	/* result in r0 */ | 
 | 10 | __sdivsi3: | 
| Paul Mundt | 1031a3a | 2009-05-09 17:57:21 +0900 | [diff] [blame] | 11 | __sdivsi3_1: | 
| Paul Mundt | 180ae20 | 2008-12-12 16:53:14 +0900 | [diff] [blame] | 12 | 	ptb __div_table,tr0 | 
| Paul Mundt | 1031a3a | 2009-05-09 17:57:21 +0900 | [diff] [blame] | 13 | 	gettr tr0,r20 | 
| Paul Mundt | 180ae20 | 2008-12-12 16:53:14 +0900 | [diff] [blame] | 14 |  | 
| Paul Mundt | 1031a3a | 2009-05-09 17:57:21 +0900 | [diff] [blame] | 15 | __sdivsi3_2: | 
| Paul Mundt | 180ae20 | 2008-12-12 16:53:14 +0900 | [diff] [blame] | 16 | 	nsb r5, r1 | 
 | 17 | 	shlld r5, r1, r25    /* normalize; [-2 ..1, 1..2) in s2.62 */ | 
 | 18 | 	shari r25, 58, r21   /* extract 5(6) bit index (s2.4 with hole -1..1) */ | 
 | 19 | 	/* bubble */ | 
| Paul Mundt | 180ae20 | 2008-12-12 16:53:14 +0900 | [diff] [blame] | 20 | 	ldx.ub r20, r21, r19 /* u0.8 */ | 
 | 21 | 	shari r25, 32, r25   /* normalize to s2.30 */ | 
 | 22 | 	shlli r21, 1, r21 | 
 | 23 | 	muls.l r25, r19, r19 /* s2.38 */ | 
 | 24 | 	ldx.w r20, r21, r21  /* s2.14 */ | 
 | 25 | 	ptabs r18, tr0 | 
 | 26 | 	shari r19, 24, r19   /* truncate to s2.14 */ | 
 | 27 | 	sub r21, r19, r19    /* some 11 bit inverse in s1.14 */ | 
 | 28 | 	muls.l r19, r19, r21 /* u0.28 */ | 
 | 29 | 	sub r63, r1, r1 | 
 | 30 | 	addi r1, 92, r1 | 
 | 31 | 	muls.l r25, r21, r18 /* s2.58 */ | 
 | 32 | 	shlli r19, 45, r19   /* multiply by two and convert to s2.58 */ | 
 | 33 | 	/* bubble */ | 
 | 34 | 	sub r19, r18, r18 | 
 | 35 | 	shari r18, 28, r18   /* some 22 bit inverse in s1.30 */ | 
 | 36 | 	muls.l r18, r25, r0  /* s2.60 */ | 
 | 37 | 	muls.l r18, r4, r25 /* s32.30 */ | 
 | 38 | 	/* bubble */ | 
 | 39 | 	shari r0, 16, r19   /* s-16.44 */ | 
 | 40 | 	muls.l r19, r18, r19 /* s-16.74 */ | 
 | 41 | 	shari r25, 63, r0 | 
 | 42 | 	shari r4, 14, r18   /* s19.-14 */ | 
 | 43 | 	shari r19, 30, r19   /* s-16.44 */ | 
 | 44 | 	muls.l r19, r18, r19 /* s15.30 */ | 
 | 45 | 	xor r21, r0, r21    /* You could also use the constant 1 << 27. */ | 
 | 46 | 	add r21, r25, r21 | 
 | 47 | 	sub r21, r19, r21 | 
 | 48 | 	shard r21, r1, r21 | 
 | 49 | 	sub r21, r0, r0 | 
 | 50 | 	blink tr0, r63 | 
 | 51 | 	 | 
 | 52 | /* This table has been generated by divtab.c . | 
 | 53 | Defects for bias -330: | 
 | 54 |    Max defect: 6.081536e-07 at -1.000000e+00 | 
 | 55 |    Min defect: 2.849516e-08 at 1.030651e+00 | 
 | 56 |    Max 2nd step defect: 9.606539e-12 at -1.000000e+00 | 
 | 57 |    Min 2nd step defect: 0.000000e+00 at 0.000000e+00 | 
 | 58 |    Defect at 1: 1.238659e-07 | 
 | 59 |    Defect at -2: 1.061708e-07 */ | 
 | 60 |  | 
 | 61 | 	.balign 2 | 
 | 62 | 	.type	__div_table,@object | 
 | 63 | 	.size	__div_table,128 | 
 | 64 | /* negative division constants */ | 
 | 65 | 	.word	-16638 | 
 | 66 | 	.word	-17135 | 
 | 67 | 	.word	-17737 | 
 | 68 | 	.word	-18433 | 
 | 69 | 	.word	-19103 | 
 | 70 | 	.word	-19751 | 
 | 71 | 	.word	-20583 | 
 | 72 | 	.word	-21383 | 
 | 73 | 	.word	-22343 | 
 | 74 | 	.word	-23353 | 
 | 75 | 	.word	-24407 | 
 | 76 | 	.word	-25582 | 
 | 77 | 	.word	-26863 | 
 | 78 | 	.word	-28382 | 
 | 79 | 	.word	-29965 | 
 | 80 | 	.word	-31800 | 
 | 81 | /* negative division factors */ | 
 | 82 | 	.byte	66 | 
 | 83 | 	.byte	70 | 
 | 84 | 	.byte	75 | 
 | 85 | 	.byte	81 | 
 | 86 | 	.byte	87 | 
 | 87 | 	.byte	93 | 
 | 88 | 	.byte	101 | 
 | 89 | 	.byte	109 | 
 | 90 | 	.byte	119 | 
 | 91 | 	.byte	130 | 
 | 92 | 	.byte	142 | 
 | 93 | 	.byte	156 | 
 | 94 | 	.byte	172 | 
 | 95 | 	.byte	192 | 
 | 96 | 	.byte	214 | 
 | 97 | 	.byte	241 | 
 | 98 | 	.skip 16 | 
 | 99 | 	.global	__div_table | 
 | 100 | __div_table: | 
 | 101 | 	.skip 16 | 
 | 102 | /* positive division factors */ | 
 | 103 | 	.byte	241 | 
 | 104 | 	.byte	214 | 
 | 105 | 	.byte	192 | 
 | 106 | 	.byte	172 | 
 | 107 | 	.byte	156 | 
 | 108 | 	.byte	142 | 
 | 109 | 	.byte	130 | 
 | 110 | 	.byte	119 | 
 | 111 | 	.byte	109 | 
 | 112 | 	.byte	101 | 
 | 113 | 	.byte	93 | 
 | 114 | 	.byte	87 | 
 | 115 | 	.byte	81 | 
 | 116 | 	.byte	75 | 
 | 117 | 	.byte	70 | 
 | 118 | 	.byte	66 | 
 | 119 | /* positive division constants */ | 
 | 120 | 	.word	31801 | 
 | 121 | 	.word	29966 | 
 | 122 | 	.word	28383 | 
 | 123 | 	.word	26864 | 
 | 124 | 	.word	25583 | 
 | 125 | 	.word	24408 | 
 | 126 | 	.word	23354 | 
 | 127 | 	.word	22344 | 
 | 128 | 	.word	21384 | 
 | 129 | 	.word	20584 | 
 | 130 | 	.word	19752 | 
 | 131 | 	.word	19104 | 
 | 132 | 	.word	18434 | 
 | 133 | 	.word	17738 | 
 | 134 | 	.word	17136 | 
 | 135 | 	.word	16639 |