📄 gps_a_c.lib
字号:
;
;FILE __dsub.c - software implementation of fp double precision subtract
;
;DESCRIPTION
;Performs a floating point subtract of double c from b. If result overflows
;then it sets errno to ERANGE and returns HUGE_VAL;
;
;MODIFICATION DETAILS
;01/NOV/2001 Karl Swepson Taken from CCLs XAP2 Library.
;26/OCT/2004 Andy Cromarty Improved legibility, removed all while(1) loops
; and added assert statements for debugging
;=============================================================================*/
;
;/* Copyright (C) Codemist Ltd, 1988 */
;/* Copyright (C) Cambridge Consultants Ltd, 1995 */
;/* Copyright (C) Cyan Technology Ltd, 2001, 2004 */
;
;#define __dsubX
;#include "__lib.h"
;#include "errno.h"
;#include "math.h"
;
;double __dsub(unsigned32 bh, unsigned32 bl, unsigned32 ch, unsigned32 cl)
;
$__dsub:
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?26.1:
st AL,@(-2,Y)
st AH,@(-1,Y)
st XH,@(-4,Y)
st X,@(-3,Y)
st AL,@(-7,Y) ; %r16 (__struct_result)
Lstab?0c:
;{
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?27.1:
Lstab?1c:
; bool ok;
; dblrep a;
;
; if (bh & 0x80000000)
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?31.1:
add Y,#-12
Lstab?2a:
ld AL,@(12,Y) ; %r34 (bh)
ld AH,@(11,Y) ; %r34 (bh)
ld AL,#0
and AH,#-32768
beq ?L4F1
; {
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?32.1:
; if (ch & 0x80000000)
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?33.1:
ld AL,@(16,Y) ; %r38 (ch)
ld AH,@(15,Y) ; %r38 (ch)
ld AL,#0
and AH,#-32768
beq ?L7F1
; {
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?34.1:
; ok = __fltdif(a.ua, ch, cl, bh, bl);
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?35.1:
ld AL,@(14,Y) ; %r36 (bl)
ld AH,@(13,Y) ; %r36 (bl)
st AL,@(-1,Y)
st AH,@(-2,Y)
ld AL,@(12,Y) ; %r34 (bh)
ld AH,@(11,Y) ; %r34 (bh)
st AL,@(-3,Y)
st AH,@(-4,Y)
ld AL,@(18,Y) ; %r40 (cl)
ld AH,@(17,Y) ; %r40 (cl)
st AL,@(-5,Y)
st AH,@(-6,Y)
ld AL,@(16,Y) ; %r38 (ch)
ld AH,@(15,Y) ; %r38 (ch)
st AL,@(-7,Y)
st AH,@(-8,Y)
st Y,@H'ffe1 ; %r0
ld AL,@H'ffe1 ; %r0
ld AH,@(-8,Y)
add Y,#-7
Lstab?3a:
bsr $__fltdif
add Y,#7
Lstab?4a:
st AL,@(7,Y) ; %r17 (ok)
bra ?L11F1
?L7F1:
; }
; else
; {
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?38.1:
; ok = __fltsum(a.ua, bh, bl, ch, cl);
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?39.1:
ld AL,@(18,Y) ; %r40 (cl)
ld AH,@(17,Y) ; %r40 (cl)
st AL,@(-1,Y)
st AH,@(-2,Y)
ld AL,@(16,Y) ; %r38 (ch)
ld AH,@(15,Y) ; %r38 (ch)
st AL,@(-3,Y)
st AH,@(-4,Y)
ld AL,@(14,Y) ; %r36 (bl)
ld AH,@(13,Y) ; %r36 (bl)
st AL,@(-5,Y)
st AH,@(-6,Y)
ld AL,@(12,Y) ; %r34 (bh)
ld AH,@(11,Y) ; %r34 (bh)
st AL,@(-7,Y)
st AH,@(-8,Y)
st Y,@H'ffe1 ; %r0
ld AL,@H'ffe1 ; %r0
ld AH,@(-8,Y)
add Y,#-7
Lstab?5a:
bsr $__fltsum
; a.ua[0] ^= 0x80000000;
st AL,@(14,Y) ; %r17 (ok)
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?40.1:
ld AL,@(8,Y) ; a+1
ld AH,@(7,Y) ; a
xor AH,#-32768
st AL,@(8,Y) ; a+1
st AH,@(7,Y) ; a
add Y,#7
Lstab?6a:
?L11F1:
bra ?L20F1
?L4F1:
; }
; }
; else if (ch & 0x80000000)
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?43.1:
ld AL,@(16,Y) ; %r38 (ch)
ld AH,@(15,Y) ; %r38 (ch)
ld AL,#0
and AH,#-32768
beq ?L16F1
; {
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?44.1:
; ok = __fltsum(a.ua, bh, bl, ch, cl);
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?45.1:
ld AL,@(18,Y) ; %r40 (cl)
ld AH,@(17,Y) ; %r40 (cl)
st AL,@(-1,Y)
st AH,@(-2,Y)
ld AL,@(16,Y) ; %r38 (ch)
ld AH,@(15,Y) ; %r38 (ch)
st AL,@(-3,Y)
st AH,@(-4,Y)
ld AL,@(14,Y) ; %r36 (bl)
ld AH,@(13,Y) ; %r36 (bl)
st AL,@(-5,Y)
st AH,@(-6,Y)
ld AL,@(12,Y) ; %r34 (bh)
ld AH,@(11,Y) ; %r34 (bh)
st AL,@(-7,Y)
st AH,@(-8,Y)
st Y,@H'ffe1 ; %r0
ld AL,@H'ffe1 ; %r0
ld AH,@(-8,Y)
add Y,#-7
Lstab?7a:
bsr $__fltsum
add Y,#7
Lstab?8a:
st AL,@(7,Y) ; %r17 (ok)
bra ?L20F1
?L16F1:
; }
; else
; {
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?48.1:
; ok = __fltdif(a.ua, bh, bl, ch, cl);
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?49.1:
ld AL,@(18,Y) ; %r40 (cl)
ld AH,@(17,Y) ; %r40 (cl)
st AL,@(-1,Y)
st AH,@(-2,Y)
ld AL,@(16,Y) ; %r38 (ch)
ld AH,@(15,Y) ; %r38 (ch)
st AL,@(-3,Y)
st AH,@(-4,Y)
ld AL,@(14,Y) ; %r36 (bl)
ld AH,@(13,Y) ; %r36 (bl)
st AL,@(-5,Y)
st AH,@(-6,Y)
ld AL,@(12,Y) ; %r34 (bh)
ld AH,@(11,Y) ; %r34 (bh)
st AL,@(-7,Y)
st AH,@(-8,Y)
st Y,@H'ffe1 ; %r0
ld AL,@H'ffe1 ; %r0
ld AH,@(-8,Y)
add Y,#-7
Lstab?9a:
bsr $__fltdif
add Y,#7
Lstab?10a:
st AL,@(7,Y) ; %r17 (ok)
?L20F1:
?L15F1:
; }
;
; if (!ok)
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?52.1:
ld AH,@(7,Y) ; %r17 (ok)
bne ?L23F1
; {
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?53.1:
; errno = ERANGE;
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?54.1:
ld AL,#34
st AL,@$errno
; a.d = HUGE_VAL;
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?55.1:
st Y,@H'ffe1 ; %r0
ld AL,@H'ffe1 ; %r0
st Y,@H'fffe
st AL,@H'ffe1 ; %r0
ld Y,@H'ffe1 ; %r0
ld X,#$__huge_v
ld AH,@(3,X)
st AH,@(3,Y)
ld AH,@(2,X)
st AH,@(2,Y)
ld AH,@(1,X)
st AH,@(1,Y)
ld AH,@(0,X)
st AH,@(0,Y)
ld Y,@H'fffe
ld AH,#0
st AH,@H'fffe
?L23F1:
; }
;
; return (a.d);
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?58.1:
st Y,@H'ffe1 ; %r0
ld AH,@H'ffe1 ; %r0
st AH,@H'ffe5 ; %r2
st Y,@H'fffe
ld Y,@(5,Y) ; %r16 (__struct_result)
ld X,@H'ffe5 ; %r2
ld AH,@(3,X)
st AH,@(3,Y)
ld AH,@(2,X)
st AH,@(2,Y)
ld AH,@(1,X)
st AH,@(1,Y)
ld AH,@(0,X)
st AH,@(0,Y)
ld Y,@H'fffe
ld AH,#0
st AH,@H'fffe
add Y,#12
ld XH,@(-4,Y)
bra @(-3,Y)
Lstab?11c:
;
^qqtemp_____dsub.'C:\Program Files\Cyan Technology\CyanIDE\C\library\__dsub.c'.?999999.1:
;}
;
;
;/* arch-tag: e75be070-ec5f-4742-ace3-1a2113459e15
; (do not change this comment) */
;
; .import $__fltdif
; .import $__fltsum
; .import $errno
; .import $__huge_v
;
; .export $__dsub
;
;
.stabs "C:\\Program Files\\Cyan Technology\\CyanIDE\\C\\library\\__dsub.c",100,0,0,0
.stabs "int:t1=r1;-32768;32767;",128,0,0,0
.stabs "char:t2=r2;0;127;",128,0,0,0
.stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
.stabs "unsigned int:t4=r1;0;65535;",128,0,0,0
.stabs "unsigned long int:t5=r1;0;-1;",128,0,0,0
.stabs "short int:t6=r1;-32768;32767;",128,0,0,0
.stabs "unsigned short int:t7=r1;0;65535;",128,0,0,0
.stabs "signed char:t8=r1;-128;127;",128,0,0,0
.stabs "unsigned char:t9=r1;0;255;",128,0,0,0
.stabs "float:t10=r1;4;0;",128,0,0,0
.stabs "double:t11=r1;8;0;",128,0,0,0
.stabs "long double:t12=r1;8;0;",128,0,0,0
.stabs "void:t13=13",128,0,0,0
.stabs "C:\\Program Files\\Cyan Technology\\CyanIDE\\C\\include\\__lib.h",132,0,0,-1
.stabs "_va_list:t14=*1",128,0,0,0
.stabs "fp_number:t17=15=u8i:16=s8sxmhi:5,0,32;mlo:5,32,32;;,0,64;d:11,0,64;;",128,0,0,0
.stabs "dblrep:T18=u8d:11,0,64;ua:19=ar1;0;1;5,0,64;;",128,0,0,0
.stabs "dblrep:t20=18",128,0,0,0
.stabs "__remain:G5",32,0,0,0
.stabs "__rndnxt:G5",32,0,0,0
.stabs "BlockStruct:T21=s6flag:22,0,16;size:1,16,16;cdr:23=*21,32,16;;",128,0,0,0
.stabs " :T22=eBLKFREE:4660,BLKACTIVE:22136,;",128,0,0,0
.stabs "BlockStruct:t24=21",128,0,0,0
.stabs "__huge_f:G10",32,0,0,0
.stabs "__IODESC:t32=25=s6is_string:1,0,16;d:26=u4string:27=*2,0,32;output_fn:28=*29=f1,0,32;input_fn:30=*31=f1,0,32;;,16,32;;",128,0,0,0
.stabs "fp_print_t:t33=f1",128,0,0,0
.stabs "__ungot:G1",32,0,0,0
.stabs "fp_scan_t:t34=f3",128,0,0,0
.stabs "C:\\Program Files\\Cyan Technology\\CyanIDE\\C\\include\\errno.h",132,0,0,-1
.stabs "errno:G1",32,0,0,0
.stabs "C:\\Program Files\\Cyan Technology\\CyanIDE\\C\\include\\math.h",132,0,0,-1
.stabs "__huge_v:G11",32,0,0,0
.stabs "C:\\Program Files\\Cyan Technology\\CyanIDE\\C\\library\\__dsub.c",132,0,0,-1
.stabs "__dsub:F11",36,0,27,$__dsub
.stabs "__struct_result:p35=*11",160,0,0,-14
.stabs "bh:p5",160,0,0,-2
.stabs "bl:p5",160,0,0,2
.stabs "ch:p5",160,0,0,6
.stabs "cl:p5",160,0,0,10
.stabs "!LR:3",128,0,0,-8
.stabs "!SP:p1",160,0,0,0
.stabn 192,0,0,Lstab?0c
.stabn 224,0,0,Lstab?1c
.stabs "ok:1",128,0,0,-10
.stabs "a:18",128,0,0,-24
.stabs "__struct_result:p35=*11",160,0,0,-14
.stabs "bh:p5",160,0,0,-2
.stabs "bl:p5",160,0,0,2
.stabs "ch:p5",160,0,0,6
.stabs "cl:p5",160,0,0,10
.stabs "!LR:3",128,0,0,-8
.stabs "!SP:p1",160,0,0,0
.stabn 192,0,0,Lstab?1c
.stabn 224,0,0,Lstab?2a
.stabs "ok:1",128,0,0,14
.stabs "a:18",128,0,0,0
.stabs "__struct_result:p35=*11",160,0,0,10
.stabs "bh:p5",160,0,0,22
.stabs "bl:p5",160,0,0,26
.stabs "ch:p5",160,0,0,30
.stabs "cl:p5",160,0,0,34
.stabs "!LR:3",128,0,0,16
.stabs "!SP:p1",160,0,0,24
.stabn 192,0,0,Lstab?2a
.stabn 224,0,0,Lstab?3a
.stabs "ok:1",128,0,0,28
.stabs "a:18",128,0,0,14
.stabs "__struct_result:p35=*11",160,0,0,24
.stabs "bh:p5",160,0,0,36
.stabs "bl:p5",160,0,0,40
.stabs "ch:p5",160,0,0,44
.stabs "cl:p5",160,0,0,48
.stabs "!LR:3",128,0,0,30
.stabs "!SP:p1",160,0,0,38
.stabn 192,0,0,Lstab?3a
.stabn 224,0,0,Lstab?4a
.stabs "ok:1",128,0,0,14
.stabs "a:18",128,0,0,0
.stabs "__struct_result:p35=*11",160,0,0,10
.stabs "bh:p5",160,0,0,22
.stabs "bl:p5",160,0,0,26
.stabs "ch:p5",160,0,0,30
.stabs "cl:p5",160,0,0,34
.stabs "!LR:3",128,0,0,16
.stabs "!SP:p1",160,0,0,24
.stabn 192,0,0,Lstab?4a
.stabn 224,0,0,Lstab?5a
.stabs "ok:1",128,0,0,28
.stabs "a:18",128,0,0,14
.stabs "__struct_result:p35=*11",160,0,0,24
.stabs "bh:p5",160,0,0,36
.stabs "bl:p5",160,0,0,40
.stabs "ch:p5",160,0,0,44
.stabs "cl:p5",160,0,0,48
.stabs "!LR:3",128,0,0,30
.stabs "!SP:p1",160,0,0,38
.stabn 192,0,0,Lstab?5a
.stabn 224,0,0,Lstab?6a
.stabs "ok:1",128,0,0,14
.stabs "a:18",128,0,0,0
.stabs "__struct_result:p35=*11",160,0,0,10
.stabs "bh:p5",160,0,0,22
.stabs "bl:p5",160,0,0,26
.stabs "ch:p5",160,0,0,30
.stabs "cl:p5",160,0,0,34
.stabs "!LR:3",128,0,0,16
.stabs "!SP:p1",160,0,0,24
.stabn 192,0,0,Lstab?6a
.stabn 224,0,0,Lstab?7a
.stabs "ok:1",128,0,0,28
.stabs "a:18",128,0,0,14
.stabs "__struct_result:p35=*11",160,0,0,24
.stabs "bh:p5",160,0,0,36
.stabs "bl:p5",160,0,0,40
.stabs "ch:p5",160,0,0,44
.stabs "cl:p5",160,0,0,48
.stabs "!LR:3",128,0,0,30
.stabs "!SP:p1",160,0,0,38
.stabn 192,0,0,Lstab?7a
.stabn 224,0,0,Lstab?8a
.stabs "ok:1",128,0,0,14
.stabs "a:18",128,0,0,0
.stabs "__struct_result:p35=*11",160,0,0,10
.stabs "bh:p5",160,0,0,22
.stabs "bl:p5",160,0,0,26
.stabs "ch:p5",160,0,0,30
.stabs "cl:p5",160,0,0,34
.stabs "!LR:3",128,0,0,16
.stabs "!SP:p1",160,0,0,24
.stabn 192,0,0,Lstab?8a
.stabn 224,0,0,Lstab?9a
.stabs "ok:1",128,0,0,28
.stabs "a:18",128,0,0,14
.stabs "__struct_result:p35=*11",160,0,0,24
.stabs "bh:p5",160,0,0,36
.stabs "bl:p5",160,0,0,40
.stabs "ch:p5",160,0,0,44
.stabs "cl:p5",160,0,0,48
.stabs "!LR:3",128,0,0,30
.stabs "!SP:p1",160,0,0,38
.stabn 192,0,0,Lstab?9a
.stabn 224,0,0,Lstab?10a
.stabs "ok:1",128,0,0,14
.stabs "a:18",128,0,0,0
.stabs "__struct_result:p35=*11",160,0,0,10
.stabs "bh:p5",160,0,0,22
.stabs "bl:p5",160,0,0,26
.stabs "ch:p5",160,0,0,30
.stabs "cl:p5",160,0,0,34
.stabs "!LR:3",128,0,0,16
.stabs "!SP:p1",160,0,0,24
.stabn 192,0,0,Lstab?10a
.stabn 224,0,0,Lstab?11c
;
ENDMOD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -