зеркало из https://github.com/mozilla/gecko-dev.git
695 строки
13 KiB
ArmAsm
695 строки
13 KiB
ArmAsm
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
.SPACE $PRIVATE$
|
|
.SUBSPA $DATA$
|
|
|
|
.align 4
|
|
.EXPORT HPPAremI,DATA
|
|
HPPAremI:
|
|
.long _remI
|
|
|
|
.EXPORT HPPAremU,DATA
|
|
HPPAremU:
|
|
.long _remU
|
|
|
|
.EXPORT HPPAdivI,DATA
|
|
HPPAdivI:
|
|
.long _divI
|
|
|
|
.EXPORT HPPAdivU,DATA
|
|
HPPAdivU:
|
|
.long _divU
|
|
|
|
.EXPORT HPPASpecialCodeBegin,DATA
|
|
HPPASpecialCodeBegin:
|
|
.long _begin
|
|
|
|
.EXPORT HPPASpecialCodeEnd,DATA
|
|
HPPASpecialCodeEnd:
|
|
.long _end
|
|
|
|
.SPACE $TEXT$
|
|
.SUBSPA $CODE$
|
|
|
|
.align 4
|
|
_begin:
|
|
|
|
_remI:
|
|
addit,= 0,%arg1,%r0
|
|
add,>= %r0,%arg0,%ret1
|
|
sub %r0,%ret1,%ret1
|
|
sub %r0,%arg1,%r1
|
|
ds %r0,%r1,%r0
|
|
copy %r0,%r1
|
|
add %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
movb,>=,n %r1,%ret1,L5
|
|
add,< %arg1,%r0,%r0
|
|
add,tr %r1,%arg1,%ret1
|
|
sub %r1,%arg1,%ret1
|
|
L5: add,>= %arg0,%r0,%r0
|
|
sub %r0,%ret1,%ret1
|
|
bv %r0(%r31)
|
|
nop
|
|
|
|
.align 4
|
|
_remU:
|
|
comibf,<,n 0x0,%arg1,_remU_special_case
|
|
sub %r0,%arg1,%ret1
|
|
ds %r0,%ret1,%r0
|
|
add %arg0,%arg0,%r1
|
|
ds %r0,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
addc %r1,%r1,%r1
|
|
ds %ret1,%arg1,%ret1
|
|
comiclr,<= 0,%ret1,%r0
|
|
add %ret1,%arg1,%ret1
|
|
bv,n %r0(%r31)
|
|
nop
|
|
_remU_special_case:
|
|
addit,= 0,%arg1,%r0
|
|
sub,>>= %arg0,%arg1,%ret1
|
|
copy %arg0,%ret1
|
|
bv,n %r0(%r31)
|
|
nop
|
|
|
|
.align 4
|
|
_divI:
|
|
comibf,<<,n 0xf,%arg1,_divI_small_divisor
|
|
add,>= %r0,%arg0,%ret1
|
|
_divI_normal:
|
|
sub %r0,%ret1,%ret1
|
|
sub %r0,%arg1,%r1
|
|
ds %r0,%r1,%r0
|
|
add %ret1,%ret1,%ret1
|
|
ds %r0,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
xor,>= %arg0,%arg1,%r0
|
|
sub %r0,%ret1,%ret1
|
|
bv,n %r0(%r31)
|
|
nop
|
|
|
|
_divI_small_divisor:
|
|
blr,n %arg1,%r0
|
|
nop
|
|
addit,= 0,%arg1,%r0
|
|
nop
|
|
bv %r0(%r31)
|
|
copy %arg0,%ret1
|
|
b,n _divI_2
|
|
nop
|
|
b,n _divI_3
|
|
nop
|
|
b,n _divI_4
|
|
nop
|
|
b,n _divI_5
|
|
nop
|
|
b,n _divI_6
|
|
nop
|
|
b,n _divI_7
|
|
nop
|
|
b,n _divI_8
|
|
nop
|
|
b,n _divI_9
|
|
nop
|
|
b,n _divI_10
|
|
nop
|
|
b _divI_normal
|
|
add,>= %r0,%arg0,%ret1
|
|
b,n _divI_12
|
|
nop
|
|
b _divI_normal
|
|
add,>= %r0,%arg0,%ret1
|
|
b,n _divI_14
|
|
nop
|
|
b,n _divI_15
|
|
nop
|
|
|
|
.align 4
|
|
_divU:
|
|
comibf,< 0xf,%arg1,_divU_special_divisor
|
|
sub %r0,%arg1,%r1
|
|
ds %r0,%r1,%r0
|
|
_divU_normal:
|
|
add %arg0,%arg0,%ret1
|
|
ds %r0,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
addc %ret1,%ret1,%ret1
|
|
ds %r1,%arg1,%r1
|
|
bv %r0(%r31)
|
|
addc %ret1,%ret1,%ret1
|
|
_divU_special_divisor:
|
|
comibf,<= 0,%arg1,_divU_big_divisor
|
|
nop
|
|
blr %arg1,%r0
|
|
nop
|
|
_divU_small_divisor:
|
|
addit,= 0,%arg1,%r0
|
|
nop
|
|
bv %r0(%r31)
|
|
copy %arg0,%ret1
|
|
bv %r0(%r31)
|
|
extru %arg0,30,31,%ret1
|
|
b,n _divU_3
|
|
nop
|
|
bv %r0(%r31)
|
|
extru %arg0,29,30,%ret1
|
|
b,n _divU_5
|
|
nop
|
|
b,n _divU_6
|
|
nop
|
|
b,n _divU_7
|
|
nop
|
|
bv %r0(%r31)
|
|
extru %arg0,28,29,%ret1
|
|
b,n _divU_9
|
|
nop
|
|
b,n _divU_10
|
|
nop
|
|
b _divU_normal
|
|
ds %r0,%r1,%r0
|
|
b,n _divU_12
|
|
nop
|
|
b _divU_normal
|
|
ds %r0,%r1,%r0
|
|
b,n _divU_14
|
|
nop
|
|
b,n _divU_15
|
|
nop
|
|
_divU_big_divisor:
|
|
sub %arg0,%arg1,%r0
|
|
bv %r0(%r31)
|
|
addc %r0,%r0,%ret1
|
|
|
|
_divI_2:
|
|
comclr,>= %arg0,%r0,%r0
|
|
addi 1,%arg0,%arg0
|
|
bv %r0(%r31)
|
|
extrs %arg0,30,31,%ret1
|
|
|
|
_divI_4:
|
|
comclr,>= %arg0,%r0,%r0
|
|
addi 3,%arg0,%arg0
|
|
bv %r0(%r31)
|
|
extrs %arg0,29,30,%ret1
|
|
|
|
_divI_8:
|
|
comclr,>= %arg0,%r0,%r0
|
|
addi 7,%arg0,%arg0
|
|
bv %r0(%r31)
|
|
extrs %arg0,28,29,%ret1
|
|
|
|
_divI_3:
|
|
comb,<,n %arg0,%r0,_divI_neg3
|
|
addi 1,%arg0,%arg0
|
|
extru %arg0,1,2,%ret1
|
|
sh2add %arg0,%arg0,%arg0
|
|
b _divI_pos
|
|
addc %ret1,%r0,%ret1
|
|
_divI_neg3:
|
|
subi 1,%arg0,%arg0
|
|
extru %arg0,1,2,%ret1
|
|
sh2add %arg0,%arg0,%arg0
|
|
b _divI_neg
|
|
addc %ret1,%r0,%ret1
|
|
_divU_3:
|
|
addi 1,%arg0,%arg0
|
|
addc %r0,%r0,%ret1
|
|
shd %ret1,%arg0,30,%arg1
|
|
sh2add %arg0,%arg0,%arg0
|
|
b _divI_pos
|
|
addc %ret1,%arg1,%ret1
|
|
|
|
_divI_5:
|
|
comb,<,n %arg0,%r0,_divI_neg5
|
|
addi 3,%arg0,%arg1
|
|
sh1add %arg0,%arg1,%arg0
|
|
b _divI_pos
|
|
addc %r0,%r0,%ret1
|
|
_divI_neg5:
|
|
sub %r0,%arg0,%arg0
|
|
addi 1,%arg0,%arg0
|
|
shd %r0,%arg0,31,%ret1
|
|
sh1add %arg0,%arg0,%arg0
|
|
b _divI_neg
|
|
addc %ret1,%r0,%ret1
|
|
_divU_5:
|
|
addi 1,%arg0,%arg0
|
|
addc %r0,%r0,%ret1
|
|
shd %ret1,%arg0,31,%arg1
|
|
sh1add %arg0,%arg0,%arg0
|
|
b _divI_pos
|
|
addc %arg1,%ret1,%ret1
|
|
|
|
_divI_6:
|
|
comb,<,n %arg0,%r0,_divI_neg6
|
|
extru %arg0,30,31,%arg0
|
|
addi 5,%arg0,%arg1
|
|
sh2add %arg0,%arg1,%arg0
|
|
b _divI_pos
|
|
addc %r0,%r0,%ret1
|
|
_divI_neg6:
|
|
subi 2,%arg0,%arg0
|
|
extru %arg0,30,31,%arg0
|
|
shd %r0,%arg0,30,%ret1
|
|
sh2add %arg0,%arg0,%arg0
|
|
b _divI_neg
|
|
addc %ret1,%r0,%ret1
|
|
_divU_6:
|
|
extru %arg0,30,31,%arg0
|
|
addi 1,%arg0,%arg0
|
|
shd %r0,%arg0,30,%ret1
|
|
sh2add %arg0,%arg0,%arg0
|
|
b _divI_pos
|
|
addc %ret1,%r0,%ret1
|
|
|
|
_divI_10:
|
|
comb,< %arg0,%r0,_divI_neg10
|
|
copy %r0,%ret1
|
|
extru %arg0,30,31,%arg0
|
|
addibf 1,%arg0,_divI_pos
|
|
sh1add %arg0,%arg0,%arg0
|
|
_divI_neg10:
|
|
subi 2,%arg0,%arg0
|
|
extru %arg0,30,31,%arg0
|
|
sh1add %arg0,%arg0,%arg0
|
|
|
|
_divI_neg:
|
|
shd %ret1,%arg0,28,%arg1
|
|
shd %arg0,%r0,28,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%ret1
|
|
shd %ret1,%arg0,24,%arg1
|
|
shd %arg0,%r0,24,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%ret1
|
|
shd %ret1,%arg0,16,%arg1
|
|
shd %arg0,%r0,16,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%ret1
|
|
bv %r0(%r31)
|
|
sub %r0,%ret1,%ret1
|
|
|
|
_divU_10:
|
|
extru %arg0,30,31,%arg0
|
|
addi 3,%arg0,%arg1
|
|
sh1add %arg0,%arg1,%arg0
|
|
addc %r0,%r0,%ret1
|
|
|
|
_divI_pos:
|
|
shd %ret1,%arg0,28,%arg1
|
|
_divI_pos_for_15:
|
|
shd %arg0,%r0,28,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%ret1
|
|
shd %ret1,%arg0,24,%arg1
|
|
shd %arg0,%r0,24,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%ret1
|
|
shd %ret1,%arg0,16,%arg1
|
|
shd %arg0,%r0,16,%r1
|
|
add %arg0,%r1,%arg0
|
|
bv %r0(%r31)
|
|
addc %ret1,%arg1,%ret1
|
|
|
|
_divI_12:
|
|
comb,< %arg0,%r0,_divI_neg12
|
|
copy %r0,%ret1
|
|
extru %arg0,29,30,%arg0
|
|
addibf 1,%arg0,_divI_pos
|
|
sh2add %arg0,%arg0,%arg0
|
|
_divI_neg12:
|
|
subi 4,%arg0,%arg0
|
|
extru %arg0,29,30,%arg0
|
|
b _divI_neg
|
|
sh2add %arg0,%arg0,%arg0
|
|
_divU_12:
|
|
extru %arg0,29,30,%arg0
|
|
addi 5,%arg0,%arg1
|
|
sh2add %arg0,%arg1,%arg0
|
|
b _divI_pos
|
|
addc %r0,%r0,%ret1
|
|
|
|
_divI_15:
|
|
comb,< %arg0,%r0,_divI_neg15
|
|
copy %r0,%ret1
|
|
addibf 1,%arg0,_divI_pos_for_15
|
|
shd %ret1,%arg0,28,%arg1
|
|
_divI_neg15:
|
|
b _divI_neg
|
|
subi 1,%arg0,%arg0
|
|
_divU_15:
|
|
addi 1,%arg0,%arg0
|
|
b _divI_pos
|
|
addc %r0,%r0,%ret1
|
|
|
|
_divI_7:
|
|
comb,<,n %arg0,%r0,_divI_neg7
|
|
_divI_7a:
|
|
addi 1,%arg0,%arg0
|
|
shd %r0,%arg0,29,%ret1
|
|
sh3add %arg0,%arg0,%arg0
|
|
addc %ret1,%r0,%ret1
|
|
_divI_pos7:
|
|
shd %ret1,%arg0,26,%arg1
|
|
shd %arg0,%r0,26,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%ret1
|
|
shd %ret1,%arg0,20,%arg1
|
|
shd %arg0,%r0,20,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%arg1
|
|
copy %r0,%ret1
|
|
shd,= %arg1,%arg0,24,%arg1
|
|
L1: addbf %arg1,%ret1,L2
|
|
extru %arg0,31,24,%arg0
|
|
bv,n %r0(%r31)
|
|
L2: addbf %arg1,%arg0,L1
|
|
extru,= %arg0,7,8,%arg1
|
|
|
|
_divI_neg7:
|
|
subi 1,%arg0,%arg0
|
|
_divI_neg7a:
|
|
shd %r0,%arg0,29,%ret1
|
|
sh3add %arg0,%arg0,%arg0
|
|
addc %ret1,%r0,%ret1
|
|
_divI_neg7_shift:
|
|
shd %ret1,%arg0,26,%arg1
|
|
shd %arg0,%r0,26,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%ret1
|
|
shd %ret1,%arg0,20,%arg1
|
|
shd %arg0,%r0,20,%r1
|
|
add %arg0,%r1,%arg0
|
|
addc %ret1,%arg1,%arg1
|
|
copy %r0,%ret1
|
|
shd,= %arg1,%arg0,24,%arg1
|
|
L3: addbf %arg1,%ret1,L4
|
|
extru %arg0,31,24,%arg0
|
|
bv %r0(%r31)
|
|
sub %r0,%ret1,%ret1
|
|
L4: addbf %arg1,%arg0,L3
|
|
extru,= %arg0,7,8,%arg1
|
|
|
|
_divU_7:
|
|
addi 1,%arg0,%arg0
|
|
addc %r0,%r0,%ret1
|
|
shd %ret1,%arg0,29,%arg1
|
|
sh3add %arg0,%arg0,%arg0
|
|
b _divI_pos7
|
|
addc %arg1,%ret1,%ret1
|
|
|
|
_divI_9:
|
|
comb,<,n %arg0,%r0,_divI_neg9
|
|
addi 1,%arg0,%arg0
|
|
shd %r0,%arg0,29,%arg1
|
|
shd %arg0,%r0,29,%r1
|
|
sub %r1,%arg0,%arg0
|
|
b _divI_pos7
|
|
subb %arg1,%r0,%ret1
|
|
_divI_neg9:
|
|
subi 1,%arg0,%arg0
|
|
shd %r0,%arg0,29,%arg1
|
|
shd %arg0,%r0,29,%r1
|
|
sub %r1,%arg0,%arg0
|
|
b _divI_neg7_shift
|
|
subb %arg1,%r0,%ret1
|
|
_divU_9:
|
|
addi 1,%arg0,%arg0
|
|
addc %r0,%r0,%ret1
|
|
shd %ret1,%arg0,29,%arg1
|
|
shd %arg0,%r0,29,%r1
|
|
sub %r1,%arg0,%arg0
|
|
b _divI_pos7
|
|
subb %arg1,%ret1,%ret1
|
|
|
|
_divI_14:
|
|
comb,<,n %arg0,%r0,_divI_neg14
|
|
_divU_14:
|
|
b _divI_7a
|
|
extru %arg0,30,31,%arg0
|
|
_divI_neg14:
|
|
subi 2,%arg0,%arg0
|
|
b _divI_neg7a
|
|
extru %arg0,30,31,%arg0
|
|
|
|
_end:
|