diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /device/lib/stm8 | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'device/lib/stm8')
618 files changed, 61191 insertions, 0 deletions
diff --git a/device/lib/stm8/Makefile b/device/lib/stm8/Makefile new file mode 100644 index 0000000..24e9d20 --- /dev/null +++ b/device/lib/stm8/Makefile @@ -0,0 +1,92 @@ +# libc/stm8 Makefile + + +srcdir = . +top_builddir = ../../.. + +LIB_TYPE = RANLIB + +SCC = $(top_builddir)/bin/sdcc -mstm8 +SAS = $(top_builddir)/bin/sdasstm8 + +# override PORTDIR defined by super (parent) makefile +override PORTDIR = ../build/stm8 + +include $(srcdir)/../incl.mk + +STM8_FLOAT = $(COMMON_FLOAT) + +STM8_INT = _mulschar.c _divschar.c _modschar.c + +STM8_LONG = + +STM8_LONGLONG = $(COMMON_LONGLONG) \ + _rrulonglong.c \ + _rrslonglong.c \ + _rlulonglong.c \ + _rlslonglong.c \ + _mullonglong.c \ + _divslonglong.c \ + _divulonglong.c \ + _modslonglong.c \ + _modulonglong.c + +STM8_SDCC = $(COMMON_SDCC) \ + _itoa.c \ + _ltoa.c \ + _startup.c \ + _strlen.c \ + _memmove.c \ + sprintf.c \ + vprintf.c + +STM8SOURCES = $(addprefix ../,$(STM8_FLOAT) $(STM8_INT) $(STM8_LONG) $(STM8_LONGLONG) $(STM8_SDCC)) +STM8OBJECTS = $(patsubst %.c,%.rel,$(STM8_FLOAT) $(STM8_INT) $(STM8_LONG) $(STM8_LONGLONG) $(STM8_SDCC)) + +OBJ = setjmp.rel _mulint.rel __mulsint2slong.rel _divsint.rel _modsint.rel _mullong.rel _divulong.rel _modulong.rel _divslong.rel _modslong.rel _fast_long_neg.rel heap.rel strcpy.rel strcmp.rel memcpy.rel + +LIB = stm8.lib +CC = $(SCC) +AS = $(SAS) +ASFLAGS = -plosgff + +CFLAGS = -I$(srcdir)/../../include -I. --std-c11 + +all: $(PORTDIR)/$(LIB) + +$(PORTDIR)/$(LIB): $(OBJ) $(STM8OBJECTS) Makefile +ifeq ($(LIB_TYPE), SDCCLIB) + rm -f $@; \ + $(top_builddir)/bin/sdcclib -a $@ $(OBJ) $(STM8OBJECTS) +else + ifeq ($(LIB_TYPE), AR) + $(top_builddir)/bin/sdar -rcSD $@ $(OBJ) $(STM8OBJECTS) + else + ifeq ($(LIB_TYPE), RANLIB) + $(top_builddir)/bin/sdar -rcD $@ $(OBJ) $(STM8OBJECTS) + else + rm -f $@ + for i in $(basename $(OBJ) $(STM8OBJECTS)); do echo $$i >>$@; done + cp $(OBJ) $(STM8OBJECTS) $(PORTDIR) + endif + endif +endif + +%.rel: %.c + $(CC) $(CFLAGS) -c $< + +%.rel: %.s + @# TODO: sdas should place it\'s output in the current dir + test $(srcdir) = . || cp $< . + -$(AS) $(ASFLAGS) $(notdir $<) + test $(srcdir) = . || rm $(notdir $<) + +%.rel: ../%.c + $(CC) $(CFLAGS) -c $< + +clean: + rm -f *.rel *.sym *.lst *~ $(CLEANSPEC) *.dump* *.asm *.lib + +distclean: clean + rm -f Makefile + diff --git a/device/lib/stm8/Makefile.in b/device/lib/stm8/Makefile.in new file mode 100644 index 0000000..792b927 --- /dev/null +++ b/device/lib/stm8/Makefile.in @@ -0,0 +1,92 @@ +# libc/stm8 Makefile + +VPATH = @srcdir@ +srcdir = @srcdir@ +top_builddir = @top_builddir@ + +LIB_TYPE = @LIB_TYPE@ + +SCC = $(top_builddir)/bin/sdcc -mstm8 +SAS = $(top_builddir)/bin/sdasstm8 + +# override PORTDIR defined by super (parent) makefile +override PORTDIR = ../build/stm8 + +include $(srcdir)/../incl.mk + +STM8_FLOAT = $(COMMON_FLOAT) + +STM8_INT = _mulschar.c _divschar.c _modschar.c + +STM8_LONG = + +STM8_LONGLONG = $(COMMON_LONGLONG) \ + _rrulonglong.c \ + _rrslonglong.c \ + _rlulonglong.c \ + _rlslonglong.c \ + _mullonglong.c \ + _divslonglong.c \ + _divulonglong.c \ + _modslonglong.c \ + _modulonglong.c + +STM8_SDCC = $(COMMON_SDCC) \ + _itoa.c \ + _ltoa.c \ + _startup.c \ + _strlen.c \ + _memmove.c \ + sprintf.c \ + vprintf.c + +STM8SOURCES = $(addprefix ../,$(STM8_FLOAT) $(STM8_INT) $(STM8_LONG) $(STM8_LONGLONG) $(STM8_SDCC)) +STM8OBJECTS = $(patsubst %.c,%.rel,$(STM8_FLOAT) $(STM8_INT) $(STM8_LONG) $(STM8_LONGLONG) $(STM8_SDCC)) + +OBJ = setjmp.rel _mulint.rel __mulsint2slong.rel _divsint.rel _modsint.rel _mullong.rel _divulong.rel _modulong.rel _divslong.rel _modslong.rel _fast_long_neg.rel heap.rel strcpy.rel strcmp.rel memcpy.rel + +LIB = stm8.lib +CC = $(SCC) +AS = $(SAS) +ASFLAGS = -plosgff + +CFLAGS = -I$(srcdir)/../../include -I. --std-c11 + +all: $(PORTDIR)/$(LIB) + +$(PORTDIR)/$(LIB): $(OBJ) $(STM8OBJECTS) Makefile +ifeq ($(LIB_TYPE), SDCCLIB) + rm -f $@; \ + $(top_builddir)/bin/sdcclib -a $@ $(OBJ) $(STM8OBJECTS) +else + ifeq ($(LIB_TYPE), AR) + $(top_builddir)/bin/sdar -rcSD $@ $(OBJ) $(STM8OBJECTS) + else + ifeq ($(LIB_TYPE), RANLIB) + $(top_builddir)/bin/sdar -rcD $@ $(OBJ) $(STM8OBJECTS) + else + rm -f $@ + for i in $(basename $(OBJ) $(STM8OBJECTS)); do echo $$i >>$@; done + cp $(OBJ) $(STM8OBJECTS) $(PORTDIR) + endif + endif +endif + +%.rel: %.c + $(CC) $(CFLAGS) -c $< + +%.rel: %.s + @# TODO: sdas should place it\'s output in the current dir + test $(srcdir) = . || cp $< . + -$(AS) $(ASFLAGS) $(notdir $<) + test $(srcdir) = . || rm $(notdir $<) + +%.rel: ../%.c + $(CC) $(CFLAGS) -c $< + +clean: + rm -f *.rel *.sym *.lst *~ $(CLEANSPEC) *.dump* *.asm *.lib + +distclean: clean + rm -f Makefile + diff --git a/device/lib/stm8/__assert.asm b/device/lib/stm8/__assert.asm new file mode 100644 index 0000000..a070aee --- /dev/null +++ b/device/lib/stm8/__assert.asm @@ -0,0 +1,81 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module __assert + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___assert + .globl _printf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../__assert.c: 32: void __assert(const char *expression, const char *functionname, const char *filename, unsigned int linenumber) +; ----------------------------------------- +; function __assert +; ----------------------------------------- +___assert: +; ../__assert.c: 34: printf("Assert(%s) failed in function %s at line %u in file %s.\n", + ldw x, (0x07, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + call _printf + addw sp, #10 +00103$: + jra 00103$ +; ../__assert.c: 37: } + ret + .area CODE + .area CONST + .area CONST +___str_0: + .ascii "Assert(%s) failed in function %s at line %u in file %s." + .db 0x0a + .db 0x00 + .area CODE + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/__assert.lst b/device/lib/stm8/__assert.lst new file mode 100644 index 0000000..d12cb2e --- /dev/null +++ b/device/lib/stm8/__assert.lst @@ -0,0 +1,88 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module __assert + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___assert + 12 .globl _printf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../__assert.c: 32: void __assert(const char *expression, const char *functionname, const char *filename, unsigned int linenumber) + 51 ; ----------------------------------------- + 52 ; function __assert + 53 ; ----------------------------------------- + 000000 54 ___assert: + 55 ; ../__assert.c: 34: printf("Assert(%s) failed in function %s at line %u in file %s.\n", + 000000 1E 07 [ 2] 56 ldw x, (0x07, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 0B [ 2] 58 ldw x, (0x0b, sp) + 000005 89 [ 2] 59 pushw x + 000006 1E 09 [ 2] 60 ldw x, (0x09, sp) + 000008 89 [ 2] 61 pushw x + 000009 1E 09 [ 2] 62 ldw x, (0x09, sp) + 00000B 89 [ 2] 63 pushw x + 00000C 4Br00 [ 1] 64 push #<(___str_0 + 0) + 00000E 4Bs00 [ 1] 65 push #((___str_0 + 0) >> 8) + 000010 CDr00r00 [ 4] 66 call _printf + 000013 5B 0A [ 2] 67 addw sp, #10 + 000015 68 00103$: + 000015 20 FE [ 2] 69 jra 00103$ + 70 ; ../__assert.c: 37: } + 000017 81 [ 4] 71 ret + 72 .area CODE + 73 .area CONST + 74 .area CONST + 000000 75 ___str_0: + 000000 41 73 73 65 72 74 28 76 .ascii "Assert(%s) failed in function %s at line %u in file %s." + 25 73 29 20 66 61 69 + 6C 65 64 20 69 6E 20 + 66 75 6E 63 74 69 6F + 6E 20 25 73 20 61 74 + 20 6C 69 6E 65 20 25 + 75 20 69 6E 20 66 69 + 6C 65 20 25 73 2E + 000037 0A 77 .db 0x0a + 000038 00 78 .db 0x00 + 79 .area CODE + 80 .area INITIALIZER + 81 .area CABS (ABS) diff --git a/device/lib/stm8/__assert.rel b/device/lib/stm8/__assert.rel new file mode 100644 index 0000000..446e22e --- /dev/null +++ b/device/lib/stm8/__assert.rel @@ -0,0 +1,42 @@ +XH3 +H B areas 3 global symbols +M __assert +O -mstm8 +S .__.ABS. Def000000 +S _printf Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 39 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 18 flags 0 addr 0 +S ___assert Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 07 89 1E 0B 89 1E 09 89 1E 09 89 4B +R 00 00 00 09 +T 00 00 0D 00 00 00 4B 00 00 00 CD +R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07 +T 00 00 11 00 00 5B 0A +R 00 00 00 09 02 03 00 01 +T 00 00 15 +R 00 00 00 09 +T 00 00 15 20 FE 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 07 +T 00 00 00 41 73 73 65 72 74 28 25 73 29 20 66 61 +R 00 00 00 07 +T 00 00 0D 69 6C 65 64 20 69 6E 20 66 75 6E 63 74 +R 00 00 00 07 +T 00 00 1A 69 6F 6E 20 25 73 20 61 74 20 6C 69 6E +R 00 00 00 07 +T 00 00 27 65 20 25 75 20 69 6E 20 66 69 6C 65 20 +R 00 00 00 07 +T 00 00 34 25 73 2E 0A 00 +R 00 00 00 07 diff --git a/device/lib/stm8/__assert.sym b/device/lib/stm8/__assert.sym new file mode 100644 index 0000000..5b674e6 --- /dev/null +++ b/device/lib/stm8/__assert.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___assert 000000 GR + 7 ___str_0 000000 R + _printf ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 39 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 18 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/__mulsint2slong.lst b/device/lib/stm8/__mulsint2slong.lst new file mode 100644 index 0000000..09585fa --- /dev/null +++ b/device/lib/stm8/__mulsint2slong.lst @@ -0,0 +1,106 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; __mulsint2slong.s + 3 ; + 4 ; Copyright (C) 2016, Philipp Klaus Krause + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl ___mulsint2slong + 30 .globl ___muluint2ulong + 31 + 32 .area CODE + 33 + 000000 34 ___muluint2ulong: + 000000 4F [ 1] 35 clr a + 000001 1E 05 [ 2] 36 ldw x, (5, sp) + 000003 20 11 [ 2] 37 jra right_nonneg + 38 + 000005 39 ___mulsint2slong: + 40 + 41 ; Handle signed operands + 000005 4F [ 1] 42 clr a + 000006 1E 03 [ 2] 43 ldw x, (3, sp) + 000008 2A 04 [ 1] 44 jrpl left_nonneg + 00000A 43 [ 1] 45 cpl a + 00000B 50 [ 2] 46 negw x + 00000C 1F 03 [ 2] 47 ldw (3, sp), x + 00000E 48 left_nonneg: + 00000E 1E 05 [ 2] 49 ldw x, (5, sp) + 000010 2A 04 [ 1] 50 jrpl right_nonneg + 000012 43 [ 1] 51 cpl a + 000013 50 [ 2] 52 negw x + 000014 1F 05 [ 2] 53 ldw (5, sp), x + 000016 54 right_nonneg: + 55 + 000016 52 04 [ 2] 56 sub sp, #4 + 000018 88 [ 1] 57 push a + 58 + 59 ; Multiply lower bytes + 000019 7B 09 [ 1] 60 ld a, (5+4, sp) + 00001B 42 [ 4] 61 mul x, a + 00001C 1F 04 [ 2] 62 ldw (4, sp), x + 63 + 64 ; Multiply upper bytes + 00001E 1E 07 [ 2] 65 ldw x, (5+2, sp) + 000020 7B 0A [ 1] 66 ld a, (5+5, sp) + 000022 42 [ 4] 67 mul x, a + 000023 1F 02 [ 2] 68 ldw (2, sp), x + 69 + 70 ; Multiply middle bytes + 000025 7B 0A [ 1] 71 ld a, (5+5, sp) + 000027 27 0E [ 1] 72 jreq skip_m1 + 000029 1E 08 [ 2] 73 ldw x, (5+3, sp) + 00002B 42 [ 4] 74 mul x, a + 00002C 72 FB 03 [ 2] 75 addw x, (3, sp) + 00002F 1F 03 [ 2] 76 ldw (3, sp), x + 000031 7B 02 [ 1] 77 ld a, (2, sp) + 000033 A9 00 [ 1] 78 adc a, #0 + 000035 6B 02 [ 1] 79 ld (2, sp), a + 000037 80 skip_m1: + 81 + 000037 7B 08 [ 1] 82 ld a, (5+3, sp) + 000039 27 0E [ 1] 83 jreq skip_m2 + 00003B 1E 0A [ 2] 84 ldw x, (5+5, sp) + 00003D 42 [ 4] 85 mul x, a + 00003E 72 FB 03 [ 2] 86 addw x, (3, sp) + 000041 1F 03 [ 2] 87 ldw (3, sp), x + 000043 7B 02 [ 1] 88 ld a, (2, sp) + 000045 A9 00 [ 1] 89 adc a, #0 + 000047 6B 02 [ 1] 90 ld (2, sp), a + 000049 91 skip_m2: + 92 + 93 ; Handle signed result + 000049 84 [ 1] 94 pop a + 00004A 90 85 [ 2] 95 popw y + 00004C 85 [ 2] 96 popw x + 00004D 4D [ 1] 97 tnz a + 00004E 2A 07 [ 1] 98 jrpl end + 000050 50 [ 2] 99 negw x + 000051 24 02 [ 1] 100 jrnc neg_y + 000053 90 5C [ 1] 101 incw y + 000055 102 neg_y: + 000055 90 50 [ 2] 103 negw y + 000057 104 end: + 000057 81 [ 4] 105 ret + 106 diff --git a/device/lib/stm8/__mulsint2slong.rel b/device/lib/stm8/__mulsint2slong.rel new file mode 100644 index 0000000..e3d39e3 --- /dev/null +++ b/device/lib/stm8/__mulsint2slong.rel @@ -0,0 +1,45 @@ +XH3 +H 2 areas 3 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 58 flags 0 addr 0 +S ___muluint2ulong Def000000 +S ___mulsint2slong Def000005 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 4F 1E 05 20 11 +R 00 00 00 01 +T 00 00 05 +R 00 00 00 01 +T 00 00 05 4F 1E 03 2A 04 43 50 1F 03 +R 00 00 00 01 +T 00 00 0E +R 00 00 00 01 +T 00 00 0E 1E 05 2A 04 43 50 1F 05 +R 00 00 00 01 +T 00 00 16 +R 00 00 00 01 +T 00 00 16 52 04 88 7B 09 42 1F 04 1E 07 7B 0A 42 +R 00 00 00 01 +T 00 00 23 1F 02 7B 0A 27 0E 1E 08 42 72 FB 03 1F +R 00 00 00 01 +T 00 00 30 03 7B 02 A9 00 6B 02 +R 00 00 00 01 +T 00 00 37 +R 00 00 00 01 +T 00 00 37 7B 08 27 0E 1E 0A 42 72 FB 03 1F 03 7B +R 00 00 00 01 +T 00 00 44 02 A9 00 6B 02 +R 00 00 00 01 +T 00 00 49 +R 00 00 00 01 +T 00 00 49 84 90 85 85 4D 2A 07 50 24 02 90 5C +R 00 00 00 01 +T 00 00 55 +R 00 00 00 01 +T 00 00 55 90 50 +R 00 00 00 01 +T 00 00 57 +R 00 00 00 01 +T 00 00 57 81 +R 00 00 00 01 diff --git a/device/lib/stm8/__mulsint2slong.s b/device/lib/stm8/__mulsint2slong.s new file mode 100644 index 0000000..8d8050c --- /dev/null +++ b/device/lib/stm8/__mulsint2slong.s @@ -0,0 +1,106 @@ +;-------------------------------------------------------------------------- +; __mulsint2slong.s +; +; Copyright (C) 2016, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + +.globl ___mulsint2slong +.globl ___muluint2ulong + +.area CODE + +___muluint2ulong: + clr a + ldw x, (5, sp) + jra right_nonneg + +___mulsint2slong: + + ; Handle signed operands + clr a + ldw x, (3, sp) + jrpl left_nonneg + cpl a + negw x + ldw (3, sp), x +left_nonneg: + ldw x, (5, sp) + jrpl right_nonneg + cpl a + negw x + ldw (5, sp), x +right_nonneg: + + sub sp, #4 + push a + + ; Multiply lower bytes + ld a, (5+4, sp) + mul x, a + ldw (4, sp), x + + ; Multiply upper bytes + ldw x, (5+2, sp) + ld a, (5+5, sp) + mul x, a + ldw (2, sp), x + + ; Multiply middle bytes + ld a, (5+5, sp) + jreq skip_m1 + ldw x, (5+3, sp) + mul x, a + addw x, (3, sp) + ldw (3, sp), x + ld a, (2, sp) + adc a, #0 + ld (2, sp), a +skip_m1: + + ld a, (5+3, sp) + jreq skip_m2 + ldw x, (5+5, sp) + mul x, a + addw x, (3, sp) + ldw (3, sp), x + ld a, (2, sp) + adc a, #0 + ld (2, sp), a +skip_m2: + + ; Handle signed result + pop a + popw y + popw x + tnz a +jrpl end + negw x +jrnc neg_y + incw y +neg_y: + negw y +end: + ret + diff --git a/device/lib/stm8/__mulsint2slong.sym b/device/lib/stm8/__mulsint2slong.sym new file mode 100644 index 0000000..b4a66ae --- /dev/null +++ b/device/lib/stm8/__mulsint2slong.sym @@ -0,0 +1,18 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 ___mulsi 000005 GR | 1 ___mului 000000 GR + 1 end 000057 R | 1 left_non 00000E R | 1 neg_y 000055 R + 1 right_no 000016 R | 1 skip_m1 000037 R | 1 skip_m2 000049 R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 58 flags 0 + diff --git a/device/lib/stm8/_atof.asm b/device/lib/stm8/_atof.asm new file mode 100644 index 0000000..0491471 --- /dev/null +++ b/device/lib/stm8/_atof.asm @@ -0,0 +1,310 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _atof + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _atoi + .globl _toupper + .globl _isspace + .globl _atof +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_atof.c: 33: float atof(const char * s) +; ----------------------------------------- +; function atof +; ----------------------------------------- +_atof: + sub sp, #17 +; ../_atof.c: 40: while (isspace(*s)) s++; + ldw y, (0x14, sp) + ldw (0x10, sp), y +00101$: + ldw x, (0x10, sp) + ld a, (x) + clrw x + ld xl, a + pushw x + call _isspace + addw sp, #2 + ldw y, (0x10, sp) + incw y + tnzw x + jreq 00155$ + ldw (0x10, sp), y + jra 00101$ +00155$: + ldw x, (0x10, sp) + ldw (0x14, sp), x +; ../_atof.c: 43: if (*s == '-') + ldw x, (0x10, sp) + ld a, (x) + cp a, #0x2d + jrne 00107$ +; ../_atof.c: 45: sign=1; + ld a, #0x01 + ld (0x05, sp), a +; ../_atof.c: 46: s++; + ldw (0x14, sp), y + jra 00108$ +00107$: +; ../_atof.c: 50: sign=0; + clr (0x05, sp) +; ../_atof.c: 51: if (*s == '+') s++; + cp a, #0x2b + jrne 00108$ + ldw (0x14, sp), y +00108$: +; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++) + clrw x + ldw (0x08, sp), x + ldw (0x06, sp), x + ldw y, (0x14, sp) + ldw (0x0c, sp), y +00126$: + ldw x, (0x0c, sp) + ld a, (x) + ld (0x0e, sp), a + ld (0x0f, sp), a + ldw x, (0x0c, sp) + incw x + ldw (0x10, sp), x +; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + ld a, (0x0f, sp) + cp a, #0x30 + jrc 00156$ + cp a, #0x39 + jrugt 00156$ +; ../_atof.c: 57: value=10.0*value+(*s-'0'); + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + clrw x + pushw x + push #0x20 + push #0x41 + call ___fsmul + addw sp, #8 + ldw (0x0c, sp), x + ldw (0x0a, sp), y + clrw x + ld a, (0x0e, sp) + ld xl, a + subw x, #0x0030 + pushw x + call ___sint2fs + addw sp, #2 + pushw x + pushw y + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x08, sp), x + ldw (0x06, sp), y +; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++) + ldw y, (0x10, sp) + ldw (0x0c, sp), y + jra 00126$ +00156$: + ldw y, (0x0c, sp) + ldw (0x14, sp), y +; ../_atof.c: 61: if (*s == '.') + ld a, (0x0e, sp) + cp a, #0x2e + jrne 00112$ +; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++) + ldw x, #0xcccd + ldw (0x0c, sp), x + ldw x, #0x3dcc + ldw (0x0a, sp), x +00129$: + ldw x, (0x10, sp) + ld a, (x) + ld (0x0e, sp), a +; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + ld (0x0f, sp), a + cp a, #0x30 + jrc 00157$ + ld a, (0x0f, sp) + cp a, #0x39 + jrugt 00157$ +; ../_atof.c: 66: value+=(*s-'0')*fraction; + clrw x + ld a, (0x0e, sp) + ld xl, a + subw x, #0x0030 + pushw x + call ___sint2fs + addw sp, #2 + ldw (0x03, sp), x + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + ldw x, (0x07, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x08, sp), x + ldw (0x06, sp), y +; ../_atof.c: 67: fraction*=0.1; + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + push #0xcd + push #0xcc + push #0xcc + push #0x3d + call ___fsmul + addw sp, #8 + ldw (0x0c, sp), x + ldw (0x0a, sp), y +; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++) + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x + jra 00129$ +00157$: + ldw y, (0x10, sp) + ldw (0x14, sp), y +00112$: +; ../_atof.c: 72: if (toupper(*s)=='E') + ldw y, (0x14, sp) + ldw (0x10, sp), y + ldw x, y + ld a, (x) + clrw x + ld xl, a + pushw x + call _toupper + addw sp, #2 + cpw x, #0x0045 + jrne 00120$ +; ../_atof.c: 74: s++; + ldw x, (0x10, sp) + incw x +; ../_atof.c: 75: iexp=(signed char)atoi(s); + ldw (0x14, sp), x + pushw x + call _atoi + addw sp, #2 + ld a, xl +; ../_atof.c: 77: while(iexp!=0) +00116$: + tnz a + jreq 00120$ +; ../_atof.c: 79: if(iexp<0) + tnz a + jrpl 00114$ +; ../_atof.c: 81: value*=0.1; + push a + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + push #0xcd + push #0xcc + push #0xcc + push #0x3d + call ___fsmul + addw sp, #8 + pop a + ldw (0x08, sp), x + ldw (0x06, sp), y +; ../_atof.c: 82: iexp++; + inc a + jra 00116$ +00114$: +; ../_atof.c: 86: value*=10.0; + push a + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + clrw x + pushw x + push #0x20 + push #0x41 + call ___fsmul + addw sp, #8 + pop a + ldw (0x08, sp), x + ldw (0x06, sp), y +; ../_atof.c: 87: iexp--; + dec a + jra 00116$ +00120$: +; ../_atof.c: 93: if(sign) value*=-1.0; + tnz (0x05, sp) + jreq 00122$ + ldw y, (0x08, sp) + ldw x, (0x06, sp) + sllw x + ccf + rrcw x + ldw (0x08, sp), y + ldw (0x06, sp), x +00122$: +; ../_atof.c: 94: return (value); + ldw x, (0x08, sp) + ldw y, (0x06, sp) +; ../_atof.c: 95: } + addw sp, #17 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_atof.lst b/device/lib/stm8/_atof.lst new file mode 100644 index 0000000..1b39e28 --- /dev/null +++ b/device/lib/stm8/_atof.lst @@ -0,0 +1,310 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _atof + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _atoi + 12 .globl _toupper + 13 .globl _isspace + 14 .globl _atof + 15 ;-------------------------------------------------------- + 16 ; ram data + 17 ;-------------------------------------------------------- + 18 .area DATA + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../_atof.c: 33: float atof(const char * s) + 53 ; ----------------------------------------- + 54 ; function atof + 55 ; ----------------------------------------- + 000000 56 _atof: + 000000 52 11 [ 2] 57 sub sp, #17 + 58 ; ../_atof.c: 40: while (isspace(*s)) s++; + 000002 16 14 [ 2] 59 ldw y, (0x14, sp) + 000004 17 10 [ 2] 60 ldw (0x10, sp), y + 000006 61 00101$: + 000006 1E 10 [ 2] 62 ldw x, (0x10, sp) + 000008 F6 [ 1] 63 ld a, (x) + 000009 5F [ 1] 64 clrw x + 00000A 97 [ 1] 65 ld xl, a + 00000B 89 [ 2] 66 pushw x + 00000C CDr00r00 [ 4] 67 call _isspace + 00000F 5B 02 [ 2] 68 addw sp, #2 + 000011 16 10 [ 2] 69 ldw y, (0x10, sp) + 000013 90 5C [ 1] 70 incw y + 000015 5D [ 2] 71 tnzw x + 000016 27 04 [ 1] 72 jreq 00155$ + 000018 17 10 [ 2] 73 ldw (0x10, sp), y + 00001A 20 EA [ 2] 74 jra 00101$ + 00001C 75 00155$: + 00001C 1E 10 [ 2] 76 ldw x, (0x10, sp) + 00001E 1F 14 [ 2] 77 ldw (0x14, sp), x + 78 ; ../_atof.c: 43: if (*s == '-') + 000020 1E 10 [ 2] 79 ldw x, (0x10, sp) + 000022 F6 [ 1] 80 ld a, (x) + 000023 A1 2D [ 1] 81 cp a, #0x2d + 000025 26 08 [ 1] 82 jrne 00107$ + 83 ; ../_atof.c: 45: sign=1; + 000027 A6 01 [ 1] 84 ld a, #0x01 + 000029 6B 05 [ 1] 85 ld (0x05, sp), a + 86 ; ../_atof.c: 46: s++; + 00002B 17 14 [ 2] 87 ldw (0x14, sp), y + 00002D 20 08 [ 2] 88 jra 00108$ + 00002F 89 00107$: + 90 ; ../_atof.c: 50: sign=0; + 00002F 0F 05 [ 1] 91 clr (0x05, sp) + 92 ; ../_atof.c: 51: if (*s == '+') s++; + 000031 A1 2B [ 1] 93 cp a, #0x2b + 000033 26 02 [ 1] 94 jrne 00108$ + 000035 17 14 [ 2] 95 ldw (0x14, sp), y + 000037 96 00108$: + 97 ; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++) + 000037 5F [ 1] 98 clrw x + 000038 1F 08 [ 2] 99 ldw (0x08, sp), x + 00003A 1F 06 [ 2] 100 ldw (0x06, sp), x + 00003C 16 14 [ 2] 101 ldw y, (0x14, sp) + 00003E 17 0C [ 2] 102 ldw (0x0c, sp), y + 000040 103 00126$: + 000040 1E 0C [ 2] 104 ldw x, (0x0c, sp) + 000042 F6 [ 1] 105 ld a, (x) + 000043 6B 0E [ 1] 106 ld (0x0e, sp), a + 000045 6B 0F [ 1] 107 ld (0x0f, sp), a + 000047 1E 0C [ 2] 108 ldw x, (0x0c, sp) + 000049 5C [ 1] 109 incw x + 00004A 1F 10 [ 2] 110 ldw (0x10, sp), x + 111 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 00004C 7B 0F [ 1] 112 ld a, (0x0f, sp) + 00004E A1 30 [ 1] 113 cp a, #0x30 + 000050 25 3E [ 1] 114 jrc 00156$ + 000052 A1 39 [ 1] 115 cp a, #0x39 + 000054 22 3A [ 1] 116 jrugt 00156$ + 117 ; ../_atof.c: 57: value=10.0*value+(*s-'0'); + 000056 1E 08 [ 2] 118 ldw x, (0x08, sp) + 000058 89 [ 2] 119 pushw x + 000059 1E 08 [ 2] 120 ldw x, (0x08, sp) + 00005B 89 [ 2] 121 pushw x + 00005C 5F [ 1] 122 clrw x + 00005D 89 [ 2] 123 pushw x + 00005E 4B 20 [ 1] 124 push #0x20 + 000060 4B 41 [ 1] 125 push #0x41 + 000062 CDr00r00 [ 4] 126 call ___fsmul + 000065 5B 08 [ 2] 127 addw sp, #8 + 000067 1F 0C [ 2] 128 ldw (0x0c, sp), x + 000069 17 0A [ 2] 129 ldw (0x0a, sp), y + 00006B 5F [ 1] 130 clrw x + 00006C 7B 0E [ 1] 131 ld a, (0x0e, sp) + 00006E 97 [ 1] 132 ld xl, a + 00006F 1D 00 30 [ 2] 133 subw x, #0x0030 + 000072 89 [ 2] 134 pushw x + 000073 CDr00r00 [ 4] 135 call ___sint2fs + 000076 5B 02 [ 2] 136 addw sp, #2 + 000078 89 [ 2] 137 pushw x + 000079 90 89 [ 2] 138 pushw y + 00007B 1E 10 [ 2] 139 ldw x, (0x10, sp) + 00007D 89 [ 2] 140 pushw x + 00007E 1E 10 [ 2] 141 ldw x, (0x10, sp) + 000080 89 [ 2] 142 pushw x + 000081 CDr00r00 [ 4] 143 call ___fsadd + 000084 5B 08 [ 2] 144 addw sp, #8 + 000086 1F 08 [ 2] 145 ldw (0x08, sp), x + 000088 17 06 [ 2] 146 ldw (0x06, sp), y + 147 ; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++) + 00008A 16 10 [ 2] 148 ldw y, (0x10, sp) + 00008C 17 0C [ 2] 149 ldw (0x0c, sp), y + 00008E 20 B0 [ 2] 150 jra 00126$ + 000090 151 00156$: + 000090 16 0C [ 2] 152 ldw y, (0x0c, sp) + 000092 17 14 [ 2] 153 ldw (0x14, sp), y + 154 ; ../_atof.c: 61: if (*s == '.') + 000094 7B 0E [ 1] 155 ld a, (0x0e, sp) + 000096 A1 2E [ 1] 156 cp a, #0x2e + 000098 26 6E [ 1] 157 jrne 00112$ + 158 ; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++) + 00009A AE CC CD [ 2] 159 ldw x, #0xcccd + 00009D 1F 0C [ 2] 160 ldw (0x0c, sp), x + 00009F AE 3D CC [ 2] 161 ldw x, #0x3dcc + 0000A2 1F 0A [ 2] 162 ldw (0x0a, sp), x + 0000A4 163 00129$: + 0000A4 1E 10 [ 2] 164 ldw x, (0x10, sp) + 0000A6 F6 [ 1] 165 ld a, (x) + 0000A7 6B 0E [ 1] 166 ld (0x0e, sp), a + 167 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 0000A9 6B 0F [ 1] 168 ld (0x0f, sp), a + 0000AB A1 30 [ 1] 169 cp a, #0x30 + 0000AD 25 55 [ 1] 170 jrc 00157$ + 0000AF 7B 0F [ 1] 171 ld a, (0x0f, sp) + 0000B1 A1 39 [ 1] 172 cp a, #0x39 + 0000B3 22 4F [ 1] 173 jrugt 00157$ + 174 ; ../_atof.c: 66: value+=(*s-'0')*fraction; + 0000B5 5F [ 1] 175 clrw x + 0000B6 7B 0E [ 1] 176 ld a, (0x0e, sp) + 0000B8 97 [ 1] 177 ld xl, a + 0000B9 1D 00 30 [ 2] 178 subw x, #0x0030 + 0000BC 89 [ 2] 179 pushw x + 0000BD CDr00r00 [ 4] 180 call ___sint2fs + 0000C0 5B 02 [ 2] 181 addw sp, #2 + 0000C2 1F 03 [ 2] 182 ldw (0x03, sp), x + 0000C4 1E 0C [ 2] 183 ldw x, (0x0c, sp) + 0000C6 89 [ 2] 184 pushw x + 0000C7 1E 0C [ 2] 185 ldw x, (0x0c, sp) + 0000C9 89 [ 2] 186 pushw x + 0000CA 1E 07 [ 2] 187 ldw x, (0x07, sp) + 0000CC 89 [ 2] 188 pushw x + 0000CD 90 89 [ 2] 189 pushw y + 0000CF CDr00r00 [ 4] 190 call ___fsmul + 0000D2 5B 08 [ 2] 191 addw sp, #8 + 0000D4 89 [ 2] 192 pushw x + 0000D5 90 89 [ 2] 193 pushw y + 0000D7 1E 0C [ 2] 194 ldw x, (0x0c, sp) + 0000D9 89 [ 2] 195 pushw x + 0000DA 1E 0C [ 2] 196 ldw x, (0x0c, sp) + 0000DC 89 [ 2] 197 pushw x + 0000DD CDr00r00 [ 4] 198 call ___fsadd + 0000E0 5B 08 [ 2] 199 addw sp, #8 + 0000E2 1F 08 [ 2] 200 ldw (0x08, sp), x + 0000E4 17 06 [ 2] 201 ldw (0x06, sp), y + 202 ; ../_atof.c: 67: fraction*=0.1; + 0000E6 1E 0C [ 2] 203 ldw x, (0x0c, sp) + 0000E8 89 [ 2] 204 pushw x + 0000E9 1E 0C [ 2] 205 ldw x, (0x0c, sp) + 0000EB 89 [ 2] 206 pushw x + 0000EC 4B CD [ 1] 207 push #0xcd + 0000EE 4B CC [ 1] 208 push #0xcc + 0000F0 4B CC [ 1] 209 push #0xcc + 0000F2 4B 3D [ 1] 210 push #0x3d + 0000F4 CDr00r00 [ 4] 211 call ___fsmul + 0000F7 5B 08 [ 2] 212 addw sp, #8 + 0000F9 1F 0C [ 2] 213 ldw (0x0c, sp), x + 0000FB 17 0A [ 2] 214 ldw (0x0a, sp), y + 215 ; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++) + 0000FD 1E 10 [ 2] 216 ldw x, (0x10, sp) + 0000FF 5C [ 1] 217 incw x + 000100 1F 10 [ 2] 218 ldw (0x10, sp), x + 000102 20 A0 [ 2] 219 jra 00129$ + 000104 220 00157$: + 000104 16 10 [ 2] 221 ldw y, (0x10, sp) + 000106 17 14 [ 2] 222 ldw (0x14, sp), y + 000108 223 00112$: + 224 ; ../_atof.c: 72: if (toupper(*s)=='E') + 000108 16 14 [ 2] 225 ldw y, (0x14, sp) + 00010A 17 10 [ 2] 226 ldw (0x10, sp), y + 00010C 93 [ 1] 227 ldw x, y + 00010D F6 [ 1] 228 ld a, (x) + 00010E 5F [ 1] 229 clrw x + 00010F 97 [ 1] 230 ld xl, a + 000110 89 [ 2] 231 pushw x + 000111 CDr00r00 [ 4] 232 call _toupper + 000114 5B 02 [ 2] 233 addw sp, #2 + 000116 A3 00 45 [ 2] 234 cpw x, #0x0045 + 000119 26 48 [ 1] 235 jrne 00120$ + 236 ; ../_atof.c: 74: s++; + 00011B 1E 10 [ 2] 237 ldw x, (0x10, sp) + 00011D 5C [ 1] 238 incw x + 239 ; ../_atof.c: 75: iexp=(signed char)atoi(s); + 00011E 1F 14 [ 2] 240 ldw (0x14, sp), x + 000120 89 [ 2] 241 pushw x + 000121 CDr00r00 [ 4] 242 call _atoi + 000124 5B 02 [ 2] 243 addw sp, #2 + 000126 9F [ 1] 244 ld a, xl + 245 ; ../_atof.c: 77: while(iexp!=0) + 000127 246 00116$: + 000127 4D [ 1] 247 tnz a + 000128 27 39 [ 1] 248 jreq 00120$ + 249 ; ../_atof.c: 79: if(iexp<0) + 00012A 4D [ 1] 250 tnz a + 00012B 2A 1C [ 1] 251 jrpl 00114$ + 252 ; ../_atof.c: 81: value*=0.1; + 00012D 88 [ 1] 253 push a + 00012E 1E 09 [ 2] 254 ldw x, (0x09, sp) + 000130 89 [ 2] 255 pushw x + 000131 1E 09 [ 2] 256 ldw x, (0x09, sp) + 000133 89 [ 2] 257 pushw x + 000134 4B CD [ 1] 258 push #0xcd + 000136 4B CC [ 1] 259 push #0xcc + 000138 4B CC [ 1] 260 push #0xcc + 00013A 4B 3D [ 1] 261 push #0x3d + 00013C CDr00r00 [ 4] 262 call ___fsmul + 00013F 5B 08 [ 2] 263 addw sp, #8 + 000141 84 [ 1] 264 pop a + 000142 1F 08 [ 2] 265 ldw (0x08, sp), x + 000144 17 06 [ 2] 266 ldw (0x06, sp), y + 267 ; ../_atof.c: 82: iexp++; + 000146 4C [ 1] 268 inc a + 000147 20 DE [ 2] 269 jra 00116$ + 000149 270 00114$: + 271 ; ../_atof.c: 86: value*=10.0; + 000149 88 [ 1] 272 push a + 00014A 1E 09 [ 2] 273 ldw x, (0x09, sp) + 00014C 89 [ 2] 274 pushw x + 00014D 1E 09 [ 2] 275 ldw x, (0x09, sp) + 00014F 89 [ 2] 276 pushw x + 000150 5F [ 1] 277 clrw x + 000151 89 [ 2] 278 pushw x + 000152 4B 20 [ 1] 279 push #0x20 + 000154 4B 41 [ 1] 280 push #0x41 + 000156 CDr00r00 [ 4] 281 call ___fsmul + 000159 5B 08 [ 2] 282 addw sp, #8 + 00015B 84 [ 1] 283 pop a + 00015C 1F 08 [ 2] 284 ldw (0x08, sp), x + 00015E 17 06 [ 2] 285 ldw (0x06, sp), y + 286 ; ../_atof.c: 87: iexp--; + 000160 4A [ 1] 287 dec a + 000161 20 C4 [ 2] 288 jra 00116$ + 000163 289 00120$: + 290 ; ../_atof.c: 93: if(sign) value*=-1.0; + 000163 0D 05 [ 1] 291 tnz (0x05, sp) + 000165 27 0B [ 1] 292 jreq 00122$ + 000167 16 08 [ 2] 293 ldw y, (0x08, sp) + 000169 1E 06 [ 2] 294 ldw x, (0x06, sp) + 00016B 58 [ 2] 295 sllw x + 00016C 8C [ 1] 296 ccf + 00016D 56 [ 2] 297 rrcw x + 00016E 17 08 [ 2] 298 ldw (0x08, sp), y + 000170 1F 06 [ 2] 299 ldw (0x06, sp), x + 000172 300 00122$: + 301 ; ../_atof.c: 94: return (value); + 000172 1E 08 [ 2] 302 ldw x, (0x08, sp) + 000174 16 06 [ 2] 303 ldw y, (0x06, sp) + 304 ; ../_atof.c: 95: } + 000176 5B 11 [ 2] 305 addw sp, #17 + 000178 81 [ 4] 306 ret + 307 .area CODE + 308 .area CONST + 309 .area INITIALIZER + 310 .area CABS (ABS) diff --git a/device/lib/stm8/_atof.rel b/device/lib/stm8/_atof.rel new file mode 100644 index 0000000..b275f88 --- /dev/null +++ b/device/lib/stm8/_atof.rel @@ -0,0 +1,123 @@ +XH3 +H B areas 8 global symbols +M _atof +O -mstm8 +S ___fsmul Ref000000 +S _isspace Ref000000 +S _atoi Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S ___sint2fs Ref000000 +S _toupper Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 179 flags 0 addr 0 +S _atof Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 11 16 14 17 10 +R 00 00 00 09 +T 00 00 06 +R 00 00 00 09 +T 00 00 06 1E 10 F6 5F 97 89 CD 00 00 5B 02 16 10 +R 00 00 00 09 02 0A 00 01 +T 00 00 13 90 5C 5D 27 04 17 10 20 EA +R 00 00 00 09 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 1E 10 1F 14 1E 10 F6 A1 2D 26 08 A6 01 +R 00 00 00 09 +T 00 00 29 6B 05 17 14 20 08 +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 0F 05 A1 2B 26 02 17 14 +R 00 00 00 09 +T 00 00 37 +R 00 00 00 09 +T 00 00 37 5F 1F 08 1F 06 16 14 17 0C +R 00 00 00 09 +T 00 00 40 +R 00 00 00 09 +T 00 00 40 1E 0C F6 6B 0E 6B 0F 1E 0C 5C 1F 10 7B +R 00 00 00 09 +T 00 00 4D 0F A1 30 25 3E A1 39 22 3A 1E 08 89 1E +R 00 00 00 09 +T 00 00 5A 08 89 5F 89 4B 20 4B 41 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 00 +T 00 00 67 1F 0C 17 0A 5F 7B 0E 97 1D 00 30 89 CD +R 00 00 00 09 +T 00 00 74 00 00 5B 02 89 90 89 1E 10 89 1E 10 89 +R 00 00 00 09 02 03 00 05 +T 00 00 81 CD 00 00 5B 08 1F 08 17 06 16 10 17 0C +R 00 00 00 09 02 04 00 04 +T 00 00 8E 20 B0 +R 00 00 00 09 +T 00 00 90 +R 00 00 00 09 +T 00 00 90 16 0C 17 14 7B 0E A1 2E 26 6E AE CC CD +R 00 00 00 09 +T 00 00 9D 1F 0C AE 3D CC 1F 0A +R 00 00 00 09 +T 00 00 A4 +R 00 00 00 09 +T 00 00 A4 1E 10 F6 6B 0E 6B 0F A1 30 25 55 7B 0F +R 00 00 00 09 +T 00 00 B1 A1 39 22 4F 5F 7B 0E 97 1D 00 30 89 CD +R 00 00 00 09 +T 00 00 BE 00 00 5B 02 1F 03 1E 0C 89 1E 0C 89 1E +R 00 00 00 09 02 03 00 05 +T 00 00 CB 07 89 90 89 CD 00 00 5B 08 89 90 89 1E +R 00 00 00 09 02 08 00 00 +T 00 00 D8 0C 89 1E 0C 89 CD 00 00 5B 08 1F 08 17 +R 00 00 00 09 02 09 00 04 +T 00 00 E5 06 1E 0C 89 1E 0C 89 4B CD 4B CC 4B CC +R 00 00 00 09 +T 00 00 F2 4B 3D CD 00 00 5B 08 1F 0C 17 0A 1E 10 +R 00 00 00 09 02 06 00 00 +T 00 00 FF 5C 1F 10 20 A0 +R 00 00 00 09 +T 00 01 04 +R 00 00 00 09 +T 00 01 04 16 10 17 14 +R 00 00 00 09 +T 00 01 08 +R 00 00 00 09 +T 00 01 08 16 14 17 10 93 F6 5F 97 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 06 +T 00 01 15 02 A3 00 45 26 48 1E 10 5C 1F 14 89 CD +R 00 00 00 09 +T 00 01 22 00 00 5B 02 9F +R 00 00 00 09 02 03 00 02 +T 00 01 27 +R 00 00 00 09 +T 00 01 27 4D 27 39 4D 2A 1C 88 1E 09 89 1E 09 89 +R 00 00 00 09 +T 00 01 34 4B CD 4B CC 4B CC 4B 3D CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 00 +T 00 01 41 84 1F 08 17 06 4C 20 DE +R 00 00 00 09 +T 00 01 49 +R 00 00 00 09 +T 00 01 49 88 1E 09 89 1E 09 89 5F 89 4B 20 4B 41 +R 00 00 00 09 +T 00 01 56 CD 00 00 5B 08 84 1F 08 17 06 4A 20 C4 +R 00 00 00 09 02 04 00 00 +T 00 01 63 +R 00 00 00 09 +T 00 01 63 0D 05 27 0B 16 08 1E 06 58 8C 56 17 08 +R 00 00 00 09 +T 00 01 70 1F 06 +R 00 00 00 09 +T 00 01 72 +R 00 00 00 09 +T 00 01 72 1E 08 16 06 5B 11 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_atof.sym b/device/lib/stm8/_atof.sym new file mode 100644 index 0000000..e51ad53 --- /dev/null +++ b/device/lib/stm8/_atof.sym @@ -0,0 +1,35 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + ___fsmul ****** GX + ___sint2fs ****** GX + 9 _atof 000000 GR + _atoi ****** GX + _isspace ****** GX + _toupper ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 179 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_divschar.asm b/device/lib/stm8/_divschar.asm new file mode 100644 index 0000000..17e7b10 --- /dev/null +++ b/device/lib/stm8/_divschar.asm @@ -0,0 +1,122 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _divschar + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __divschar + .globl __divuschar + .globl __divsuchar +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_divschar.c: 31: _divschar (signed char x, signed char y) +; ----------------------------------------- +; function _divschar +; ----------------------------------------- +__divschar: +; ../_divschar.c: 33: return ((int)x / (int)y); + ld a, (0x03, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x04, sp) + ld yl, a + rlc a + clr a + sbc a, #0x00 + ld yh, a + pushw y + pushw x + call __divsint + addw sp, #4 +; ../_divschar.c: 34: } + ret +; ../_divschar.c: 37: _divuschar (unsigned char x, unsigned char y) +; ----------------------------------------- +; function _divuschar +; ----------------------------------------- +__divuschar: + sub sp, #2 +; ../_divschar.c: 39: return ((int)((signed char)x) / (int)y); + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x06, sp) + ld (0x02, sp), a + clr (0x01, sp) + ldw y, (0x01, sp) + pushw y + pushw x + call __divsint +; ../_divschar.c: 40: } + addw sp, #6 + ret +; ../_divschar.c: 43: _divsuchar (signed char x, signed char y) +; ----------------------------------------- +; function _divsuchar +; ----------------------------------------- +__divsuchar: +; ../_divschar.c: 45: return ((int)((unsigned char)x) / (int)y); + ld a, (0x03, sp) + clrw y + ld yl, a + ld a, (0x04, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + pushw x + pushw y + call __divsint + addw sp, #4 +; ../_divschar.c: 46: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_divschar.lst b/device/lib/stm8/_divschar.lst new file mode 100644 index 0000000..ac4b510 --- /dev/null +++ b/device/lib/stm8/_divschar.lst @@ -0,0 +1,122 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _divschar + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __divschar + 12 .globl __divuschar + 13 .globl __divsuchar + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../_divschar.c: 31: _divschar (signed char x, signed char y) + 52 ; ----------------------------------------- + 53 ; function _divschar + 54 ; ----------------------------------------- + 000000 55 __divschar: + 56 ; ../_divschar.c: 33: return ((int)x / (int)y); + 000000 7B 03 [ 1] 57 ld a, (0x03, sp) + 000002 97 [ 1] 58 ld xl, a + 000003 49 [ 1] 59 rlc a + 000004 4F [ 1] 60 clr a + 000005 A2 00 [ 1] 61 sbc a, #0x00 + 000007 95 [ 1] 62 ld xh, a + 000008 7B 04 [ 1] 63 ld a, (0x04, sp) + 00000A 90 97 [ 1] 64 ld yl, a + 00000C 49 [ 1] 65 rlc a + 00000D 4F [ 1] 66 clr a + 00000E A2 00 [ 1] 67 sbc a, #0x00 + 000010 90 95 [ 1] 68 ld yh, a + 000012 90 89 [ 2] 69 pushw y + 000014 89 [ 2] 70 pushw x + 000015 CDr00r00 [ 4] 71 call __divsint + 000018 5B 04 [ 2] 72 addw sp, #4 + 73 ; ../_divschar.c: 34: } + 00001A 81 [ 4] 74 ret + 75 ; ../_divschar.c: 37: _divuschar (unsigned char x, unsigned char y) + 76 ; ----------------------------------------- + 77 ; function _divuschar + 78 ; ----------------------------------------- + 00001B 79 __divuschar: + 00001B 52 02 [ 2] 80 sub sp, #2 + 81 ; ../_divschar.c: 39: return ((int)((signed char)x) / (int)y); + 00001D 7B 05 [ 1] 82 ld a, (0x05, sp) + 00001F 97 [ 1] 83 ld xl, a + 000020 49 [ 1] 84 rlc a + 000021 4F [ 1] 85 clr a + 000022 A2 00 [ 1] 86 sbc a, #0x00 + 000024 95 [ 1] 87 ld xh, a + 000025 7B 06 [ 1] 88 ld a, (0x06, sp) + 000027 6B 02 [ 1] 89 ld (0x02, sp), a + 000029 0F 01 [ 1] 90 clr (0x01, sp) + 00002B 16 01 [ 2] 91 ldw y, (0x01, sp) + 00002D 90 89 [ 2] 92 pushw y + 00002F 89 [ 2] 93 pushw x + 000030 CDr00r00 [ 4] 94 call __divsint + 95 ; ../_divschar.c: 40: } + 000033 5B 06 [ 2] 96 addw sp, #6 + 000035 81 [ 4] 97 ret + 98 ; ../_divschar.c: 43: _divsuchar (signed char x, signed char y) + 99 ; ----------------------------------------- + 100 ; function _divsuchar + 101 ; ----------------------------------------- + 000036 102 __divsuchar: + 103 ; ../_divschar.c: 45: return ((int)((unsigned char)x) / (int)y); + 000036 7B 03 [ 1] 104 ld a, (0x03, sp) + 000038 90 5F [ 1] 105 clrw y + 00003A 90 97 [ 1] 106 ld yl, a + 00003C 7B 04 [ 1] 107 ld a, (0x04, sp) + 00003E 97 [ 1] 108 ld xl, a + 00003F 49 [ 1] 109 rlc a + 000040 4F [ 1] 110 clr a + 000041 A2 00 [ 1] 111 sbc a, #0x00 + 000043 95 [ 1] 112 ld xh, a + 000044 89 [ 2] 113 pushw x + 000045 90 89 [ 2] 114 pushw y + 000047 CDr00r00 [ 4] 115 call __divsint + 00004A 5B 04 [ 2] 116 addw sp, #4 + 117 ; ../_divschar.c: 46: } + 00004C 81 [ 4] 118 ret + 119 .area CODE + 120 .area CONST + 121 .area INITIALIZER + 122 .area CABS (ABS) diff --git a/device/lib/stm8/_divschar.rel b/device/lib/stm8/_divschar.rel new file mode 100644 index 0000000..df76f05 --- /dev/null +++ b/device/lib/stm8/_divschar.rel @@ -0,0 +1,42 @@ +XH3 +H B areas 5 global symbols +M _divschar +O -mstm8 +S .__.ABS. Def000000 +S __divsint Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 4D flags 0 addr 0 +S __divsuchar Def000036 +S __divuschar Def00001B +S __divschar Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 03 97 49 4F A2 00 95 7B 04 90 97 49 +R 00 00 00 09 +T 00 00 0D 4F A2 00 90 95 90 89 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 01 +T 00 00 1A 81 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 52 02 7B 05 97 49 4F A2 00 95 7B 06 6B +R 00 00 00 09 +T 00 00 28 02 0F 01 16 01 90 89 89 CD 00 00 5B 06 +R 00 00 00 09 02 0C 00 01 +T 00 00 35 81 +R 00 00 00 09 +T 00 00 36 +R 00 00 00 09 +T 00 00 36 7B 03 90 5F 90 97 7B 04 97 49 4F A2 00 +R 00 00 00 09 +T 00 00 43 95 89 90 89 CD 00 00 5B 04 81 +R 00 00 00 09 02 08 00 01 diff --git a/device/lib/stm8/_divschar.sym b/device/lib/stm8/_divschar.sym new file mode 100644 index 0000000..8ea6d9f --- /dev/null +++ b/device/lib/stm8/_divschar.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __divschar 000000 GR + __divsint ****** GX + 9 __divsuchar 000036 GR + 9 __divuschar 00001B GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 4D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_divsint.lst b/device/lib/stm8/_divsint.lst new file mode 100644 index 0000000..aef7c26 --- /dev/null +++ b/device/lib/stm8/_divsint.lst @@ -0,0 +1,51 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _divsint.s + 3 ; + 4 ; Copyright (C) 2014, Philipp Klaus Krause + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __divsint + 30 + 31 .area CODE + 32 + 000000 33 __divsint: + 000000 1E 03 [ 2] 34 ldw x, (#3, sp) + 000002 9E [ 1] 35 ld a, xh + 000003 16 05 [ 2] 36 ldw y, (#5, sp) + 000005 2A 03 [ 1] 37 jrpl y_nonnegative + 000007 43 [ 1] 38 cpl a + 000008 90 50 [ 2] 39 negw y + 00000A 40 y_nonnegative: + 00000A 5D [ 2] 41 tnzw x + 00000B 2A 01 [ 1] 42 jrpl x_nonnegative + 00000D 50 [ 2] 43 negw x + 00000E 44 x_nonnegative: + 00000E 65 [ 2] 45 divw x, y + 00000F 4D [ 1] 46 tnz a + 000010 2A 01 [ 1] 47 jrpl return_nonnegative + 000012 50 [ 2] 48 negw x + 000013 49 return_nonnegative: + 000013 81 [ 4] 50 ret + 51 diff --git a/device/lib/stm8/_divsint.rel b/device/lib/stm8/_divsint.rel new file mode 100644 index 0000000..adadb36 --- /dev/null +++ b/device/lib/stm8/_divsint.rel @@ -0,0 +1,22 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 14 flags 0 addr 0 +S __divsint Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 1E 03 9E 16 05 2A 03 43 90 50 +R 00 00 00 01 +T 00 00 0A +R 00 00 00 01 +T 00 00 0A 5D 2A 01 50 +R 00 00 00 01 +T 00 00 0E +R 00 00 00 01 +T 00 00 0E 65 4D 2A 01 50 +R 00 00 00 01 +T 00 00 13 +R 00 00 00 01 +T 00 00 13 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_divsint.s b/device/lib/stm8/_divsint.s new file mode 100644 index 0000000..6077256 --- /dev/null +++ b/device/lib/stm8/_divsint.s @@ -0,0 +1,51 @@ +;-------------------------------------------------------------------------- +; _divsint.s +; +; Copyright (C) 2014, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl __divsint + + .area CODE + +__divsint: + ldw x, (#3, sp) + ld a, xh + ldw y, (#5, sp) + jrpl y_nonnegative + cpl a + negw y +y_nonnegative: + tnzw x + jrpl x_nonnegative + negw x +x_nonnegative: + divw x, y + tnz a + jrpl return_nonnegative + negw x +return_nonnegative: + ret + diff --git a/device/lib/stm8/_divsint.sym b/device/lib/stm8/_divsint.sym new file mode 100644 index 0000000..60d5851 --- /dev/null +++ b/device/lib/stm8/_divsint.sym @@ -0,0 +1,17 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 __divsin 000000 GR | 1 return_n 000013 R + 1 x_nonneg 00000E R | 1 y_nonneg 00000A R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 14 flags 0 + diff --git a/device/lib/stm8/_divslong.lst b/device/lib/stm8/_divslong.lst new file mode 100644 index 0000000..75fafd7 --- /dev/null +++ b/device/lib/stm8/_divslong.lst @@ -0,0 +1,57 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _divslong.s + 3 ; + 4 ; Copyright (C) 2014, Ben Shi + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __divslong + 30 + 31 .area CODE + 000000 32 __divslong: + 000000 1E 09 [ 2] 33 ldw x, (#0x09, sp) + 000002 16 07 [ 2] 34 ldw y, (#0x07, sp) + 000004 2A 03 [ 1] 35 jrpl __divslong_0 + 000006 CDr00r00 [ 4] 36 call __fast_long_neg + 000009 37 __divslong_0: + 000009 89 [ 2] 38 pushw x + 00000A 90 89 [ 2] 39 pushw y + 00000C 40 __divslong_1: + 00000C 1E 09 [ 2] 41 ldw x, (#0x09, sp) + 00000E 16 07 [ 2] 42 ldw y, (#0x07, sp) + 000010 2A 03 [ 1] 43 jrpl __divslong_2 + 000012 CDr00r00 [ 4] 44 call __fast_long_neg + 000015 45 __divslong_2: + 000015 89 [ 2] 46 pushw x + 000016 90 89 [ 2] 47 pushw y + 000018 48 __divslong_3: + 000018 CDr00r00 [ 4] 49 call __divulong + 00001B 5B 08 [ 2] 50 addw sp, #0x08 + 00001D 51 __divslong_4: + 00001D 7B 03 [ 1] 52 ld a, (#0x03, sp) + 00001F 18 07 [ 1] 53 xor a, (#0x07, sp) + 000021 2A 03 [ 1] 54 jrpl __divslong_5 + 000023 CDr00r00 [ 4] 55 call __fast_long_neg + 000026 56 __divslong_5: + 000026 81 [ 4] 57 ret diff --git a/device/lib/stm8/_divslong.rel b/device/lib/stm8/_divslong.rel new file mode 100644 index 0000000..10aa978 --- /dev/null +++ b/device/lib/stm8/_divslong.rel @@ -0,0 +1,36 @@ +XH3 +H 2 areas 4 global symbols +S __fast_long_neg Ref000000 +S .__.ABS. Def000000 +S __divulong Ref000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 27 flags 0 addr 0 +S __divslong Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 1E 09 16 07 2A 03 CD 00 00 +R 00 00 00 01 02 0A 00 00 +T 00 00 09 +R 00 00 00 01 +T 00 00 09 89 90 89 +R 00 00 00 01 +T 00 00 0C +R 00 00 00 01 +T 00 00 0C 1E 09 16 07 2A 03 CD 00 00 +R 00 00 00 01 02 0A 00 00 +T 00 00 15 +R 00 00 00 01 +T 00 00 15 89 90 89 +R 00 00 00 01 +T 00 00 18 +R 00 00 00 01 +T 00 00 18 CD 00 00 5B 08 +R 00 00 00 01 02 04 00 02 +T 00 00 1D +R 00 00 00 01 +T 00 00 1D 7B 03 18 07 2A 03 CD 00 00 +R 00 00 00 01 02 0A 00 00 +T 00 00 26 +R 00 00 00 01 +T 00 00 26 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_divslong.s b/device/lib/stm8/_divslong.s new file mode 100644 index 0000000..6e260b0 --- /dev/null +++ b/device/lib/stm8/_divslong.s @@ -0,0 +1,57 @@ +;-------------------------------------------------------------------------- +; _divslong.s +; +; Copyright (C) 2014, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl __divslong + + .area CODE +__divslong: + ldw x, (#0x09, sp) + ldw y, (#0x07, sp) + jrpl __divslong_0 + call __fast_long_neg +__divslong_0: + pushw x + pushw y +__divslong_1: + ldw x, (#0x09, sp) + ldw y, (#0x07, sp) + jrpl __divslong_2 + call __fast_long_neg +__divslong_2: + pushw x + pushw y +__divslong_3: + call __divulong + addw sp, #0x08 +__divslong_4: + ld a, (#0x03, sp) + xor a, (#0x07, sp) + jrpl __divslong_5 + call __fast_long_neg +__divslong_5: + ret diff --git a/device/lib/stm8/_divslong.sym b/device/lib/stm8/_divslong.sym new file mode 100644 index 0000000..07a8285 --- /dev/null +++ b/device/lib/stm8/_divslong.sym @@ -0,0 +1,19 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 __divslo 000000 GR | 1 __divslo 000009 R + 1 __divslo 00000C R | 1 __divslo 000015 R | 1 __divslo 000018 R + 1 __divslo 00001D R | 1 __divslo 000026 R | __divulo ****** GX + __fast_l ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 27 flags 0 + diff --git a/device/lib/stm8/_divslonglong.asm b/device/lib/stm8/_divslonglong.asm new file mode 100644 index 0000000..92419b7 --- /dev/null +++ b/device/lib/stm8/_divslonglong.asm @@ -0,0 +1,246 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _divslonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __divslonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_divslonglong.c: 36: _divslonglong (long long numerator, long long denominator) +; ----------------------------------------- +; function _divslonglong +; ----------------------------------------- +__divslonglong: + sub sp, #17 +; ../_divslonglong.c: 38: bool numeratorneg = (numerator < 0); + tnz (0x16, sp) + jrmi 00124$ + clr (0x11, sp) + jra 00125$ +00124$: + ld a, #0x01 + ld (0x11, sp), a +00125$: +; ../_divslonglong.c: 39: bool denominatorneg = (denominator < 0); + tnz (0x1e, sp) + jrmi 00126$ + clr a + .byte 0xc5 +00126$: + ld a, #0x01 +00127$: +; ../_divslonglong.c: 42: if (numeratorneg) + tnz (0x11, sp) + jreq 00102$ +; ../_divslonglong.c: 43: numerator = -numerator; + push a + ld a, (0x1e, sp) + neg a + ld (0x11, sp), a + clr a + sbc a, (0x1d, sp) + ld (0x10, sp), a + clr a + sbc a, (0x1c, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x1b, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x1a, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x19, sp) + ld (0x0c, sp), a + ldw x, (0x17, sp) + jrnc 00129$ + incw x +00129$: + negw x + pop a + ldw (0x16, sp), x + ldw y, (0x0f, sp) + ldw (0x1c, sp), y + ldw y, (0x0d, sp) + ldw (0x1a, sp), y + ldw y, (0x0b, sp) + ldw (0x18, sp), y +00102$: +; ../_divslonglong.c: 44: if (denominatorneg) + tnz a + jreq 00104$ +; ../_divslonglong.c: 45: denominator = -denominator; + push a + ld a, (0x26, sp) + neg a + ld (0x11, sp), a + clr a + sbc a, (0x25, sp) + ld (0x10, sp), a + clr a + sbc a, (0x24, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x23, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x22, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x21, sp) + ld (0x0c, sp), a + ldw x, (0x1f, sp) + jrnc 00131$ + incw x +00131$: + negw x + pop a + ldw (0x1e, sp), x + ldw y, (0x0f, sp) + ldw (0x24, sp), y + ldw y, (0x0d, sp) + ldw (0x22, sp), y + ldw y, (0x0b, sp) + ldw (0x20, sp), y +00104$: +; ../_divslonglong.c: 47: d = (unsigned long long)numerator / (unsigned long long)denominator; + ldw y, (0x1c, sp) + ldw (0x07, sp), y + ldw y, (0x1a, sp) + ldw (0x05, sp), y + ldw y, (0x18, sp) + ldw (0x03, sp), y + ldw y, (0x16, sp) + ldw (0x01, sp), y + ldw y, (0x24, sp) + ldw (0x0f, sp), y + ldw y, (0x22, sp) + ldw (0x0d, sp), y + ldw y, (0x20, sp) + ldw (0x0b, sp), y + ldw y, (0x1e, sp) + push a + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + pushw y + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, sp + addw x, #26 + pushw x + call __divulonglong + addw sp, #18 + pop a + ldw y, (0x0f, sp) + ldw (0x07, sp), y + ldw y, (0x0d, sp) + ldw (0x05, sp), y + ldw y, (0x0b, sp) + ldw (0x03, sp), y + ldw y, (0x09, sp) + ldw (0x01, sp), y +; ../_divslonglong.c: 49: return ((numeratorneg ^ denominatorneg) ? -d : d); + xor a, (0x11, sp) + ld (0x11, sp), a + jreq 00107$ + ld a, (0x08, sp) + neg a + ld (0x11, sp), a + clr a + sbc a, (0x07, sp) + ld (0x10, sp), a + clr a + sbc a, (0x06, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x05, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x04, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x03, sp) + ld (0x0c, sp), a + clr a + sbc a, (0x02, sp) + ld (0x0b, sp), a + clr a + sbc a, (0x01, sp) + ld (0x0a, sp), a + jra 00108$ +00107$: + ldw y, (0x07, sp) + ldw (0x10, sp), y + ldw y, (0x05, sp) + ldw (0x0e, sp), y + ldw y, (0x03, sp) + ldw (0x0c, sp), y + ldw y, (0x01, sp) + ldw (0x0a, sp), y +00108$: + ldw x, (0x14, sp) + ldw y, (0x10, sp) + ldw (#6, x), y + ldw y, (0x0e, sp) + ldw (#4, x), y + ldw y, (0x0c, sp) + ldw (#2, x), y + ldw y, (0x0a, sp) + ldw (x), y +; ../_divslonglong.c: 50: } + addw sp, #17 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_divslonglong.lst b/device/lib/stm8/_divslonglong.lst new file mode 100644 index 0000000..04ac297 --- /dev/null +++ b/device/lib/stm8/_divslonglong.lst @@ -0,0 +1,246 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _divslonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __divslonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_divslonglong.c: 36: _divslonglong (long long numerator, long long denominator) + 50 ; ----------------------------------------- + 51 ; function _divslonglong + 52 ; ----------------------------------------- + 000000 53 __divslonglong: + 000000 52 11 [ 2] 54 sub sp, #17 + 55 ; ../_divslonglong.c: 38: bool numeratorneg = (numerator < 0); + 000002 0D 16 [ 1] 56 tnz (0x16, sp) + 000004 2B 04 [ 1] 57 jrmi 00124$ + 000006 0F 11 [ 1] 58 clr (0x11, sp) + 000008 20 04 [ 2] 59 jra 00125$ + 00000A 60 00124$: + 00000A A6 01 [ 1] 61 ld a, #0x01 + 00000C 6B 11 [ 1] 62 ld (0x11, sp), a + 00000E 63 00125$: + 64 ; ../_divslonglong.c: 39: bool denominatorneg = (denominator < 0); + 00000E 0D 1E [ 1] 65 tnz (0x1e, sp) + 000010 2B 02 [ 1] 66 jrmi 00126$ + 000012 4F [ 1] 67 clr a + 000013 C5 68 .byte 0xc5 + 000014 69 00126$: + 000014 A6 01 [ 1] 70 ld a, #0x01 + 000016 71 00127$: + 72 ; ../_divslonglong.c: 42: if (numeratorneg) + 000016 0D 11 [ 1] 73 tnz (0x11, sp) + 000018 27 34 [ 1] 74 jreq 00102$ + 75 ; ../_divslonglong.c: 43: numerator = -numerator; + 00001A 88 [ 1] 76 push a + 00001B 7B 1E [ 1] 77 ld a, (0x1e, sp) + 00001D 40 [ 1] 78 neg a + 00001E 6B 11 [ 1] 79 ld (0x11, sp), a + 000020 4F [ 1] 80 clr a + 000021 12 1D [ 1] 81 sbc a, (0x1d, sp) + 000023 6B 10 [ 1] 82 ld (0x10, sp), a + 000025 4F [ 1] 83 clr a + 000026 12 1C [ 1] 84 sbc a, (0x1c, sp) + 000028 6B 0F [ 1] 85 ld (0x0f, sp), a + 00002A 4F [ 1] 86 clr a + 00002B 12 1B [ 1] 87 sbc a, (0x1b, sp) + 00002D 6B 0E [ 1] 88 ld (0x0e, sp), a + 00002F 4F [ 1] 89 clr a + 000030 12 1A [ 1] 90 sbc a, (0x1a, sp) + 000032 6B 0D [ 1] 91 ld (0x0d, sp), a + 000034 4F [ 1] 92 clr a + 000035 12 19 [ 1] 93 sbc a, (0x19, sp) + 000037 6B 0C [ 1] 94 ld (0x0c, sp), a + 000039 1E 17 [ 2] 95 ldw x, (0x17, sp) + 00003B 24 01 [ 1] 96 jrnc 00129$ + 00003D 5C [ 1] 97 incw x + 00003E 98 00129$: + 00003E 50 [ 2] 99 negw x + 00003F 84 [ 1] 100 pop a + 000040 1F 16 [ 2] 101 ldw (0x16, sp), x + 000042 16 0F [ 2] 102 ldw y, (0x0f, sp) + 000044 17 1C [ 2] 103 ldw (0x1c, sp), y + 000046 16 0D [ 2] 104 ldw y, (0x0d, sp) + 000048 17 1A [ 2] 105 ldw (0x1a, sp), y + 00004A 16 0B [ 2] 106 ldw y, (0x0b, sp) + 00004C 17 18 [ 2] 107 ldw (0x18, sp), y + 00004E 108 00102$: + 109 ; ../_divslonglong.c: 44: if (denominatorneg) + 00004E 4D [ 1] 110 tnz a + 00004F 27 34 [ 1] 111 jreq 00104$ + 112 ; ../_divslonglong.c: 45: denominator = -denominator; + 000051 88 [ 1] 113 push a + 000052 7B 26 [ 1] 114 ld a, (0x26, sp) + 000054 40 [ 1] 115 neg a + 000055 6B 11 [ 1] 116 ld (0x11, sp), a + 000057 4F [ 1] 117 clr a + 000058 12 25 [ 1] 118 sbc a, (0x25, sp) + 00005A 6B 10 [ 1] 119 ld (0x10, sp), a + 00005C 4F [ 1] 120 clr a + 00005D 12 24 [ 1] 121 sbc a, (0x24, sp) + 00005F 6B 0F [ 1] 122 ld (0x0f, sp), a + 000061 4F [ 1] 123 clr a + 000062 12 23 [ 1] 124 sbc a, (0x23, sp) + 000064 6B 0E [ 1] 125 ld (0x0e, sp), a + 000066 4F [ 1] 126 clr a + 000067 12 22 [ 1] 127 sbc a, (0x22, sp) + 000069 6B 0D [ 1] 128 ld (0x0d, sp), a + 00006B 4F [ 1] 129 clr a + 00006C 12 21 [ 1] 130 sbc a, (0x21, sp) + 00006E 6B 0C [ 1] 131 ld (0x0c, sp), a + 000070 1E 1F [ 2] 132 ldw x, (0x1f, sp) + 000072 24 01 [ 1] 133 jrnc 00131$ + 000074 5C [ 1] 134 incw x + 000075 135 00131$: + 000075 50 [ 2] 136 negw x + 000076 84 [ 1] 137 pop a + 000077 1F 1E [ 2] 138 ldw (0x1e, sp), x + 000079 16 0F [ 2] 139 ldw y, (0x0f, sp) + 00007B 17 24 [ 2] 140 ldw (0x24, sp), y + 00007D 16 0D [ 2] 141 ldw y, (0x0d, sp) + 00007F 17 22 [ 2] 142 ldw (0x22, sp), y + 000081 16 0B [ 2] 143 ldw y, (0x0b, sp) + 000083 17 20 [ 2] 144 ldw (0x20, sp), y + 000085 145 00104$: + 146 ; ../_divslonglong.c: 47: d = (unsigned long long)numerator / (unsigned long long)denominator; + 000085 16 1C [ 2] 147 ldw y, (0x1c, sp) + 000087 17 07 [ 2] 148 ldw (0x07, sp), y + 000089 16 1A [ 2] 149 ldw y, (0x1a, sp) + 00008B 17 05 [ 2] 150 ldw (0x05, sp), y + 00008D 16 18 [ 2] 151 ldw y, (0x18, sp) + 00008F 17 03 [ 2] 152 ldw (0x03, sp), y + 000091 16 16 [ 2] 153 ldw y, (0x16, sp) + 000093 17 01 [ 2] 154 ldw (0x01, sp), y + 000095 16 24 [ 2] 155 ldw y, (0x24, sp) + 000097 17 0F [ 2] 156 ldw (0x0f, sp), y + 000099 16 22 [ 2] 157 ldw y, (0x22, sp) + 00009B 17 0D [ 2] 158 ldw (0x0d, sp), y + 00009D 16 20 [ 2] 159 ldw y, (0x20, sp) + 00009F 17 0B [ 2] 160 ldw (0x0b, sp), y + 0000A1 16 1E [ 2] 161 ldw y, (0x1e, sp) + 0000A3 88 [ 1] 162 push a + 0000A4 1E 10 [ 2] 163 ldw x, (0x10, sp) + 0000A6 89 [ 2] 164 pushw x + 0000A7 1E 10 [ 2] 165 ldw x, (0x10, sp) + 0000A9 89 [ 2] 166 pushw x + 0000AA 1E 10 [ 2] 167 ldw x, (0x10, sp) + 0000AC 89 [ 2] 168 pushw x + 0000AD 90 89 [ 2] 169 pushw y + 0000AF 1E 10 [ 2] 170 ldw x, (0x10, sp) + 0000B1 89 [ 2] 171 pushw x + 0000B2 1E 10 [ 2] 172 ldw x, (0x10, sp) + 0000B4 89 [ 2] 173 pushw x + 0000B5 1E 10 [ 2] 174 ldw x, (0x10, sp) + 0000B7 89 [ 2] 175 pushw x + 0000B8 1E 10 [ 2] 176 ldw x, (0x10, sp) + 0000BA 89 [ 2] 177 pushw x + 0000BB 96 [ 1] 178 ldw x, sp + 0000BC 1C 00 1A [ 2] 179 addw x, #26 + 0000BF 89 [ 2] 180 pushw x + 0000C0 CDr00r00 [ 4] 181 call __divulonglong + 0000C3 5B 12 [ 2] 182 addw sp, #18 + 0000C5 84 [ 1] 183 pop a + 0000C6 16 0F [ 2] 184 ldw y, (0x0f, sp) + 0000C8 17 07 [ 2] 185 ldw (0x07, sp), y + 0000CA 16 0D [ 2] 186 ldw y, (0x0d, sp) + 0000CC 17 05 [ 2] 187 ldw (0x05, sp), y + 0000CE 16 0B [ 2] 188 ldw y, (0x0b, sp) + 0000D0 17 03 [ 2] 189 ldw (0x03, sp), y + 0000D2 16 09 [ 2] 190 ldw y, (0x09, sp) + 0000D4 17 01 [ 2] 191 ldw (0x01, sp), y + 192 ; ../_divslonglong.c: 49: return ((numeratorneg ^ denominatorneg) ? -d : d); + 0000D6 18 11 [ 1] 193 xor a, (0x11, sp) + 0000D8 6B 11 [ 1] 194 ld (0x11, sp), a + 0000DA 27 2A [ 1] 195 jreq 00107$ + 0000DC 7B 08 [ 1] 196 ld a, (0x08, sp) + 0000DE 40 [ 1] 197 neg a + 0000DF 6B 11 [ 1] 198 ld (0x11, sp), a + 0000E1 4F [ 1] 199 clr a + 0000E2 12 07 [ 1] 200 sbc a, (0x07, sp) + 0000E4 6B 10 [ 1] 201 ld (0x10, sp), a + 0000E6 4F [ 1] 202 clr a + 0000E7 12 06 [ 1] 203 sbc a, (0x06, sp) + 0000E9 6B 0F [ 1] 204 ld (0x0f, sp), a + 0000EB 4F [ 1] 205 clr a + 0000EC 12 05 [ 1] 206 sbc a, (0x05, sp) + 0000EE 6B 0E [ 1] 207 ld (0x0e, sp), a + 0000F0 4F [ 1] 208 clr a + 0000F1 12 04 [ 1] 209 sbc a, (0x04, sp) + 0000F3 6B 0D [ 1] 210 ld (0x0d, sp), a + 0000F5 4F [ 1] 211 clr a + 0000F6 12 03 [ 1] 212 sbc a, (0x03, sp) + 0000F8 6B 0C [ 1] 213 ld (0x0c, sp), a + 0000FA 4F [ 1] 214 clr a + 0000FB 12 02 [ 1] 215 sbc a, (0x02, sp) + 0000FD 6B 0B [ 1] 216 ld (0x0b, sp), a + 0000FF 4F [ 1] 217 clr a + 000100 12 01 [ 1] 218 sbc a, (0x01, sp) + 000102 6B 0A [ 1] 219 ld (0x0a, sp), a + 000104 20 10 [ 2] 220 jra 00108$ + 000106 221 00107$: + 000106 16 07 [ 2] 222 ldw y, (0x07, sp) + 000108 17 10 [ 2] 223 ldw (0x10, sp), y + 00010A 16 05 [ 2] 224 ldw y, (0x05, sp) + 00010C 17 0E [ 2] 225 ldw (0x0e, sp), y + 00010E 16 03 [ 2] 226 ldw y, (0x03, sp) + 000110 17 0C [ 2] 227 ldw (0x0c, sp), y + 000112 16 01 [ 2] 228 ldw y, (0x01, sp) + 000114 17 0A [ 2] 229 ldw (0x0a, sp), y + 000116 230 00108$: + 000116 1E 14 [ 2] 231 ldw x, (0x14, sp) + 000118 16 10 [ 2] 232 ldw y, (0x10, sp) + 00011A EF 06 [ 2] 233 ldw (#6, x), y + 00011C 16 0E [ 2] 234 ldw y, (0x0e, sp) + 00011E EF 04 [ 2] 235 ldw (#4, x), y + 000120 16 0C [ 2] 236 ldw y, (0x0c, sp) + 000122 EF 02 [ 2] 237 ldw (#2, x), y + 000124 16 0A [ 2] 238 ldw y, (0x0a, sp) + 000126 FF [ 2] 239 ldw (x), y + 240 ; ../_divslonglong.c: 50: } + 000127 5B 11 [ 2] 241 addw sp, #17 + 000129 81 [ 4] 242 ret + 243 .area CODE + 244 .area CONST + 245 .area INITIALIZER + 246 .area CABS (ABS) diff --git a/device/lib/stm8/_divslonglong.rel b/device/lib/stm8/_divslonglong.rel new file mode 100644 index 0000000..108015e --- /dev/null +++ b/device/lib/stm8/_divslonglong.rel @@ -0,0 +1,98 @@ +XH3 +H B areas 3 global symbols +M _divslonglong +O -mstm8 +S __divulonglong Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 12A flags 0 addr 0 +S __divslonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 11 0D 16 2B 04 0F 11 20 04 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A A6 01 6B 11 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 0D 1E 2B 02 4F C5 +R 00 00 00 09 +T 00 00 14 +R 00 00 00 09 +T 00 00 14 A6 01 +R 00 00 00 09 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 0D 11 27 34 88 7B 1E 40 6B 11 4F 12 1D +R 00 00 00 09 +T 00 00 23 6B 10 4F 12 1C 6B 0F 4F 12 1B 6B 0E 4F +R 00 00 00 09 +T 00 00 30 12 1A 6B 0D 4F 12 19 6B 0C 1E 17 24 01 +R 00 00 00 09 +T 00 00 3D 5C +R 00 00 00 09 +T 00 00 3E +R 00 00 00 09 +T 00 00 3E 50 84 1F 16 16 0F 17 1C 16 0D 17 1A 16 +R 00 00 00 09 +T 00 00 4B 0B 17 18 +R 00 00 00 09 +T 00 00 4E +R 00 00 00 09 +T 00 00 4E 4D 27 34 88 7B 26 40 6B 11 4F 12 25 6B +R 00 00 00 09 +T 00 00 5B 10 4F 12 24 6B 0F 4F 12 23 6B 0E 4F 12 +R 00 00 00 09 +T 00 00 68 22 6B 0D 4F 12 21 6B 0C 1E 1F 24 01 5C +R 00 00 00 09 +T 00 00 75 +R 00 00 00 09 +T 00 00 75 50 84 1F 1E 16 0F 17 24 16 0D 17 22 16 +R 00 00 00 09 +T 00 00 82 0B 17 20 +R 00 00 00 09 +T 00 00 85 +R 00 00 00 09 +T 00 00 85 16 1C 17 07 16 1A 17 05 16 18 17 03 16 +R 00 00 00 09 +T 00 00 92 16 17 01 16 24 17 0F 16 22 17 0D 16 20 +R 00 00 00 09 +T 00 00 9F 17 0B 16 1E 88 1E 10 89 1E 10 89 1E 10 +R 00 00 00 09 +T 00 00 AC 89 90 89 1E 10 89 1E 10 89 1E 10 89 1E +R 00 00 00 09 +T 00 00 B9 10 89 96 1C 00 1A 89 CD 00 00 5B 12 84 +R 00 00 00 09 02 0B 00 00 +T 00 00 C6 16 0F 17 07 16 0D 17 05 16 0B 17 03 16 +R 00 00 00 09 +T 00 00 D3 09 17 01 18 11 6B 11 27 2A 7B 08 40 6B +R 00 00 00 09 +T 00 00 E0 11 4F 12 07 6B 10 4F 12 06 6B 0F 4F 12 +R 00 00 00 09 +T 00 00 ED 05 6B 0E 4F 12 04 6B 0D 4F 12 03 6B 0C +R 00 00 00 09 +T 00 00 FA 4F 12 02 6B 0B 4F 12 01 6B 0A 20 10 +R 00 00 00 09 +T 00 01 06 +R 00 00 00 09 +T 00 01 06 16 07 17 10 16 05 17 0E 16 03 17 0C 16 +R 00 00 00 09 +T 00 01 13 01 17 0A +R 00 00 00 09 +T 00 01 16 +R 00 00 00 09 +T 00 01 16 1E 14 16 10 EF 06 16 0E EF 04 16 0C EF +R 00 00 00 09 +T 00 01 23 02 16 0A FF 5B 11 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_divslonglong.sym b/device/lib/stm8/_divslonglong.sym new file mode 100644 index 0000000..7aaeac4 --- /dev/null +++ b/device/lib/stm8/_divslonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __divslonglong 000000 GR + __divulonglong ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 12A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_divulong.lst b/device/lib/stm8/_divulong.lst new file mode 100644 index 0000000..7b9ad95 --- /dev/null +++ b/device/lib/stm8/_divulong.lst @@ -0,0 +1,96 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _divulong.s + 3 ; + 4 ; Copyright (C) 2014, Ben Shi + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __divulong + 30 + 31 .area CODE + 000000 32 __divulong: + 000000 52 06 [ 2] 33 sub sp, #6 + 34 ; device/lib/_divulong.c: 333: unsigned long reste = 0L; + 000002 5F [ 1] 35 clrw x + 000003 1F 05 [ 2] 36 ldw (0x05, sp), x + 000005 1F 03 [ 2] 37 ldw (0x03, sp), x + 38 ; device/lib/_divulong.c: 334: unsigned char count = 32; + 000007 A6 20 [ 1] 39 ld a, #0x20 + 000009 6B 02 [ 1] 40 ld (0x02, sp), a + 41 ; device/lib/_divulong.c: 337: do + 00000B 42 __divulong_00105: + 43 ; device/lib/_divulong.c: 340: c = MSB_SET(x); + 00000B 7B 09 [ 1] 44 ld a, (0x09, sp) + 00000D 48 [ 1] 45 sll a + 00000E 4F [ 1] 46 clr a + 00000F 49 [ 1] 47 rlc a + 000010 6B 01 [ 1] 48 ld (0x01, sp), a + 49 ; device/lib/_divulong.c: 341: x <<= 1; + 000012 16 0B [ 2] 50 ldw y, (0x0b, sp) + 000014 1E 09 [ 2] 51 ldw x, (0x09, sp) + 000016 90 58 [ 2] 52 sllw y + 000018 59 [ 2] 53 rlcw x + 000019 17 0B [ 2] 54 ldw (0x0b, sp), y + 00001B 1F 09 [ 2] 55 ldw (0x09, sp), x + 56 ; device/lib/_divulong.c: 342: reste <<= 1; + 00001D 16 05 [ 2] 57 ldw y, (0x05, sp) + 00001F 1E 03 [ 2] 58 ldw x, (0x03, sp) + 000021 90 58 [ 2] 59 sllw y + 000023 59 [ 2] 60 rlcw x + 000024 17 05 [ 2] 61 ldw (0x05, sp), y + 000026 1F 03 [ 2] 62 ldw (0x03, sp), x + 63 ; device/lib/_divulong.c: 343: if (c) + 000028 0D 01 [ 1] 64 tnz (0x01, sp) + 00002A 27 06 [ 1] 65 jreq __divulong_00102 + 66 ; device/lib/_divulong.c: 344: reste |= 1L; + 00002C 7B 06 [ 1] 67 ld a, (0x06, sp) + 00002E AA 01 [ 1] 68 or a, #0x01 + 000030 6B 06 [ 1] 69 ld (0x06, sp), a + 000032 70 __divulong_00102: + 71 ; device/lib/_divulong.c: 346: if (reste >= y) + 000032 1E 05 [ 2] 72 ldw x, (0x05, sp) + 000034 72 F0 0F [ 2] 73 subw x, (0x0f, sp) + 000037 7B 04 [ 1] 74 ld a, (0x04, sp) + 000039 12 0E [ 1] 75 sbc a, (0x0e, sp) + 00003B 90 97 [ 1] 76 ld yl, a + 00003D 7B 03 [ 1] 77 ld a, (0x03, sp) + 00003F 12 0D [ 1] 78 sbc a, (0x0d, sp) + 000041 25 0C [ 1] 79 jrc __divulong_00106 + 80 ; device/lib/_divulong.c: 348: reste -= y; + 000043 1F 05 [ 2] 81 ldw (0x05, sp), x + 000045 90 95 [ 1] 82 ld yh, a + 000047 17 03 [ 2] 83 ldw (0x03, sp), y + 84 ; device/lib/_divulong.c: 350: x |= 1L; + 000049 7B 0C [ 1] 85 ld a, (0x0c, sp) + 00004B AA 01 [ 1] 86 or a, #0x01 + 00004D 6B 0C [ 1] 87 ld (0x0c, sp), a + 00004F 88 __divulong_00106: + 89 ; device/lib/_divulong.c: 353: while (--count); + 00004F 0A 02 [ 1] 90 dec (0x02, sp) + 000051 26 B8 [ 1] 91 jrne __divulong_00105 + 92 ; device/lib/_divulong.c: 354: return x; + 000053 1E 0B [ 2] 93 ldw x, (0x0b, sp) + 000055 16 09 [ 2] 94 ldw y, (0x09, sp) + 000057 5B 06 [ 2] 95 addw sp, #6 + 000059 81 [ 4] 96 ret diff --git a/device/lib/stm8/_divulong.rel b/device/lib/stm8/_divulong.rel new file mode 100644 index 0000000..318e027 --- /dev/null +++ b/device/lib/stm8/_divulong.rel @@ -0,0 +1,30 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 5A flags 0 addr 0 +S __divulong Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 52 06 5F 1F 05 1F 03 A6 20 6B 02 +R 00 00 00 01 +T 00 00 0B +R 00 00 00 01 +T 00 00 0B 7B 09 48 4F 49 6B 01 16 0B 1E 09 90 58 +R 00 00 00 01 +T 00 00 18 59 17 0B 1F 09 16 05 1E 03 90 58 59 17 +R 00 00 00 01 +T 00 00 25 05 1F 03 0D 01 27 06 7B 06 AA 01 6B 06 +R 00 00 00 01 +T 00 00 32 +R 00 00 00 01 +T 00 00 32 1E 05 72 F0 0F 7B 04 12 0E 90 97 7B 03 +R 00 00 00 01 +T 00 00 3F 12 0D 25 0C 1F 05 90 95 17 03 7B 0C AA +R 00 00 00 01 +T 00 00 4C 01 6B 0C +R 00 00 00 01 +T 00 00 4F +R 00 00 00 01 +T 00 00 4F 0A 02 26 B8 1E 0B 16 09 5B 06 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_divulong.s b/device/lib/stm8/_divulong.s new file mode 100644 index 0000000..21bc3d3 --- /dev/null +++ b/device/lib/stm8/_divulong.s @@ -0,0 +1,96 @@ +;-------------------------------------------------------------------------- +; _divulong.s +; +; Copyright (C) 2014, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl __divulong + + .area CODE +__divulong: + sub sp, #6 +; device/lib/_divulong.c: 333: unsigned long reste = 0L; + clrw x + ldw (0x05, sp), x + ldw (0x03, sp), x +; device/lib/_divulong.c: 334: unsigned char count = 32; + ld a, #0x20 + ld (0x02, sp), a +; device/lib/_divulong.c: 337: do +__divulong_00105: +; device/lib/_divulong.c: 340: c = MSB_SET(x); + ld a, (0x09, sp) + sll a + clr a + rlc a + ld (0x01, sp), a +; device/lib/_divulong.c: 341: x <<= 1; + ldw y, (0x0b, sp) + ldw x, (0x09, sp) + sllw y + rlcw x + ldw (0x0b, sp), y + ldw (0x09, sp), x +; device/lib/_divulong.c: 342: reste <<= 1; + ldw y, (0x05, sp) + ldw x, (0x03, sp) + sllw y + rlcw x + ldw (0x05, sp), y + ldw (0x03, sp), x +; device/lib/_divulong.c: 343: if (c) + tnz (0x01, sp) + jreq __divulong_00102 +; device/lib/_divulong.c: 344: reste |= 1L; + ld a, (0x06, sp) + or a, #0x01 + ld (0x06, sp), a +__divulong_00102: +; device/lib/_divulong.c: 346: if (reste >= y) + ldw x, (0x05, sp) + subw x, (0x0f, sp) + ld a, (0x04, sp) + sbc a, (0x0e, sp) + ld yl, a + ld a, (0x03, sp) + sbc a, (0x0d, sp) + jrc __divulong_00106 +; device/lib/_divulong.c: 348: reste -= y; + ldw (0x05, sp), x + ld yh, a + ldw (0x03, sp), y +; device/lib/_divulong.c: 350: x |= 1L; + ld a, (0x0c, sp) + or a, #0x01 + ld (0x0c, sp), a +__divulong_00106: +; device/lib/_divulong.c: 353: while (--count); + dec (0x02, sp) + jrne __divulong_00105 +; device/lib/_divulong.c: 354: return x; + ldw x, (0x0b, sp) + ldw y, (0x09, sp) + addw sp, #6 + ret diff --git a/device/lib/stm8/_divulong.sym b/device/lib/stm8/_divulong.sym new file mode 100644 index 0000000..b18c653 --- /dev/null +++ b/device/lib/stm8/_divulong.sym @@ -0,0 +1,17 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 __divulo 000000 GR | 1 __divulo 000032 R + 1 __divulo 00000B R | 1 __divulo 00004F R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 5A flags 0 + diff --git a/device/lib/stm8/_divulonglong.asm b/device/lib/stm8/_divulonglong.asm new file mode 100644 index 0000000..0a5a6d4 --- /dev/null +++ b/device/lib/stm8/_divulonglong.asm @@ -0,0 +1,215 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _divulonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __divulonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_divulonglong.c: 39: _divulonglong (unsigned long long x, unsigned long long y) +; ----------------------------------------- +; function _divulonglong +; ----------------------------------------- +__divulonglong: + sub sp, #17 +; ../_divulonglong.c: 41: unsigned long long reste = 0L; + clrw x + ldw (0x10, sp), x + ldw (0x0e, sp), x + ldw (0x0c, sp), x + ldw (0x0a, sp), x +; ../_divulonglong.c: 42: unsigned char count = 64; + ld a, #0x40 + ld (0x01, sp), a +; ../_divulonglong.c: 45: do +00105$: +; ../_divulonglong.c: 48: c = MSB_SET(x); + ld a, (0x16, sp) + sll a + clr a + rlc a +; ../_divulonglong.c: 49: x <<= 1; + sll (0x1d, sp) + rlc (0x1c, sp) + rlc (0x1b, sp) + rlc (0x1a, sp) + rlc (0x19, sp) + rlc (0x18, sp) + rlc (0x17, sp) + rlc (0x16, sp) +; ../_divulonglong.c: 50: reste <<= 1; + sll (0x11, sp) + rlc (0x10, sp) + rlc (0x0f, sp) + rlc (0x0e, sp) + rlc (0x0d, sp) + rlc (0x0c, sp) + rlc (0x0b, sp) + rlc (0x0a, sp) +; ../_divulonglong.c: 51: if (c) + tnz a + jreq 00102$ +; ../_divulonglong.c: 52: reste |= 1L; + ld a, (0x11, sp) + or a, #0x01 + ld (0x09, sp), a + ld a, (0x10, sp) + ld (0x08, sp), a + ld a, (0x0f, sp) + ld (0x07, sp), a + ld a, (0x0e, sp) + exg a, xl + ld a, (0x0d, sp) + exg a, xl + rlwa x + ld a, (0x0c, sp) + rrwa x + exg a, yl + ld a, (0x0b, sp) + exg a, yl + rlwa y + ld a, (0x0a, sp) + rrwa y + ld (0x0e, sp), a + ldw (0x0c, sp), x + ldw (0x0a, sp), y + ldw y, (0x08, sp) + ldw (0x10, sp), y + ld a, (0x07, sp) + ld (0x0f, sp), a +00102$: +; ../_divulonglong.c: 54: if (reste >= y) + ldw x, (0x10, sp) + cpw x, (0x24, sp) + ld a, (0x0f, sp) + sbc a, (0x23, sp) + ld a, (0x0e, sp) + sbc a, (0x22, sp) + ld a, (0x0d, sp) + sbc a, (0x21, sp) + ld a, (0x0c, sp) + sbc a, (0x20, sp) + ld a, (0x0b, sp) + sbc a, (0x1f, sp) + ld a, (0x0a, sp) + sbc a, (0x1e, sp) + jrc 00106$ +; ../_divulonglong.c: 56: reste -= y; + ldw x, (0x10, sp) + subw x, (0x24, sp) + ldw (0x08, sp), x + ld a, (0x0f, sp) + sbc a, (0x23, sp) + ld (0x07, sp), a + ld a, (0x0e, sp) + sbc a, (0x22, sp) + ld (0x06, sp), a + ld a, (0x0d, sp) + sbc a, (0x21, sp) + ld (0x05, sp), a + ld a, (0x0c, sp) + sbc a, (0x20, sp) + ld (0x04, sp), a + ld a, (0x0b, sp) + sbc a, (0x1f, sp) + ld (0x03, sp), a + ld a, (0x0a, sp) + sbc a, (0x1e, sp) + ld (0x02, sp), a + ldw y, (0x08, sp) + ldw (0x10, sp), y + ldw y, (0x06, sp) + ldw (0x0e, sp), y + ldw y, (0x04, sp) + ldw (0x0c, sp), y + ldw y, (0x02, sp) + ldw (0x0a, sp), y +; ../_divulonglong.c: 58: x |= 1L; + ld a, (0x1d, sp) + or a, #0x01 + ld (0x09, sp), a + ld a, (0x1c, sp) + ld (0x08, sp), a + ld a, (0x1b, sp) + ld (0x07, sp), a + ld a, (0x1a, sp) + ld (0x06, sp), a + ld a, (0x19, sp) + ld (0x05, sp), a + ld a, (0x18, sp) + ld (0x04, sp), a + ld a, (0x17, sp) + ld (0x03, sp), a + ld a, (0x16, sp) + ld (0x02, sp), a + ldw y, (0x08, sp) + ldw (0x1c, sp), y + ldw y, (0x06, sp) + ldw (0x1a, sp), y + ldw y, (0x04, sp) + ldw (0x18, sp), y + ldw y, (0x02, sp) + ldw (0x16, sp), y +00106$: +; ../_divulonglong.c: 61: while (--count); + dec (0x01, sp) + jreq 00132$ + jp 00105$ +00132$: +; ../_divulonglong.c: 62: return x; + ldw x, (0x14, sp) + ldw y, (0x1c, sp) + ldw (#6, x), y + ldw y, (0x1a, sp) + ldw (#4, x), y + ldw y, (0x18, sp) + ldw (#2, x), y + ldw y, (0x16, sp) + ldw (x), y +; ../_divulonglong.c: 63: } + addw sp, #17 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_divulonglong.lst b/device/lib/stm8/_divulonglong.lst new file mode 100644 index 0000000..492a58b --- /dev/null +++ b/device/lib/stm8/_divulonglong.lst @@ -0,0 +1,215 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _divulonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __divulonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_divulonglong.c: 39: _divulonglong (unsigned long long x, unsigned long long y) + 50 ; ----------------------------------------- + 51 ; function _divulonglong + 52 ; ----------------------------------------- + 000000 53 __divulonglong: + 000000 52 11 [ 2] 54 sub sp, #17 + 55 ; ../_divulonglong.c: 41: unsigned long long reste = 0L; + 000002 5F [ 1] 56 clrw x + 000003 1F 10 [ 2] 57 ldw (0x10, sp), x + 000005 1F 0E [ 2] 58 ldw (0x0e, sp), x + 000007 1F 0C [ 2] 59 ldw (0x0c, sp), x + 000009 1F 0A [ 2] 60 ldw (0x0a, sp), x + 61 ; ../_divulonglong.c: 42: unsigned char count = 64; + 00000B A6 40 [ 1] 62 ld a, #0x40 + 00000D 6B 01 [ 1] 63 ld (0x01, sp), a + 64 ; ../_divulonglong.c: 45: do + 00000F 65 00105$: + 66 ; ../_divulonglong.c: 48: c = MSB_SET(x); + 00000F 7B 16 [ 1] 67 ld a, (0x16, sp) + 000011 48 [ 1] 68 sll a + 000012 4F [ 1] 69 clr a + 000013 49 [ 1] 70 rlc a + 71 ; ../_divulonglong.c: 49: x <<= 1; + 000014 08 1D [ 1] 72 sll (0x1d, sp) + 000016 09 1C [ 1] 73 rlc (0x1c, sp) + 000018 09 1B [ 1] 74 rlc (0x1b, sp) + 00001A 09 1A [ 1] 75 rlc (0x1a, sp) + 00001C 09 19 [ 1] 76 rlc (0x19, sp) + 00001E 09 18 [ 1] 77 rlc (0x18, sp) + 000020 09 17 [ 1] 78 rlc (0x17, sp) + 000022 09 16 [ 1] 79 rlc (0x16, sp) + 80 ; ../_divulonglong.c: 50: reste <<= 1; + 000024 08 11 [ 1] 81 sll (0x11, sp) + 000026 09 10 [ 1] 82 rlc (0x10, sp) + 000028 09 0F [ 1] 83 rlc (0x0f, sp) + 00002A 09 0E [ 1] 84 rlc (0x0e, sp) + 00002C 09 0D [ 1] 85 rlc (0x0d, sp) + 00002E 09 0C [ 1] 86 rlc (0x0c, sp) + 000030 09 0B [ 1] 87 rlc (0x0b, sp) + 000032 09 0A [ 1] 88 rlc (0x0a, sp) + 89 ; ../_divulonglong.c: 51: if (c) + 000034 4D [ 1] 90 tnz a + 000035 27 30 [ 1] 91 jreq 00102$ + 92 ; ../_divulonglong.c: 52: reste |= 1L; + 000037 7B 11 [ 1] 93 ld a, (0x11, sp) + 000039 AA 01 [ 1] 94 or a, #0x01 + 00003B 6B 09 [ 1] 95 ld (0x09, sp), a + 00003D 7B 10 [ 1] 96 ld a, (0x10, sp) + 00003F 6B 08 [ 1] 97 ld (0x08, sp), a + 000041 7B 0F [ 1] 98 ld a, (0x0f, sp) + 000043 6B 07 [ 1] 99 ld (0x07, sp), a + 000045 7B 0E [ 1] 100 ld a, (0x0e, sp) + 000047 41 [ 1] 101 exg a, xl + 000048 7B 0D [ 1] 102 ld a, (0x0d, sp) + 00004A 41 [ 1] 103 exg a, xl + 00004B 02 [ 1] 104 rlwa x + 00004C 7B 0C [ 1] 105 ld a, (0x0c, sp) + 00004E 01 [ 1] 106 rrwa x + 00004F 61 [ 1] 107 exg a, yl + 000050 7B 0B [ 1] 108 ld a, (0x0b, sp) + 000052 61 [ 1] 109 exg a, yl + 000053 90 02 [ 1] 110 rlwa y + 000055 7B 0A [ 1] 111 ld a, (0x0a, sp) + 000057 90 01 [ 1] 112 rrwa y + 000059 6B 0E [ 1] 113 ld (0x0e, sp), a + 00005B 1F 0C [ 2] 114 ldw (0x0c, sp), x + 00005D 17 0A [ 2] 115 ldw (0x0a, sp), y + 00005F 16 08 [ 2] 116 ldw y, (0x08, sp) + 000061 17 10 [ 2] 117 ldw (0x10, sp), y + 000063 7B 07 [ 1] 118 ld a, (0x07, sp) + 000065 6B 0F [ 1] 119 ld (0x0f, sp), a + 000067 120 00102$: + 121 ; ../_divulonglong.c: 54: if (reste >= y) + 000067 1E 10 [ 2] 122 ldw x, (0x10, sp) + 000069 13 24 [ 2] 123 cpw x, (0x24, sp) + 00006B 7B 0F [ 1] 124 ld a, (0x0f, sp) + 00006D 12 23 [ 1] 125 sbc a, (0x23, sp) + 00006F 7B 0E [ 1] 126 ld a, (0x0e, sp) + 000071 12 22 [ 1] 127 sbc a, (0x22, sp) + 000073 7B 0D [ 1] 128 ld a, (0x0d, sp) + 000075 12 21 [ 1] 129 sbc a, (0x21, sp) + 000077 7B 0C [ 1] 130 ld a, (0x0c, sp) + 000079 12 20 [ 1] 131 sbc a, (0x20, sp) + 00007B 7B 0B [ 1] 132 ld a, (0x0b, sp) + 00007D 12 1F [ 1] 133 sbc a, (0x1f, sp) + 00007F 7B 0A [ 1] 134 ld a, (0x0a, sp) + 000081 12 1E [ 1] 135 sbc a, (0x1e, sp) + 000083 25 6D [ 1] 136 jrc 00106$ + 137 ; ../_divulonglong.c: 56: reste -= y; + 000085 1E 10 [ 2] 138 ldw x, (0x10, sp) + 000087 72 F0 24 [ 2] 139 subw x, (0x24, sp) + 00008A 1F 08 [ 2] 140 ldw (0x08, sp), x + 00008C 7B 0F [ 1] 141 ld a, (0x0f, sp) + 00008E 12 23 [ 1] 142 sbc a, (0x23, sp) + 000090 6B 07 [ 1] 143 ld (0x07, sp), a + 000092 7B 0E [ 1] 144 ld a, (0x0e, sp) + 000094 12 22 [ 1] 145 sbc a, (0x22, sp) + 000096 6B 06 [ 1] 146 ld (0x06, sp), a + 000098 7B 0D [ 1] 147 ld a, (0x0d, sp) + 00009A 12 21 [ 1] 148 sbc a, (0x21, sp) + 00009C 6B 05 [ 1] 149 ld (0x05, sp), a + 00009E 7B 0C [ 1] 150 ld a, (0x0c, sp) + 0000A0 12 20 [ 1] 151 sbc a, (0x20, sp) + 0000A2 6B 04 [ 1] 152 ld (0x04, sp), a + 0000A4 7B 0B [ 1] 153 ld a, (0x0b, sp) + 0000A6 12 1F [ 1] 154 sbc a, (0x1f, sp) + 0000A8 6B 03 [ 1] 155 ld (0x03, sp), a + 0000AA 7B 0A [ 1] 156 ld a, (0x0a, sp) + 0000AC 12 1E [ 1] 157 sbc a, (0x1e, sp) + 0000AE 6B 02 [ 1] 158 ld (0x02, sp), a + 0000B0 16 08 [ 2] 159 ldw y, (0x08, sp) + 0000B2 17 10 [ 2] 160 ldw (0x10, sp), y + 0000B4 16 06 [ 2] 161 ldw y, (0x06, sp) + 0000B6 17 0E [ 2] 162 ldw (0x0e, sp), y + 0000B8 16 04 [ 2] 163 ldw y, (0x04, sp) + 0000BA 17 0C [ 2] 164 ldw (0x0c, sp), y + 0000BC 16 02 [ 2] 165 ldw y, (0x02, sp) + 0000BE 17 0A [ 2] 166 ldw (0x0a, sp), y + 167 ; ../_divulonglong.c: 58: x |= 1L; + 0000C0 7B 1D [ 1] 168 ld a, (0x1d, sp) + 0000C2 AA 01 [ 1] 169 or a, #0x01 + 0000C4 6B 09 [ 1] 170 ld (0x09, sp), a + 0000C6 7B 1C [ 1] 171 ld a, (0x1c, sp) + 0000C8 6B 08 [ 1] 172 ld (0x08, sp), a + 0000CA 7B 1B [ 1] 173 ld a, (0x1b, sp) + 0000CC 6B 07 [ 1] 174 ld (0x07, sp), a + 0000CE 7B 1A [ 1] 175 ld a, (0x1a, sp) + 0000D0 6B 06 [ 1] 176 ld (0x06, sp), a + 0000D2 7B 19 [ 1] 177 ld a, (0x19, sp) + 0000D4 6B 05 [ 1] 178 ld (0x05, sp), a + 0000D6 7B 18 [ 1] 179 ld a, (0x18, sp) + 0000D8 6B 04 [ 1] 180 ld (0x04, sp), a + 0000DA 7B 17 [ 1] 181 ld a, (0x17, sp) + 0000DC 6B 03 [ 1] 182 ld (0x03, sp), a + 0000DE 7B 16 [ 1] 183 ld a, (0x16, sp) + 0000E0 6B 02 [ 1] 184 ld (0x02, sp), a + 0000E2 16 08 [ 2] 185 ldw y, (0x08, sp) + 0000E4 17 1C [ 2] 186 ldw (0x1c, sp), y + 0000E6 16 06 [ 2] 187 ldw y, (0x06, sp) + 0000E8 17 1A [ 2] 188 ldw (0x1a, sp), y + 0000EA 16 04 [ 2] 189 ldw y, (0x04, sp) + 0000EC 17 18 [ 2] 190 ldw (0x18, sp), y + 0000EE 16 02 [ 2] 191 ldw y, (0x02, sp) + 0000F0 17 16 [ 2] 192 ldw (0x16, sp), y + 0000F2 193 00106$: + 194 ; ../_divulonglong.c: 61: while (--count); + 0000F2 0A 01 [ 1] 195 dec (0x01, sp) + 0000F4 27 03 [ 1] 196 jreq 00132$ + 0000F6 CCr00r0F [ 2] 197 jp 00105$ + 0000F9 198 00132$: + 199 ; ../_divulonglong.c: 62: return x; + 0000F9 1E 14 [ 2] 200 ldw x, (0x14, sp) + 0000FB 16 1C [ 2] 201 ldw y, (0x1c, sp) + 0000FD EF 06 [ 2] 202 ldw (#6, x), y + 0000FF 16 1A [ 2] 203 ldw y, (0x1a, sp) + 000101 EF 04 [ 2] 204 ldw (#4, x), y + 000103 16 18 [ 2] 205 ldw y, (0x18, sp) + 000105 EF 02 [ 2] 206 ldw (#2, x), y + 000107 16 16 [ 2] 207 ldw y, (0x16, sp) + 000109 FF [ 2] 208 ldw (x), y + 209 ; ../_divulonglong.c: 63: } + 00010A 5B 11 [ 2] 210 addw sp, #17 + 00010C 81 [ 4] 211 ret + 212 .area CODE + 213 .area CONST + 214 .area INITIALIZER + 215 .area CABS (ABS) diff --git a/device/lib/stm8/_divulonglong.rel b/device/lib/stm8/_divulonglong.rel new file mode 100644 index 0000000..5e34e10 --- /dev/null +++ b/device/lib/stm8/_divulonglong.rel @@ -0,0 +1,73 @@ +XH3 +H B areas 2 global symbols +M _divulonglong +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 10D flags 0 addr 0 +S __divulonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 11 5F 1F 10 1F 0E 1F 0C 1F 0A A6 40 +R 00 00 00 09 +T 00 00 0D 6B 01 +R 00 00 00 09 +T 00 00 0F +R 00 00 00 09 +T 00 00 0F 7B 16 48 4F 49 08 1D 09 1C 09 1B 09 1A +R 00 00 00 09 +T 00 00 1C 09 19 09 18 09 17 09 16 08 11 09 10 09 +R 00 00 00 09 +T 00 00 29 0F 09 0E 09 0D 09 0C 09 0B 09 0A 4D 27 +R 00 00 00 09 +T 00 00 36 30 7B 11 AA 01 6B 09 7B 10 6B 08 7B 0F +R 00 00 00 09 +T 00 00 43 6B 07 7B 0E 41 7B 0D 41 02 7B 0C 01 61 +R 00 00 00 09 +T 00 00 50 7B 0B 61 90 02 7B 0A 90 01 6B 0E 1F 0C +R 00 00 00 09 +T 00 00 5D 17 0A 16 08 17 10 7B 07 6B 0F +R 00 00 00 09 +T 00 00 67 +R 00 00 00 09 +T 00 00 67 1E 10 13 24 7B 0F 12 23 7B 0E 12 22 7B +R 00 00 00 09 +T 00 00 74 0D 12 21 7B 0C 12 20 7B 0B 12 1F 7B 0A +R 00 00 00 09 +T 00 00 81 12 1E 25 6D 1E 10 72 F0 24 1F 08 7B 0F +R 00 00 00 09 +T 00 00 8E 12 23 6B 07 7B 0E 12 22 6B 06 7B 0D 12 +R 00 00 00 09 +T 00 00 9B 21 6B 05 7B 0C 12 20 6B 04 7B 0B 12 1F +R 00 00 00 09 +T 00 00 A8 6B 03 7B 0A 12 1E 6B 02 16 08 17 10 16 +R 00 00 00 09 +T 00 00 B5 06 17 0E 16 04 17 0C 16 02 17 0A 7B 1D +R 00 00 00 09 +T 00 00 C2 AA 01 6B 09 7B 1C 6B 08 7B 1B 6B 07 7B +R 00 00 00 09 +T 00 00 CF 1A 6B 06 7B 19 6B 05 7B 18 6B 04 7B 17 +R 00 00 00 09 +T 00 00 DC 6B 03 7B 16 6B 02 16 08 17 1C 16 06 17 +R 00 00 00 09 +T 00 00 E9 1A 16 04 17 18 16 02 17 16 +R 00 00 00 09 +T 00 00 F2 +R 00 00 00 09 +T 00 00 F2 0A 01 27 03 CC 00 0F +R 00 00 00 09 00 08 00 09 +T 00 00 F9 +R 00 00 00 09 +T 00 00 F9 1E 14 16 1C EF 06 16 1A EF 04 16 18 EF +R 00 00 00 09 +T 00 01 06 02 16 16 FF 5B 11 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_divulonglong.sym b/device/lib/stm8/_divulonglong.sym new file mode 100644 index 0000000..fec79f2 --- /dev/null +++ b/device/lib/stm8/_divulonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __divulonglong 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 10D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fast_long_neg.lst b/device/lib/stm8/_fast_long_neg.lst new file mode 100644 index 0000000..cf730c2 --- /dev/null +++ b/device/lib/stm8/_fast_long_neg.lst @@ -0,0 +1,41 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _fast_long_neg.s + 3 ; + 4 ; Copyright (C) 2014, Ben Shi + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __fast_long_neg + 30 + 31 .area CODE + 000000 32 __fast_long_neg: + 000000 90 53 [ 2] 33 cplw y + 000002 5D [ 2] 34 tnzw x + 000003 27 03 [ 1] 35 jreq __fast_long_neg_0 + 000005 53 [ 2] 36 cplw x + 000006 5C [ 1] 37 incw x + 000007 81 [ 4] 38 ret + 000008 39 __fast_long_neg_0: + 000008 90 5C [ 1] 40 incw y + 00000A 81 [ 4] 41 ret diff --git a/device/lib/stm8/_fast_long_neg.rel b/device/lib/stm8/_fast_long_neg.rel new file mode 100644 index 0000000..d06b291 --- /dev/null +++ b/device/lib/stm8/_fast_long_neg.rel @@ -0,0 +1,14 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size B flags 0 addr 0 +S __fast_long_neg Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 90 53 5D 27 03 53 5C 81 +R 00 00 00 01 +T 00 00 08 +R 00 00 00 01 +T 00 00 08 90 5C 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_fast_long_neg.s b/device/lib/stm8/_fast_long_neg.s new file mode 100644 index 0000000..7b81d26 --- /dev/null +++ b/device/lib/stm8/_fast_long_neg.s @@ -0,0 +1,41 @@ +;-------------------------------------------------------------------------- +; _fast_long_neg.s +; +; Copyright (C) 2014, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl __fast_long_neg + + .area CODE +__fast_long_neg: + cplw y + tnzw x + jreq __fast_long_neg_0 + cplw x + incw x + ret +__fast_long_neg_0: + incw y + ret
\ No newline at end of file diff --git a/device/lib/stm8/_fast_long_neg.sym b/device/lib/stm8/_fast_long_neg.sym new file mode 100644 index 0000000..d5e6d5b --- /dev/null +++ b/device/lib/stm8/_fast_long_neg.sym @@ -0,0 +1,16 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 __fast_l 000000 GR | 1 __fast_l 000008 R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size B flags 0 + diff --git a/device/lib/stm8/_fs2schar.asm b/device/lib/stm8/_fs2schar.asm new file mode 100644 index 0000000..40e0fa9 --- /dev/null +++ b/device/lib/stm8/_fs2schar.asm @@ -0,0 +1,98 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fs2schar + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fs2slong + .globl ___fs2schar +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fs2schar.c: 87: signed char __fs2schar (float f) +; ----------------------------------------- +; function __fs2schar +; ----------------------------------------- +___fs2schar: + sub sp, #4 +; ../_fs2schar.c: 89: signed long sl=__fs2slong(f); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fs2slong + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../_fs2schar.c: 90: if (sl>=SCHAR_MAX) + ldw x, (0x03, sp) + cpw x, #0x007f + ld a, (0x02, sp) + sbc a, #0x00 + ld a, (0x01, sp) + sbc a, #0x00 + jrslt 00102$ +; ../_fs2schar.c: 91: return SCHAR_MAX; + ld a, #0x7f + jra 00105$ +00102$: +; ../_fs2schar.c: 92: if (sl<=SCHAR_MIN) + ldw x, #0xff80 + cpw x, (0x03, sp) + ld a, #0xff + sbc a, (0x02, sp) + ld a, #0xff + sbc a, (0x01, sp) + jrslt 00104$ +; ../_fs2schar.c: 93: return -SCHAR_MIN; + ld a, #0x80 + jra 00105$ +00104$: +; ../_fs2schar.c: 94: return sl; + ld a, (0x04, sp) +00105$: +; ../_fs2schar.c: 95: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fs2schar.lst b/device/lib/stm8/_fs2schar.lst new file mode 100644 index 0000000..de1b9e8 --- /dev/null +++ b/device/lib/stm8/_fs2schar.lst @@ -0,0 +1,98 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fs2schar + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fs2slong + 12 .globl ___fs2schar + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_fs2schar.c: 87: signed char __fs2schar (float f) + 51 ; ----------------------------------------- + 52 ; function __fs2schar + 53 ; ----------------------------------------- + 000000 54 ___fs2schar: + 000000 52 04 [ 2] 55 sub sp, #4 + 56 ; ../_fs2schar.c: 89: signed long sl=__fs2slong(f); + 000002 1E 09 [ 2] 57 ldw x, (0x09, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 09 [ 2] 59 ldw x, (0x09, sp) + 000007 89 [ 2] 60 pushw x + 000008 CDr00r00 [ 4] 61 call ___fs2slong + 00000B 5B 04 [ 2] 62 addw sp, #4 + 00000D 1F 03 [ 2] 63 ldw (0x03, sp), x + 00000F 17 01 [ 2] 64 ldw (0x01, sp), y + 65 ; ../_fs2schar.c: 90: if (sl>=SCHAR_MAX) + 000011 1E 03 [ 2] 66 ldw x, (0x03, sp) + 000013 A3 00 7F [ 2] 67 cpw x, #0x007f + 000016 7B 02 [ 1] 68 ld a, (0x02, sp) + 000018 A2 00 [ 1] 69 sbc a, #0x00 + 00001A 7B 01 [ 1] 70 ld a, (0x01, sp) + 00001C A2 00 [ 1] 71 sbc a, #0x00 + 00001E 2F 04 [ 1] 72 jrslt 00102$ + 73 ; ../_fs2schar.c: 91: return SCHAR_MAX; + 000020 A6 7F [ 1] 74 ld a, #0x7f + 000022 20 15 [ 2] 75 jra 00105$ + 000024 76 00102$: + 77 ; ../_fs2schar.c: 92: if (sl<=SCHAR_MIN) + 000024 AE FF 80 [ 2] 78 ldw x, #0xff80 + 000027 13 03 [ 2] 79 cpw x, (0x03, sp) + 000029 A6 FF [ 1] 80 ld a, #0xff + 00002B 12 02 [ 1] 81 sbc a, (0x02, sp) + 00002D A6 FF [ 1] 82 ld a, #0xff + 00002F 12 01 [ 1] 83 sbc a, (0x01, sp) + 000031 2F 04 [ 1] 84 jrslt 00104$ + 85 ; ../_fs2schar.c: 93: return -SCHAR_MIN; + 000033 A6 80 [ 1] 86 ld a, #0x80 + 000035 20 02 [ 2] 87 jra 00105$ + 000037 88 00104$: + 89 ; ../_fs2schar.c: 94: return sl; + 000037 7B 04 [ 1] 90 ld a, (0x04, sp) + 000039 91 00105$: + 92 ; ../_fs2schar.c: 95: } + 000039 5B 04 [ 2] 93 addw sp, #4 + 00003B 81 [ 4] 94 ret + 95 .area CODE + 96 .area CONST + 97 .area INITIALIZER + 98 .area CABS (ABS) diff --git a/device/lib/stm8/_fs2schar.rel b/device/lib/stm8/_fs2schar.rel new file mode 100644 index 0000000..542073c --- /dev/null +++ b/device/lib/stm8/_fs2schar.rel @@ -0,0 +1,40 @@ +XH3 +H B areas 3 global symbols +M _fs2schar +O -mstm8 +S ___fs2slong Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 3C flags 0 addr 0 +S ___fs2schar Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 1E 09 89 1E 09 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 00 +T 00 00 0D 1F 03 17 01 1E 03 A3 00 7F 7B 02 A2 00 +R 00 00 00 09 +T 00 00 1A 7B 01 A2 00 2F 04 A6 7F 20 15 +R 00 00 00 09 +T 00 00 24 +R 00 00 00 09 +T 00 00 24 AE FF 80 13 03 A6 FF 12 02 A6 FF 12 01 +R 00 00 00 09 +T 00 00 31 2F 04 A6 80 20 02 +R 00 00 00 09 +T 00 00 37 +R 00 00 00 09 +T 00 00 37 7B 04 +R 00 00 00 09 +T 00 00 39 +R 00 00 00 09 +T 00 00 39 5B 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fs2schar.sym b/device/lib/stm8/_fs2schar.sym new file mode 100644 index 0000000..fdd8aaf --- /dev/null +++ b/device/lib/stm8/_fs2schar.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fs2schar 000000 GR + ___fs2slong ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 3C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fs2sint.asm b/device/lib/stm8/_fs2sint.asm new file mode 100644 index 0000000..c9e207a --- /dev/null +++ b/device/lib/stm8/_fs2sint.asm @@ -0,0 +1,98 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fs2sint + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fs2slong + .globl ___fs2sint +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fs2sint.c: 81: signed int __fs2sint (float f) +; ----------------------------------------- +; function __fs2sint +; ----------------------------------------- +___fs2sint: + sub sp, #4 +; ../_fs2sint.c: 83: signed long sl=__fs2slong(f); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fs2slong + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../_fs2sint.c: 84: if (sl>=INT_MAX) + ldw x, (0x03, sp) + cpw x, #0x7fff + ld a, (0x02, sp) + sbc a, #0x00 + ld a, (0x01, sp) + sbc a, #0x00 + jrslt 00102$ +; ../_fs2sint.c: 85: return INT_MAX; + ldw x, #0x7fff + jra 00105$ +00102$: +; ../_fs2sint.c: 86: if (sl<=INT_MIN) + ldw x, #0x8000 + cpw x, (0x03, sp) + ld a, #0xff + sbc a, (0x02, sp) + ld a, #0xff + sbc a, (0x01, sp) + jrslt 00104$ +; ../_fs2sint.c: 87: return -INT_MIN; + ldw x, #0x8000 +; ../_fs2sint.c: 88: return sl; + .byte 0xc5 +00104$: + ldw x, (0x03, sp) +00105$: +; ../_fs2sint.c: 89: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fs2sint.lst b/device/lib/stm8/_fs2sint.lst new file mode 100644 index 0000000..90d3dee --- /dev/null +++ b/device/lib/stm8/_fs2sint.lst @@ -0,0 +1,98 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fs2sint + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fs2slong + 12 .globl ___fs2sint + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_fs2sint.c: 81: signed int __fs2sint (float f) + 51 ; ----------------------------------------- + 52 ; function __fs2sint + 53 ; ----------------------------------------- + 000000 54 ___fs2sint: + 000000 52 04 [ 2] 55 sub sp, #4 + 56 ; ../_fs2sint.c: 83: signed long sl=__fs2slong(f); + 000002 1E 09 [ 2] 57 ldw x, (0x09, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 09 [ 2] 59 ldw x, (0x09, sp) + 000007 89 [ 2] 60 pushw x + 000008 CDr00r00 [ 4] 61 call ___fs2slong + 00000B 5B 04 [ 2] 62 addw sp, #4 + 00000D 1F 03 [ 2] 63 ldw (0x03, sp), x + 00000F 17 01 [ 2] 64 ldw (0x01, sp), y + 65 ; ../_fs2sint.c: 84: if (sl>=INT_MAX) + 000011 1E 03 [ 2] 66 ldw x, (0x03, sp) + 000013 A3 7F FF [ 2] 67 cpw x, #0x7fff + 000016 7B 02 [ 1] 68 ld a, (0x02, sp) + 000018 A2 00 [ 1] 69 sbc a, #0x00 + 00001A 7B 01 [ 1] 70 ld a, (0x01, sp) + 00001C A2 00 [ 1] 71 sbc a, #0x00 + 00001E 2F 05 [ 1] 72 jrslt 00102$ + 73 ; ../_fs2sint.c: 85: return INT_MAX; + 000020 AE 7F FF [ 2] 74 ldw x, #0x7fff + 000023 20 15 [ 2] 75 jra 00105$ + 000025 76 00102$: + 77 ; ../_fs2sint.c: 86: if (sl<=INT_MIN) + 000025 AE 80 00 [ 2] 78 ldw x, #0x8000 + 000028 13 03 [ 2] 79 cpw x, (0x03, sp) + 00002A A6 FF [ 1] 80 ld a, #0xff + 00002C 12 02 [ 1] 81 sbc a, (0x02, sp) + 00002E A6 FF [ 1] 82 ld a, #0xff + 000030 12 01 [ 1] 83 sbc a, (0x01, sp) + 000032 2F 04 [ 1] 84 jrslt 00104$ + 85 ; ../_fs2sint.c: 87: return -INT_MIN; + 000034 AE 80 00 [ 2] 86 ldw x, #0x8000 + 87 ; ../_fs2sint.c: 88: return sl; + 000037 C5 88 .byte 0xc5 + 000038 89 00104$: + 000038 1E 03 [ 2] 90 ldw x, (0x03, sp) + 00003A 91 00105$: + 92 ; ../_fs2sint.c: 89: } + 00003A 5B 04 [ 2] 93 addw sp, #4 + 00003C 81 [ 4] 94 ret + 95 .area CODE + 96 .area CONST + 97 .area INITIALIZER + 98 .area CABS (ABS) diff --git a/device/lib/stm8/_fs2sint.rel b/device/lib/stm8/_fs2sint.rel new file mode 100644 index 0000000..00b55e7 --- /dev/null +++ b/device/lib/stm8/_fs2sint.rel @@ -0,0 +1,40 @@ +XH3 +H B areas 3 global symbols +M _fs2sint +O -mstm8 +S ___fs2slong Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 3D flags 0 addr 0 +S ___fs2sint Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 1E 09 89 1E 09 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 00 +T 00 00 0D 1F 03 17 01 1E 03 A3 7F FF 7B 02 A2 00 +R 00 00 00 09 +T 00 00 1A 7B 01 A2 00 2F 05 AE 7F FF 20 15 +R 00 00 00 09 +T 00 00 25 +R 00 00 00 09 +T 00 00 25 AE 80 00 13 03 A6 FF 12 02 A6 FF 12 01 +R 00 00 00 09 +T 00 00 32 2F 04 AE 80 00 C5 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1E 03 +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 5B 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fs2sint.sym b/device/lib/stm8/_fs2sint.sym new file mode 100644 index 0000000..a816f04 --- /dev/null +++ b/device/lib/stm8/_fs2sint.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fs2sint 000000 GR + ___fs2slong ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 3D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fs2slong.asm b/device/lib/stm8/_fs2slong.asm new file mode 100644 index 0000000..36e2d4d --- /dev/null +++ b/device/lib/stm8/_fs2slong.asm @@ -0,0 +1,115 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fs2slong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fs2ulong + .globl ___fs2slong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fs2slong.c: 108: signed long __fs2slong (float f) +; ----------------------------------------- +; function __fs2slong +; ----------------------------------------- +___fs2slong: + sub sp, #4 +; ../_fs2slong.c: 111: if (!f) + ldw x, (0x09, sp) + jrne 00102$ + ldw x, (0x07, sp) + sllw x + jrne 00102$ +; ../_fs2slong.c: 112: return 0; + clrw x + clrw y + jra 00106$ +00102$: +; ../_fs2slong.c: 114: if (f<0) { + clrw x + pushw x + clrw x + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00104$ +; ../_fs2slong.c: 115: return -__fs2ulong(-f); + ldw y, (0x09, sp) + ldw x, (0x07, sp) + sllw x + ccf + rrcw x + pushw y + pushw x + call ___fs2ulong + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y + ldw x, (0x03, sp) + negw x + ldw y, (0x01, sp) + jrnc 00121$ + incw y +00121$: + negw y + jra 00106$ +00104$: +; ../_fs2slong.c: 117: return __fs2ulong(f); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fs2ulong + addw sp, #4 +00106$: +; ../_fs2slong.c: 119: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fs2slong.lst b/device/lib/stm8/_fs2slong.lst new file mode 100644 index 0000000..5c01bf9 --- /dev/null +++ b/device/lib/stm8/_fs2slong.lst @@ -0,0 +1,115 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fs2slong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fs2ulong + 12 .globl ___fs2slong + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_fs2slong.c: 108: signed long __fs2slong (float f) + 51 ; ----------------------------------------- + 52 ; function __fs2slong + 53 ; ----------------------------------------- + 000000 54 ___fs2slong: + 000000 52 04 [ 2] 55 sub sp, #4 + 56 ; ../_fs2slong.c: 111: if (!f) + 000002 1E 09 [ 2] 57 ldw x, (0x09, sp) + 000004 26 0A [ 1] 58 jrne 00102$ + 000006 1E 07 [ 2] 59 ldw x, (0x07, sp) + 000008 58 [ 2] 60 sllw x + 000009 26 05 [ 1] 61 jrne 00102$ + 62 ; ../_fs2slong.c: 112: return 0; + 00000B 5F [ 1] 63 clrw x + 00000C 90 5F [ 1] 64 clrw y + 00000E 20 3D [ 2] 65 jra 00106$ + 000010 66 00102$: + 67 ; ../_fs2slong.c: 114: if (f<0) { + 000010 5F [ 1] 68 clrw x + 000011 89 [ 2] 69 pushw x + 000012 5F [ 1] 70 clrw x + 000013 89 [ 2] 71 pushw x + 000014 1E 0D [ 2] 72 ldw x, (0x0d, sp) + 000016 89 [ 2] 73 pushw x + 000017 1E 0D [ 2] 74 ldw x, (0x0d, sp) + 000019 89 [ 2] 75 pushw x + 00001A CDr00r00 [ 4] 76 call ___fslt + 00001D 5B 08 [ 2] 77 addw sp, #8 + 00001F 4D [ 1] 78 tnz a + 000020 27 20 [ 1] 79 jreq 00104$ + 80 ; ../_fs2slong.c: 115: return -__fs2ulong(-f); + 000022 16 09 [ 2] 81 ldw y, (0x09, sp) + 000024 1E 07 [ 2] 82 ldw x, (0x07, sp) + 000026 58 [ 2] 83 sllw x + 000027 8C [ 1] 84 ccf + 000028 56 [ 2] 85 rrcw x + 000029 90 89 [ 2] 86 pushw y + 00002B 89 [ 2] 87 pushw x + 00002C CDr00r00 [ 4] 88 call ___fs2ulong + 00002F 5B 04 [ 2] 89 addw sp, #4 + 000031 1F 03 [ 2] 90 ldw (0x03, sp), x + 000033 17 01 [ 2] 91 ldw (0x01, sp), y + 000035 1E 03 [ 2] 92 ldw x, (0x03, sp) + 000037 50 [ 2] 93 negw x + 000038 16 01 [ 2] 94 ldw y, (0x01, sp) + 00003A 24 02 [ 1] 95 jrnc 00121$ + 00003C 90 5C [ 1] 96 incw y + 00003E 97 00121$: + 00003E 90 50 [ 2] 98 negw y + 000040 20 0B [ 2] 99 jra 00106$ + 000042 100 00104$: + 101 ; ../_fs2slong.c: 117: return __fs2ulong(f); + 000042 1E 09 [ 2] 102 ldw x, (0x09, sp) + 000044 89 [ 2] 103 pushw x + 000045 1E 09 [ 2] 104 ldw x, (0x09, sp) + 000047 89 [ 2] 105 pushw x + 000048 CDr00r00 [ 4] 106 call ___fs2ulong + 00004B 5B 04 [ 2] 107 addw sp, #4 + 00004D 108 00106$: + 109 ; ../_fs2slong.c: 119: } + 00004D 5B 04 [ 2] 110 addw sp, #4 + 00004F 81 [ 4] 111 ret + 112 .area CODE + 113 .area CONST + 114 .area INITIALIZER + 115 .area CABS (ABS) diff --git a/device/lib/stm8/_fs2slong.rel b/device/lib/stm8/_fs2slong.rel new file mode 100644 index 0000000..81509ca --- /dev/null +++ b/device/lib/stm8/_fs2slong.rel @@ -0,0 +1,47 @@ +XH3 +H B areas 4 global symbols +M _fs2slong +O -mstm8 +S ___fs2ulong Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 50 flags 0 addr 0 +S ___fs2slong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 1E 09 26 0A 1E 07 58 26 05 5F 90 +R 00 00 00 09 +T 00 00 0D 5F 20 3D +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 5F 89 5F 89 1E 0D 89 1E 0D 89 CD 00 00 +R 00 00 00 09 02 0E 00 01 +T 00 00 1D 5B 08 4D 27 20 16 09 1E 07 58 8C 56 90 +R 00 00 00 09 +T 00 00 2A 89 89 CD 00 00 5B 04 1F 03 17 01 1E 03 +R 00 00 00 09 02 06 00 00 +T 00 00 37 50 16 01 24 02 90 5C +R 00 00 00 09 +T 00 00 3E +R 00 00 00 09 +T 00 00 3E 90 50 20 0B +R 00 00 00 09 +T 00 00 42 +R 00 00 00 09 +T 00 00 42 1E 09 89 1E 09 89 CD 00 00 5B 04 +R 00 00 00 09 02 0A 00 00 +T 00 00 4D +R 00 00 00 09 +T 00 00 4D 5B 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fs2slong.sym b/device/lib/stm8/_fs2slong.sym new file mode 100644 index 0000000..f7cee1f --- /dev/null +++ b/device/lib/stm8/_fs2slong.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fs2slong 000000 GR + ___fs2ulong ****** GX + ___fslt ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 50 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fs2uchar.asm b/device/lib/stm8/_fs2uchar.asm new file mode 100644 index 0000000..05978a0 --- /dev/null +++ b/device/lib/stm8/_fs2uchar.asm @@ -0,0 +1,79 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fs2uchar + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fs2ulong + .globl ___fs2uchar +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fs2uchar.c: 51: unsigned char __fs2uchar (float f) +; ----------------------------------------- +; function __fs2uchar +; ----------------------------------------- +___fs2uchar: +; ../_fs2uchar.c: 53: unsigned long ul=__fs2ulong(f); + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + call ___fs2ulong + addw sp, #4 +; ../_fs2uchar.c: 54: if (ul>=UCHAR_MAX) return UCHAR_MAX; + cpw x, #0x00ff + ld a, yl + sbc a, #0x00 + ld a, yh + sbc a, #0x00 + jrc 00102$ + ld a, #0xff + ret +00102$: +; ../_fs2uchar.c: 55: return ul; + ld a, xl +; ../_fs2uchar.c: 56: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fs2uchar.lst b/device/lib/stm8/_fs2uchar.lst new file mode 100644 index 0000000..310f3ab --- /dev/null +++ b/device/lib/stm8/_fs2uchar.lst @@ -0,0 +1,79 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fs2uchar + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fs2ulong + 12 .globl ___fs2uchar + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_fs2uchar.c: 51: unsigned char __fs2uchar (float f) + 51 ; ----------------------------------------- + 52 ; function __fs2uchar + 53 ; ----------------------------------------- + 000000 54 ___fs2uchar: + 55 ; ../_fs2uchar.c: 53: unsigned long ul=__fs2ulong(f); + 000000 1E 05 [ 2] 56 ldw x, (0x05, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 05 [ 2] 58 ldw x, (0x05, sp) + 000005 89 [ 2] 59 pushw x + 000006 CDr00r00 [ 4] 60 call ___fs2ulong + 000009 5B 04 [ 2] 61 addw sp, #4 + 62 ; ../_fs2uchar.c: 54: if (ul>=UCHAR_MAX) return UCHAR_MAX; + 00000B A3 00 FF [ 2] 63 cpw x, #0x00ff + 00000E 90 9F [ 1] 64 ld a, yl + 000010 A2 00 [ 1] 65 sbc a, #0x00 + 000012 90 9E [ 1] 66 ld a, yh + 000014 A2 00 [ 1] 67 sbc a, #0x00 + 000016 25 03 [ 1] 68 jrc 00102$ + 000018 A6 FF [ 1] 69 ld a, #0xff + 00001A 81 [ 4] 70 ret + 00001B 71 00102$: + 72 ; ../_fs2uchar.c: 55: return ul; + 00001B 9F [ 1] 73 ld a, xl + 74 ; ../_fs2uchar.c: 56: } + 00001C 81 [ 4] 75 ret + 76 .area CODE + 77 .area CONST + 78 .area INITIALIZER + 79 .area CABS (ABS) diff --git a/device/lib/stm8/_fs2uchar.rel b/device/lib/stm8/_fs2uchar.rel new file mode 100644 index 0000000..c416b6d --- /dev/null +++ b/device/lib/stm8/_fs2uchar.rel @@ -0,0 +1,30 @@ +XH3 +H B areas 3 global symbols +M _fs2uchar +O -mstm8 +S ___fs2ulong Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1D flags 0 addr 0 +S ___fs2uchar Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 05 89 1E 05 89 CD 00 00 5B 04 A3 +R 00 00 00 09 02 0A 00 00 +T 00 00 0C 00 FF 90 9F A2 00 90 9E A2 00 25 03 A6 +R 00 00 00 09 +T 00 00 19 FF 81 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 9F 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fs2uchar.sym b/device/lib/stm8/_fs2uchar.sym new file mode 100644 index 0000000..513c742 --- /dev/null +++ b/device/lib/stm8/_fs2uchar.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fs2uchar 000000 GR + ___fs2ulong ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fs2uint.asm b/device/lib/stm8/_fs2uint.asm new file mode 100644 index 0000000..378f9ff --- /dev/null +++ b/device/lib/stm8/_fs2uint.asm @@ -0,0 +1,88 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fs2uint + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fs2ulong + .globl ___fs2uint +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fs2uint.c: 54: unsigned int __fs2uint (float f) +; ----------------------------------------- +; function __fs2uint +; ----------------------------------------- +___fs2uint: + sub sp, #4 +; ../_fs2uint.c: 56: unsigned long ul=__fs2ulong(f); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fs2ulong + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../_fs2uint.c: 57: if (ul>=UINT_MAX) return UINT_MAX; + ld a, (0x04, sp) + cp a, #0xff + ld a, (0x03, sp) + sbc a, #0xff + ld a, (0x02, sp) + sbc a, #0x00 + ld a, (0x01, sp) + sbc a, #0x00 + jrc 00102$ + clrw x + decw x +; ../_fs2uint.c: 58: return ul; + .byte 0xc5 +00102$: + ldw x, (0x03, sp) +00103$: +; ../_fs2uint.c: 59: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fs2uint.lst b/device/lib/stm8/_fs2uint.lst new file mode 100644 index 0000000..cac6302 --- /dev/null +++ b/device/lib/stm8/_fs2uint.lst @@ -0,0 +1,88 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fs2uint + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fs2ulong + 12 .globl ___fs2uint + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_fs2uint.c: 54: unsigned int __fs2uint (float f) + 51 ; ----------------------------------------- + 52 ; function __fs2uint + 53 ; ----------------------------------------- + 000000 54 ___fs2uint: + 000000 52 04 [ 2] 55 sub sp, #4 + 56 ; ../_fs2uint.c: 56: unsigned long ul=__fs2ulong(f); + 000002 1E 09 [ 2] 57 ldw x, (0x09, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 09 [ 2] 59 ldw x, (0x09, sp) + 000007 89 [ 2] 60 pushw x + 000008 CDr00r00 [ 4] 61 call ___fs2ulong + 00000B 5B 04 [ 2] 62 addw sp, #4 + 00000D 1F 03 [ 2] 63 ldw (0x03, sp), x + 00000F 17 01 [ 2] 64 ldw (0x01, sp), y + 65 ; ../_fs2uint.c: 57: if (ul>=UINT_MAX) return UINT_MAX; + 000011 7B 04 [ 1] 66 ld a, (0x04, sp) + 000013 A1 FF [ 1] 67 cp a, #0xff + 000015 7B 03 [ 1] 68 ld a, (0x03, sp) + 000017 A2 FF [ 1] 69 sbc a, #0xff + 000019 7B 02 [ 1] 70 ld a, (0x02, sp) + 00001B A2 00 [ 1] 71 sbc a, #0x00 + 00001D 7B 01 [ 1] 72 ld a, (0x01, sp) + 00001F A2 00 [ 1] 73 sbc a, #0x00 + 000021 25 03 [ 1] 74 jrc 00102$ + 000023 5F [ 1] 75 clrw x + 000024 5A [ 2] 76 decw x + 77 ; ../_fs2uint.c: 58: return ul; + 000025 C5 78 .byte 0xc5 + 000026 79 00102$: + 000026 1E 03 [ 2] 80 ldw x, (0x03, sp) + 000028 81 00103$: + 82 ; ../_fs2uint.c: 59: } + 000028 5B 04 [ 2] 83 addw sp, #4 + 00002A 81 [ 4] 84 ret + 85 .area CODE + 86 .area CONST + 87 .area INITIALIZER + 88 .area CABS (ABS) diff --git a/device/lib/stm8/_fs2uint.rel b/device/lib/stm8/_fs2uint.rel new file mode 100644 index 0000000..b517c91 --- /dev/null +++ b/device/lib/stm8/_fs2uint.rel @@ -0,0 +1,34 @@ +XH3 +H B areas 3 global symbols +M _fs2uint +O -mstm8 +S ___fs2ulong Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 2B flags 0 addr 0 +S ___fs2uint Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 1E 09 89 1E 09 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 00 +T 00 00 0D 1F 03 17 01 7B 04 A1 FF 7B 03 A2 FF 7B +R 00 00 00 09 +T 00 00 1A 02 A2 00 7B 01 A2 00 25 03 5F 5A C5 +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 1E 03 +R 00 00 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 5B 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fs2uint.sym b/device/lib/stm8/_fs2uint.sym new file mode 100644 index 0000000..c858f57 --- /dev/null +++ b/device/lib/stm8/_fs2uint.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fs2uint 000000 GR + ___fs2ulong ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 2B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fs2ulong.asm b/device/lib/stm8/_fs2ulong.asm new file mode 100644 index 0000000..a671454 --- /dev/null +++ b/device/lib/stm8/_fs2ulong.asm @@ -0,0 +1,126 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fs2ulong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fs2ulong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fs2ulong.c: 103: __fs2ulong (float a1) +; ----------------------------------------- +; function __fs2ulong +; ----------------------------------------- +___fs2ulong: + sub sp, #14 +; ../_fs2ulong.c: 109: fl1.f = a1; + ldw y, (0x13, sp) + ldw (0x03, sp), y + ldw y, (0x11, sp) + ldw (0x01, sp), y +; ../_fs2ulong.c: 111: if (!fl1.l || SIGN(fl1.l)) + ldw x, (0x03, sp) + ldw y, (0x01, sp) + tnzw x + jrne 00111$ + tnzw y + jreq 00101$ +00111$: + ld a, (0x04, sp) + ld a, (0x03, sp) + ldw y, (0x01, sp) + jrpl 00102$ +00101$: +; ../_fs2ulong.c: 112: return (0); + clrw x + clrw y + jra 00104$ +00102$: +; ../_fs2ulong.c: 114: exp = EXP (fl1.l) - EXCESS - 24; + ldw x, (0x01, sp) + ld a, #0x80 + div x, a + clr a + ld xh, a + subw x, #0x0096 + ldw (0x05, sp), x +; ../_fs2ulong.c: 115: l = MANT (fl1.l); + ldw y, (0x03, sp) + ldw x, (0x01, sp) + ld a, xl + and a, #0x7f + ld xl, a + clr a + rrwa x + or a, #0x80 + ld xl, a + ldw (0x09, sp), y + ldw (0x07, sp), x +; ../_fs2ulong.c: 117: l >>= -exp; + ld a, (0x06, sp) + neg a + ldw y, (0x09, sp) + ldw (0x0d, sp), y + ldw x, (0x07, sp) + tnz a + jreq 00114$ +00113$: + sraw x + rrc (0x0d, sp) + rrc (0x0e, sp) + dec a + jrne 00113$ +00114$: + ldw (0x07, sp), x + ldw y, (0x0d, sp) +; ../_fs2ulong.c: 119: return l; + ldw (0x09, sp), y + ldw x, y + ldw y, (0x07, sp) +00104$: +; ../_fs2ulong.c: 120: } + addw sp, #14 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fs2ulong.lst b/device/lib/stm8/_fs2ulong.lst new file mode 100644 index 0000000..89d44e1 --- /dev/null +++ b/device/lib/stm8/_fs2ulong.lst @@ -0,0 +1,126 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fs2ulong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fs2ulong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_fs2ulong.c: 103: __fs2ulong (float a1) + 50 ; ----------------------------------------- + 51 ; function __fs2ulong + 52 ; ----------------------------------------- + 000000 53 ___fs2ulong: + 000000 52 0E [ 2] 54 sub sp, #14 + 55 ; ../_fs2ulong.c: 109: fl1.f = a1; + 000002 16 13 [ 2] 56 ldw y, (0x13, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 11 [ 2] 58 ldw y, (0x11, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fs2ulong.c: 111: if (!fl1.l || SIGN(fl1.l)) + 00000A 1E 03 [ 2] 61 ldw x, (0x03, sp) + 00000C 16 01 [ 2] 62 ldw y, (0x01, sp) + 00000E 5D [ 2] 63 tnzw x + 00000F 26 04 [ 1] 64 jrne 00111$ + 000011 90 5D [ 2] 65 tnzw y + 000013 27 08 [ 1] 66 jreq 00101$ + 000015 67 00111$: + 000015 7B 04 [ 1] 68 ld a, (0x04, sp) + 000017 7B 03 [ 1] 69 ld a, (0x03, sp) + 000019 16 01 [ 2] 70 ldw y, (0x01, sp) + 00001B 2A 05 [ 1] 71 jrpl 00102$ + 00001D 72 00101$: + 73 ; ../_fs2ulong.c: 112: return (0); + 00001D 5F [ 1] 74 clrw x + 00001E 90 5F [ 1] 75 clrw y + 000020 20 3A [ 2] 76 jra 00104$ + 000022 77 00102$: + 78 ; ../_fs2ulong.c: 114: exp = EXP (fl1.l) - EXCESS - 24; + 000022 1E 01 [ 2] 79 ldw x, (0x01, sp) + 000024 A6 80 [ 1] 80 ld a, #0x80 + 000026 62 [ 2] 81 div x, a + 000027 4F [ 1] 82 clr a + 000028 95 [ 1] 83 ld xh, a + 000029 1D 00 96 [ 2] 84 subw x, #0x0096 + 00002C 1F 05 [ 2] 85 ldw (0x05, sp), x + 86 ; ../_fs2ulong.c: 115: l = MANT (fl1.l); + 00002E 16 03 [ 2] 87 ldw y, (0x03, sp) + 000030 1E 01 [ 2] 88 ldw x, (0x01, sp) + 000032 9F [ 1] 89 ld a, xl + 000033 A4 7F [ 1] 90 and a, #0x7f + 000035 97 [ 1] 91 ld xl, a + 000036 4F [ 1] 92 clr a + 000037 01 [ 1] 93 rrwa x + 000038 AA 80 [ 1] 94 or a, #0x80 + 00003A 97 [ 1] 95 ld xl, a + 00003B 17 09 [ 2] 96 ldw (0x09, sp), y + 00003D 1F 07 [ 2] 97 ldw (0x07, sp), x + 98 ; ../_fs2ulong.c: 117: l >>= -exp; + 00003F 7B 06 [ 1] 99 ld a, (0x06, sp) + 000041 40 [ 1] 100 neg a + 000042 16 09 [ 2] 101 ldw y, (0x09, sp) + 000044 17 0D [ 2] 102 ldw (0x0d, sp), y + 000046 1E 07 [ 2] 103 ldw x, (0x07, sp) + 000048 4D [ 1] 104 tnz a + 000049 27 08 [ 1] 105 jreq 00114$ + 00004B 106 00113$: + 00004B 57 [ 2] 107 sraw x + 00004C 06 0D [ 1] 108 rrc (0x0d, sp) + 00004E 06 0E [ 1] 109 rrc (0x0e, sp) + 000050 4A [ 1] 110 dec a + 000051 26 F8 [ 1] 111 jrne 00113$ + 000053 112 00114$: + 000053 1F 07 [ 2] 113 ldw (0x07, sp), x + 000055 16 0D [ 2] 114 ldw y, (0x0d, sp) + 115 ; ../_fs2ulong.c: 119: return l; + 000057 17 09 [ 2] 116 ldw (0x09, sp), y + 000059 93 [ 1] 117 ldw x, y + 00005A 16 07 [ 2] 118 ldw y, (0x07, sp) + 00005C 119 00104$: + 120 ; ../_fs2ulong.c: 120: } + 00005C 5B 0E [ 2] 121 addw sp, #14 + 00005E 81 [ 4] 122 ret + 123 .area CODE + 124 .area CONST + 125 .area INITIALIZER + 126 .area CABS (ABS) diff --git a/device/lib/stm8/_fs2ulong.rel b/device/lib/stm8/_fs2ulong.rel new file mode 100644 index 0000000..a6ffed6 --- /dev/null +++ b/device/lib/stm8/_fs2ulong.rel @@ -0,0 +1,53 @@ +XH3 +H B areas 2 global symbols +M _fs2ulong +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 5F flags 0 addr 0 +S ___fs2ulong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0E 16 13 17 03 16 11 17 01 1E 03 16 +R 00 00 00 09 +T 00 00 0D 01 5D 26 04 90 5D 27 08 +R 00 00 00 09 +T 00 00 15 +R 00 00 00 09 +T 00 00 15 7B 04 7B 03 16 01 2A 05 +R 00 00 00 09 +T 00 00 1D +R 00 00 00 09 +T 00 00 1D 5F 90 5F 20 3A +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 1E 01 A6 80 62 4F 95 1D 00 96 1F 05 16 +R 00 00 00 09 +T 00 00 2F 03 1E 01 9F A4 7F 97 4F 01 AA 80 97 17 +R 00 00 00 09 +T 00 00 3C 09 1F 07 7B 06 40 16 09 17 0D 1E 07 4D +R 00 00 00 09 +T 00 00 49 27 08 +R 00 00 00 09 +T 00 00 4B +R 00 00 00 09 +T 00 00 4B 57 06 0D 06 0E 4A 26 F8 +R 00 00 00 09 +T 00 00 53 +R 00 00 00 09 +T 00 00 53 1F 07 16 0D 17 09 93 16 07 +R 00 00 00 09 +T 00 00 5C +R 00 00 00 09 +T 00 00 5C 5B 0E 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fs2ulong.sym b/device/lib/stm8/_fs2ulong.sym new file mode 100644 index 0000000..a19a514 --- /dev/null +++ b/device/lib/stm8/_fs2ulong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fs2ulong 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 5F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fsadd.asm b/device/lib/stm8/_fsadd.asm new file mode 100644 index 0000000..973afcf --- /dev/null +++ b/device/lib/stm8/_fsadd.asm @@ -0,0 +1,477 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fsadd + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fsadd +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fsadd.c: 170: float __fsadd (float a1, float a2) +; ----------------------------------------- +; function __fsadd +; ----------------------------------------- +___fsadd: + sub sp, #22 +; ../_fsadd.c: 178: pfl2 = (long _AUTOMEM *)&a2; + ldw x, sp + addw x, #29 +; ../_fsadd.c: 179: exp2 = EXP (*pfl2); + ldw y, x + ldw y, (0x2, y) + ldw (0x11, sp), y + ldw x, (x) + ldw (0x0f, sp), x + ldw y, (0x11, sp) + ldw (0x15, sp), y + ldw y, (0x0f, sp) + ldw (0x13, sp), y + ldw x, y + ld a, #0x80 + div x, a + clr a + ld xh, a + ldw (0x01, sp), x +; ../_fsadd.c: 180: mant2 = MANT (*pfl2) << 4; + ldw y, (0x11, sp) + ld a, (0x10, sp) + and a, #0x7f + ld xh, a + clr a + ld xl, a + sllw x + scf + rrcw x + swapw x + ld a, #0x04 +00240$: + sllw y + rlcw x + dec a + jrne 00240$ + ldw (0x05, sp), y + ldw (0x03, sp), x +; ../_fsadd.c: 181: if (SIGN (*pfl2)) + tnz (0x13, sp) + jrpl 00102$ +; ../_fsadd.c: 182: mant2 = -mant2; + ldw y, (0x05, sp) + negw y + ldw x, (0x03, sp) + jrnc 00243$ + incw x +00243$: + negw x + ldw (0x05, sp), y + ldw (0x03, sp), x +00102$: +; ../_fsadd.c: 184: if (!*pfl2) + ldw x, (0x11, sp) + jrne 00104$ + ldw x, (0x0f, sp) + jrne 00104$ +; ../_fsadd.c: 185: return (a1); + ldw x, (0x1b, sp) + ldw y, (0x19, sp) + jp 00137$ +00104$: +; ../_fsadd.c: 187: pfl1 = (long _AUTOMEM *)&a1; + ldw x, sp + addw x, #25 +; ../_fsadd.c: 188: exp1 = EXP (*pfl1); + ldw (0x07, sp), x + ldw y, x + ldw y, (0x2, y) + ldw (0x0b, sp), y + ldw x, (x) + ldw (0x09, sp), x + ldw y, (0x0b, sp) + ldw (0x15, sp), y + ldw y, (0x09, sp) + ldw (0x13, sp), y + ldw x, y + ld a, #0x80 + div x, a + clr a + ld xh, a + ldw (0x0d, sp), x +; ../_fsadd.c: 189: mant1 = MANT (*pfl1) << 4; + ldw y, (0x0b, sp) + ld a, (0x0a, sp) + and a, #0x7f + ld xh, a + clr a + ld xl, a + sllw x + scf + rrcw x + swapw x + ld a, #0x04 +00246$: + sllw y + rlcw x + dec a + jrne 00246$ + ldw (0x11, sp), y + ldw (0x0f, sp), x +; ../_fsadd.c: 190: if (SIGN(*pfl1)) + tnz (0x13, sp) + jrpl 00108$ +; ../_fsadd.c: 191: if (*pfl1 & 0x80000000) + tnz (0x09, sp) + jrpl 00108$ +; ../_fsadd.c: 192: mant1 = -mant1; + ld a, (0x12, sp) + neg a + ld (0x16, sp), a + clr a + sbc a, (0x11, sp) + ld (0x15, sp), a + clr a + sbc a, (0x10, sp) + ld (0x14, sp), a + clr a + sbc a, (0x0f, sp) + ld (0x0f, sp), a + ldw y, (0x15, sp) + ldw (0x11, sp), y + ld a, (0x14, sp) + ld (0x10, sp), a +00108$: +; ../_fsadd.c: 194: if (!*pfl1) + ldw x, (0x0b, sp) + jrne 00110$ + ldw x, (0x09, sp) + jrne 00110$ +; ../_fsadd.c: 195: return (a2); + ldw x, (0x1f, sp) + ldw y, (0x1d, sp) + jp 00137$ +00110$: +; ../_fsadd.c: 197: expd = exp1 - exp2; + ldw x, (0x0d, sp) + subw x, (0x01, sp) +; ../_fsadd.c: 198: if (expd > 25) + ldw (0x15, sp), x + cpw x, #0x0019 + jrsle 00112$ +; ../_fsadd.c: 199: return (a1); + ldw x, (0x1b, sp) + ldw y, (0x19, sp) + jp 00137$ +00112$: +; ../_fsadd.c: 200: if (expd < -25) + ldw x, (0x15, sp) + cpw x, #0xffe7 + jrsge 00114$ +; ../_fsadd.c: 201: return (a2); + ldw x, (0x1f, sp) + ldw y, (0x1d, sp) + jp 00137$ +00114$: +; ../_fsadd.c: 203: if (expd < 0) + tnz (0x15, sp) + jrpl 00116$ +; ../_fsadd.c: 205: expd = -expd; + ldw x, (0x15, sp) + negw x +; ../_fsadd.c: 206: exp1 += expd; + ldw (0x15, sp), x + addw x, (0x0d, sp) + ldw (0x0d, sp), x +; ../_fsadd.c: 207: mant1 >>= expd; + ldw x, (0x11, sp) + ldw y, (0x0f, sp) + ld a, (0x16, sp) + jreq 00256$ +00255$: + sraw y + rrcw x + dec a + jrne 00255$ +00256$: + ldw (0x11, sp), x + ldw (0x0f, sp), y + jra 00117$ +00116$: +; ../_fsadd.c: 211: mant2 >>= expd; + ldw x, (0x05, sp) + ldw y, (0x03, sp) + ld a, (0x16, sp) + jreq 00258$ +00257$: + sraw y + rrcw x + dec a + jrne 00257$ +00258$: + ldw (0x05, sp), x + ldw (0x03, sp), y +00117$: +; ../_fsadd.c: 213: mant1 += mant2; + ldw y, (0x11, sp) + addw y, (0x05, sp) + ldw x, (0x0f, sp) + jrnc 00259$ + incw x +00259$: + addw x, (0x03, sp) + ldw (0x13, sp), y + ldw (0x11, sp), x +; ../_fsadd.c: 215: sign = false; + clr (0x10, sp) +; ../_fsadd.c: 217: if (mant1 < 0) + tnz (0x11, sp) + jrpl 00121$ +; ../_fsadd.c: 219: mant1 = -mant1; + ldw y, (0x13, sp) + negw y + ldw x, (0x11, sp) + jrnc 00261$ + incw x +00261$: + negw x + ldw (0x13, sp), y + ldw (0x11, sp), x +; ../_fsadd.c: 220: sign = true; + ld a, #0x01 + ld (0x10, sp), a + jra 00154$ +00121$: +; ../_fsadd.c: 222: else if (!mant1) + ldw x, (0x13, sp) + jrne 00154$ +; ../_fsadd.c: 223: return (0); + ldw x, (0x11, sp) + jrne 00154$ + clrw y + jp 00137$ +; ../_fsadd.c: 226: while (mant1 < (HIDDEN<<4)) { +00154$: + ldw y, (0x0d, sp) + ldw (0x15, sp), y +00123$: + ldw x, (0x11, sp) + cpw x, #0x0800 + jrnc 00157$ +; ../_fsadd.c: 227: mant1 <<= 1; + sll (0x14, sp) + rlc (0x13, sp) + rlc (0x12, sp) + rlc (0x11, sp) +; ../_fsadd.c: 228: exp1--; + ldw x, (0x15, sp) + decw x + ldw (0x15, sp), x + jra 00123$ +; ../_fsadd.c: 232: while (mant1 & 0xf0000000) { +00157$: +00128$: + ld a, (0x11, sp) + bcp a, #0xf0 + jreq 00163$ +; ../_fsadd.c: 233: if (mant1&1) + ld a, (0x14, sp) + srl a + jrnc 00127$ +; ../_fsadd.c: 234: mant1 += 2; + ldw x, (0x13, sp) + addw x, #0x0002 + ldw y, (0x11, sp) + jrnc 00267$ + incw y +00267$: + ldw (0x13, sp), x + ldw (0x11, sp), y +00127$: +; ../_fsadd.c: 235: mant1 >>= 1; + sra (0x11, sp) + rrc (0x12, sp) + rrc (0x13, sp) + rrc (0x14, sp) +; ../_fsadd.c: 236: exp1++; + ldw x, (0x15, sp) + incw x + ldw (0x15, sp), x + jra 00128$ +00163$: + ldw y, (0x15, sp) + ldw (0x0a, sp), y +; ../_fsadd.c: 240: mant1 &= ~(HIDDEN<<4); + ldw y, (0x13, sp) + ldw (0x0e, sp), y + ld a, (0x12, sp) + ld (0x0d, sp), a + ld a, (0x11, sp) + and a, #0xf7 + ld (0x0c, sp), a + ldw y, (0x0e, sp) + ldw (0x13, sp), y + ldw y, (0x0c, sp) + ldw (0x11, sp), y +; ../_fsadd.c: 243: if (exp1 >= 0x100) + ldw x, (0x15, sp) + cpw x, #0x0100 + jrslt 00135$ +; ../_fsadd.c: 244: *pfl1 = (sign ? (SIGNBIT | __INFINITY) : __INFINITY); + tnz (0x10, sp) + jreq 00139$ + clrw x + ldw (0x15, sp), x + ldw x, #0xff80 + ldw (0x13, sp), x + jra 00140$ +00139$: + clrw x + ldw (0x15, sp), x + ldw x, #0x7f80 + ldw (0x13, sp), x +00140$: + ldw x, (0x07, sp) + ldw y, (0x15, sp) + ldw (0x2, x), y + ldw y, (0x13, sp) + ldw (x), y + jp 00136$ +00135$: +; ../_fsadd.c: 245: else if (exp1 < 0) + tnz (0x15, sp) + jrpl 00132$ +; ../_fsadd.c: 246: *pfl1 = 0; + ldw x, (0x07, sp) + clr (0x3, x) + clr (0x2, x) + clr (0x1, x) + clr (x) + jp 00136$ +00132$: +; ../_fsadd.c: 248: *pfl1 = PACK (sign ? SIGNBIT : 0 , exp1, mant1>>4); + tnz (0x10, sp) + jreq 00141$ + clrw x + ldw (0x05, sp), x + ldw x, #0x8000 + ldw (0x03, sp), x + jra 00142$ +00141$: + clrw x + ldw (0x05, sp), x + ldw (0x03, sp), x +00142$: + ldw y, (0x0a, sp) + ldw (0x0f, sp), y + ld a, (0x0f, sp) + rlc a + clr a + sbc a, #0x00 + ld (0x0e, sp), a + ld (0x0d, sp), a + ldw y, (0x0f, sp) + ldw (0x0d, sp), y + clrw x + ldw (0x0f, sp), x + ld a, #0x07 +00273$: + sll (0x0e, sp) + rlc (0x0d, sp) + dec a + jrne 00273$ + ld a, (0x06, sp) + or a, (0x10, sp) + ld (0x0c, sp), a + ld a, (0x05, sp) + or a, (0x0f, sp) + ld (0x0b, sp), a + ld a, (0x04, sp) + or a, (0x0e, sp) + ld (0x0a, sp), a + ld a, (0x03, sp) + or a, (0x0d, sp) + ld (0x09, sp), a + ldw y, (0x11, sp) + ldw (0x03, sp), y + ldw x, (0x13, sp) + sra (0x03, sp) + rrc (0x04, sp) + rrcw x + sra (0x03, sp) + rrc (0x04, sp) + rrcw x + sra (0x03, sp) + rrc (0x04, sp) + rrcw x + sra (0x03, sp) + rrc (0x04, sp) + rrcw x + ldw (0x05, sp), x + ldw (0x15, sp), x + ldw y, (0x03, sp) + ldw (0x13, sp), y + ld a, (0x0c, sp) + or a, (0x16, sp) + ld (0x12, sp), a + ld a, (0x0b, sp) + or a, (0x15, sp) + ld (0x11, sp), a + ld a, (0x0a, sp) + or a, (0x14, sp) + ld (0x10, sp), a + ld a, (0x09, sp) + or a, (0x13, sp) + ld (0x0f, sp), a + ldw x, (0x07, sp) + ldw y, (0x11, sp) + ldw (0x2, x), y + ldw y, (0x0f, sp) + ldw (x), y +00136$: +; ../_fsadd.c: 249: return (a1); + ldw x, (0x1b, sp) + ldw y, (0x19, sp) +00137$: +; ../_fsadd.c: 250: } + addw sp, #22 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fsadd.lst b/device/lib/stm8/_fsadd.lst new file mode 100644 index 0000000..3345962 --- /dev/null +++ b/device/lib/stm8/_fsadd.lst @@ -0,0 +1,477 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fsadd + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fsadd + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_fsadd.c: 170: float __fsadd (float a1, float a2) + 50 ; ----------------------------------------- + 51 ; function __fsadd + 52 ; ----------------------------------------- + 000000 53 ___fsadd: + 000000 52 16 [ 2] 54 sub sp, #22 + 55 ; ../_fsadd.c: 178: pfl2 = (long _AUTOMEM *)&a2; + 000002 96 [ 1] 56 ldw x, sp + 000003 1C 00 1D [ 2] 57 addw x, #29 + 58 ; ../_fsadd.c: 179: exp2 = EXP (*pfl2); + 000006 90 93 [ 1] 59 ldw y, x + 000008 90 EE 02 [ 2] 60 ldw y, (0x2, y) + 00000B 17 11 [ 2] 61 ldw (0x11, sp), y + 00000D FE [ 2] 62 ldw x, (x) + 00000E 1F 0F [ 2] 63 ldw (0x0f, sp), x + 000010 16 11 [ 2] 64 ldw y, (0x11, sp) + 000012 17 15 [ 2] 65 ldw (0x15, sp), y + 000014 16 0F [ 2] 66 ldw y, (0x0f, sp) + 000016 17 13 [ 2] 67 ldw (0x13, sp), y + 000018 93 [ 1] 68 ldw x, y + 000019 A6 80 [ 1] 69 ld a, #0x80 + 00001B 62 [ 2] 70 div x, a + 00001C 4F [ 1] 71 clr a + 00001D 95 [ 1] 72 ld xh, a + 00001E 1F 01 [ 2] 73 ldw (0x01, sp), x + 74 ; ../_fsadd.c: 180: mant2 = MANT (*pfl2) << 4; + 000020 16 11 [ 2] 75 ldw y, (0x11, sp) + 000022 7B 10 [ 1] 76 ld a, (0x10, sp) + 000024 A4 7F [ 1] 77 and a, #0x7f + 000026 95 [ 1] 78 ld xh, a + 000027 4F [ 1] 79 clr a + 000028 97 [ 1] 80 ld xl, a + 000029 58 [ 2] 81 sllw x + 00002A 99 [ 1] 82 scf + 00002B 56 [ 2] 83 rrcw x + 00002C 5E [ 1] 84 swapw x + 00002D A6 04 [ 1] 85 ld a, #0x04 + 00002F 86 00240$: + 00002F 90 58 [ 2] 87 sllw y + 000031 59 [ 2] 88 rlcw x + 000032 4A [ 1] 89 dec a + 000033 26 FA [ 1] 90 jrne 00240$ + 000035 17 05 [ 2] 91 ldw (0x05, sp), y + 000037 1F 03 [ 2] 92 ldw (0x03, sp), x + 93 ; ../_fsadd.c: 181: if (SIGN (*pfl2)) + 000039 0D 13 [ 1] 94 tnz (0x13, sp) + 00003B 2A 0E [ 1] 95 jrpl 00102$ + 96 ; ../_fsadd.c: 182: mant2 = -mant2; + 00003D 16 05 [ 2] 97 ldw y, (0x05, sp) + 00003F 90 50 [ 2] 98 negw y + 000041 1E 03 [ 2] 99 ldw x, (0x03, sp) + 000043 24 01 [ 1] 100 jrnc 00243$ + 000045 5C [ 1] 101 incw x + 000046 102 00243$: + 000046 50 [ 2] 103 negw x + 000047 17 05 [ 2] 104 ldw (0x05, sp), y + 000049 1F 03 [ 2] 105 ldw (0x03, sp), x + 00004B 106 00102$: + 107 ; ../_fsadd.c: 184: if (!*pfl2) + 00004B 1E 11 [ 2] 108 ldw x, (0x11, sp) + 00004D 26 0B [ 1] 109 jrne 00104$ + 00004F 1E 0F [ 2] 110 ldw x, (0x0f, sp) + 000051 26 07 [ 1] 111 jrne 00104$ + 112 ; ../_fsadd.c: 185: return (a1); + 000053 1E 1B [ 2] 113 ldw x, (0x1b, sp) + 000055 16 19 [ 2] 114 ldw y, (0x19, sp) + 000057 CCr02r79 [ 2] 115 jp 00137$ + 00005A 116 00104$: + 117 ; ../_fsadd.c: 187: pfl1 = (long _AUTOMEM *)&a1; + 00005A 96 [ 1] 118 ldw x, sp + 00005B 1C 00 19 [ 2] 119 addw x, #25 + 120 ; ../_fsadd.c: 188: exp1 = EXP (*pfl1); + 00005E 1F 07 [ 2] 121 ldw (0x07, sp), x + 000060 90 93 [ 1] 122 ldw y, x + 000062 90 EE 02 [ 2] 123 ldw y, (0x2, y) + 000065 17 0B [ 2] 124 ldw (0x0b, sp), y + 000067 FE [ 2] 125 ldw x, (x) + 000068 1F 09 [ 2] 126 ldw (0x09, sp), x + 00006A 16 0B [ 2] 127 ldw y, (0x0b, sp) + 00006C 17 15 [ 2] 128 ldw (0x15, sp), y + 00006E 16 09 [ 2] 129 ldw y, (0x09, sp) + 000070 17 13 [ 2] 130 ldw (0x13, sp), y + 000072 93 [ 1] 131 ldw x, y + 000073 A6 80 [ 1] 132 ld a, #0x80 + 000075 62 [ 2] 133 div x, a + 000076 4F [ 1] 134 clr a + 000077 95 [ 1] 135 ld xh, a + 000078 1F 0D [ 2] 136 ldw (0x0d, sp), x + 137 ; ../_fsadd.c: 189: mant1 = MANT (*pfl1) << 4; + 00007A 16 0B [ 2] 138 ldw y, (0x0b, sp) + 00007C 7B 0A [ 1] 139 ld a, (0x0a, sp) + 00007E A4 7F [ 1] 140 and a, #0x7f + 000080 95 [ 1] 141 ld xh, a + 000081 4F [ 1] 142 clr a + 000082 97 [ 1] 143 ld xl, a + 000083 58 [ 2] 144 sllw x + 000084 99 [ 1] 145 scf + 000085 56 [ 2] 146 rrcw x + 000086 5E [ 1] 147 swapw x + 000087 A6 04 [ 1] 148 ld a, #0x04 + 000089 149 00246$: + 000089 90 58 [ 2] 150 sllw y + 00008B 59 [ 2] 151 rlcw x + 00008C 4A [ 1] 152 dec a + 00008D 26 FA [ 1] 153 jrne 00246$ + 00008F 17 11 [ 2] 154 ldw (0x11, sp), y + 000091 1F 0F [ 2] 155 ldw (0x0f, sp), x + 156 ; ../_fsadd.c: 190: if (SIGN(*pfl1)) + 000093 0D 13 [ 1] 157 tnz (0x13, sp) + 000095 2A 20 [ 1] 158 jrpl 00108$ + 159 ; ../_fsadd.c: 191: if (*pfl1 & 0x80000000) + 000097 0D 09 [ 1] 160 tnz (0x09, sp) + 000099 2A 1C [ 1] 161 jrpl 00108$ + 162 ; ../_fsadd.c: 192: mant1 = -mant1; + 00009B 7B 12 [ 1] 163 ld a, (0x12, sp) + 00009D 40 [ 1] 164 neg a + 00009E 6B 16 [ 1] 165 ld (0x16, sp), a + 0000A0 4F [ 1] 166 clr a + 0000A1 12 11 [ 1] 167 sbc a, (0x11, sp) + 0000A3 6B 15 [ 1] 168 ld (0x15, sp), a + 0000A5 4F [ 1] 169 clr a + 0000A6 12 10 [ 1] 170 sbc a, (0x10, sp) + 0000A8 6B 14 [ 1] 171 ld (0x14, sp), a + 0000AA 4F [ 1] 172 clr a + 0000AB 12 0F [ 1] 173 sbc a, (0x0f, sp) + 0000AD 6B 0F [ 1] 174 ld (0x0f, sp), a + 0000AF 16 15 [ 2] 175 ldw y, (0x15, sp) + 0000B1 17 11 [ 2] 176 ldw (0x11, sp), y + 0000B3 7B 14 [ 1] 177 ld a, (0x14, sp) + 0000B5 6B 10 [ 1] 178 ld (0x10, sp), a + 0000B7 179 00108$: + 180 ; ../_fsadd.c: 194: if (!*pfl1) + 0000B7 1E 0B [ 2] 181 ldw x, (0x0b, sp) + 0000B9 26 0B [ 1] 182 jrne 00110$ + 0000BB 1E 09 [ 2] 183 ldw x, (0x09, sp) + 0000BD 26 07 [ 1] 184 jrne 00110$ + 185 ; ../_fsadd.c: 195: return (a2); + 0000BF 1E 1F [ 2] 186 ldw x, (0x1f, sp) + 0000C1 16 1D [ 2] 187 ldw y, (0x1d, sp) + 0000C3 CCr02r79 [ 2] 188 jp 00137$ + 0000C6 189 00110$: + 190 ; ../_fsadd.c: 197: expd = exp1 - exp2; + 0000C6 1E 0D [ 2] 191 ldw x, (0x0d, sp) + 0000C8 72 F0 01 [ 2] 192 subw x, (0x01, sp) + 193 ; ../_fsadd.c: 198: if (expd > 25) + 0000CB 1F 15 [ 2] 194 ldw (0x15, sp), x + 0000CD A3 00 19 [ 2] 195 cpw x, #0x0019 + 0000D0 2D 07 [ 1] 196 jrsle 00112$ + 197 ; ../_fsadd.c: 199: return (a1); + 0000D2 1E 1B [ 2] 198 ldw x, (0x1b, sp) + 0000D4 16 19 [ 2] 199 ldw y, (0x19, sp) + 0000D6 CCr02r79 [ 2] 200 jp 00137$ + 0000D9 201 00112$: + 202 ; ../_fsadd.c: 200: if (expd < -25) + 0000D9 1E 15 [ 2] 203 ldw x, (0x15, sp) + 0000DB A3 FF E7 [ 2] 204 cpw x, #0xffe7 + 0000DE 2E 07 [ 1] 205 jrsge 00114$ + 206 ; ../_fsadd.c: 201: return (a2); + 0000E0 1E 1F [ 2] 207 ldw x, (0x1f, sp) + 0000E2 16 1D [ 2] 208 ldw y, (0x1d, sp) + 0000E4 CCr02r79 [ 2] 209 jp 00137$ + 0000E7 210 00114$: + 211 ; ../_fsadd.c: 203: if (expd < 0) + 0000E7 0D 15 [ 1] 212 tnz (0x15, sp) + 0000E9 2A 1E [ 1] 213 jrpl 00116$ + 214 ; ../_fsadd.c: 205: expd = -expd; + 0000EB 1E 15 [ 2] 215 ldw x, (0x15, sp) + 0000ED 50 [ 2] 216 negw x + 217 ; ../_fsadd.c: 206: exp1 += expd; + 0000EE 1F 15 [ 2] 218 ldw (0x15, sp), x + 0000F0 72 FB 0D [ 2] 219 addw x, (0x0d, sp) + 0000F3 1F 0D [ 2] 220 ldw (0x0d, sp), x + 221 ; ../_fsadd.c: 207: mant1 >>= expd; + 0000F5 1E 11 [ 2] 222 ldw x, (0x11, sp) + 0000F7 16 0F [ 2] 223 ldw y, (0x0f, sp) + 0000F9 7B 16 [ 1] 224 ld a, (0x16, sp) + 0000FB 27 06 [ 1] 225 jreq 00256$ + 0000FD 226 00255$: + 0000FD 90 57 [ 2] 227 sraw y + 0000FF 56 [ 2] 228 rrcw x + 000100 4A [ 1] 229 dec a + 000101 26 FA [ 1] 230 jrne 00255$ + 000103 231 00256$: + 000103 1F 11 [ 2] 232 ldw (0x11, sp), x + 000105 17 0F [ 2] 233 ldw (0x0f, sp), y + 000107 20 12 [ 2] 234 jra 00117$ + 000109 235 00116$: + 236 ; ../_fsadd.c: 211: mant2 >>= expd; + 000109 1E 05 [ 2] 237 ldw x, (0x05, sp) + 00010B 16 03 [ 2] 238 ldw y, (0x03, sp) + 00010D 7B 16 [ 1] 239 ld a, (0x16, sp) + 00010F 27 06 [ 1] 240 jreq 00258$ + 000111 241 00257$: + 000111 90 57 [ 2] 242 sraw y + 000113 56 [ 2] 243 rrcw x + 000114 4A [ 1] 244 dec a + 000115 26 FA [ 1] 245 jrne 00257$ + 000117 246 00258$: + 000117 1F 05 [ 2] 247 ldw (0x05, sp), x + 000119 17 03 [ 2] 248 ldw (0x03, sp), y + 00011B 249 00117$: + 250 ; ../_fsadd.c: 213: mant1 += mant2; + 00011B 16 11 [ 2] 251 ldw y, (0x11, sp) + 00011D 72 F9 05 [ 2] 252 addw y, (0x05, sp) + 000120 1E 0F [ 2] 253 ldw x, (0x0f, sp) + 000122 24 01 [ 1] 254 jrnc 00259$ + 000124 5C [ 1] 255 incw x + 000125 256 00259$: + 000125 72 FB 03 [ 2] 257 addw x, (0x03, sp) + 000128 17 13 [ 2] 258 ldw (0x13, sp), y + 00012A 1F 11 [ 2] 259 ldw (0x11, sp), x + 260 ; ../_fsadd.c: 215: sign = false; + 00012C 0F 10 [ 1] 261 clr (0x10, sp) + 262 ; ../_fsadd.c: 217: if (mant1 < 0) + 00012E 0D 11 [ 1] 263 tnz (0x11, sp) + 000130 2A 14 [ 1] 264 jrpl 00121$ + 265 ; ../_fsadd.c: 219: mant1 = -mant1; + 000132 16 13 [ 2] 266 ldw y, (0x13, sp) + 000134 90 50 [ 2] 267 negw y + 000136 1E 11 [ 2] 268 ldw x, (0x11, sp) + 000138 24 01 [ 1] 269 jrnc 00261$ + 00013A 5C [ 1] 270 incw x + 00013B 271 00261$: + 00013B 50 [ 2] 272 negw x + 00013C 17 13 [ 2] 273 ldw (0x13, sp), y + 00013E 1F 11 [ 2] 274 ldw (0x11, sp), x + 275 ; ../_fsadd.c: 220: sign = true; + 000140 A6 01 [ 1] 276 ld a, #0x01 + 000142 6B 10 [ 1] 277 ld (0x10, sp), a + 000144 20 0D [ 2] 278 jra 00154$ + 000146 279 00121$: + 280 ; ../_fsadd.c: 222: else if (!mant1) + 000146 1E 13 [ 2] 281 ldw x, (0x13, sp) + 000148 26 09 [ 1] 282 jrne 00154$ + 283 ; ../_fsadd.c: 223: return (0); + 00014A 1E 11 [ 2] 284 ldw x, (0x11, sp) + 00014C 26 05 [ 1] 285 jrne 00154$ + 00014E 90 5F [ 1] 286 clrw y + 000150 CCr02r79 [ 2] 287 jp 00137$ + 288 ; ../_fsadd.c: 226: while (mant1 < (HIDDEN<<4)) { + 000153 289 00154$: + 000153 16 0D [ 2] 290 ldw y, (0x0d, sp) + 000155 17 15 [ 2] 291 ldw (0x15, sp), y + 000157 292 00123$: + 000157 1E 11 [ 2] 293 ldw x, (0x11, sp) + 000159 A3 08 00 [ 2] 294 cpw x, #0x0800 + 00015C 24 0F [ 1] 295 jrnc 00157$ + 296 ; ../_fsadd.c: 227: mant1 <<= 1; + 00015E 08 14 [ 1] 297 sll (0x14, sp) + 000160 09 13 [ 1] 298 rlc (0x13, sp) + 000162 09 12 [ 1] 299 rlc (0x12, sp) + 000164 09 11 [ 1] 300 rlc (0x11, sp) + 301 ; ../_fsadd.c: 228: exp1--; + 000166 1E 15 [ 2] 302 ldw x, (0x15, sp) + 000168 5A [ 2] 303 decw x + 000169 1F 15 [ 2] 304 ldw (0x15, sp), x + 00016B 20 EA [ 2] 305 jra 00123$ + 306 ; ../_fsadd.c: 232: while (mant1 & 0xf0000000) { + 00016D 307 00157$: + 00016D 308 00128$: + 00016D 7B 11 [ 1] 309 ld a, (0x11, sp) + 00016F A5 F0 [ 1] 310 bcp a, #0xf0 + 000171 27 23 [ 1] 311 jreq 00163$ + 312 ; ../_fsadd.c: 233: if (mant1&1) + 000173 7B 14 [ 1] 313 ld a, (0x14, sp) + 000175 44 [ 1] 314 srl a + 000176 24 0F [ 1] 315 jrnc 00127$ + 316 ; ../_fsadd.c: 234: mant1 += 2; + 000178 1E 13 [ 2] 317 ldw x, (0x13, sp) + 00017A 1C 00 02 [ 2] 318 addw x, #0x0002 + 00017D 16 11 [ 2] 319 ldw y, (0x11, sp) + 00017F 24 02 [ 1] 320 jrnc 00267$ + 000181 90 5C [ 1] 321 incw y + 000183 322 00267$: + 000183 1F 13 [ 2] 323 ldw (0x13, sp), x + 000185 17 11 [ 2] 324 ldw (0x11, sp), y + 000187 325 00127$: + 326 ; ../_fsadd.c: 235: mant1 >>= 1; + 000187 07 11 [ 1] 327 sra (0x11, sp) + 000189 06 12 [ 1] 328 rrc (0x12, sp) + 00018B 06 13 [ 1] 329 rrc (0x13, sp) + 00018D 06 14 [ 1] 330 rrc (0x14, sp) + 331 ; ../_fsadd.c: 236: exp1++; + 00018F 1E 15 [ 2] 332 ldw x, (0x15, sp) + 000191 5C [ 1] 333 incw x + 000192 1F 15 [ 2] 334 ldw (0x15, sp), x + 000194 20 D7 [ 2] 335 jra 00128$ + 000196 336 00163$: + 000196 16 15 [ 2] 337 ldw y, (0x15, sp) + 000198 17 0A [ 2] 338 ldw (0x0a, sp), y + 339 ; ../_fsadd.c: 240: mant1 &= ~(HIDDEN<<4); + 00019A 16 13 [ 2] 340 ldw y, (0x13, sp) + 00019C 17 0E [ 2] 341 ldw (0x0e, sp), y + 00019E 7B 12 [ 1] 342 ld a, (0x12, sp) + 0001A0 6B 0D [ 1] 343 ld (0x0d, sp), a + 0001A2 7B 11 [ 1] 344 ld a, (0x11, sp) + 0001A4 A4 F7 [ 1] 345 and a, #0xf7 + 0001A6 6B 0C [ 1] 346 ld (0x0c, sp), a + 0001A8 16 0E [ 2] 347 ldw y, (0x0e, sp) + 0001AA 17 13 [ 2] 348 ldw (0x13, sp), y + 0001AC 16 0C [ 2] 349 ldw y, (0x0c, sp) + 0001AE 17 11 [ 2] 350 ldw (0x11, sp), y + 351 ; ../_fsadd.c: 243: if (exp1 >= 0x100) + 0001B0 1E 15 [ 2] 352 ldw x, (0x15, sp) + 0001B2 A3 01 00 [ 2] 353 cpw x, #0x0100 + 0001B5 2F 22 [ 1] 354 jrslt 00135$ + 355 ; ../_fsadd.c: 244: *pfl1 = (sign ? (SIGNBIT | __INFINITY) : __INFINITY); + 0001B7 0D 10 [ 1] 356 tnz (0x10, sp) + 0001B9 27 0A [ 1] 357 jreq 00139$ + 0001BB 5F [ 1] 358 clrw x + 0001BC 1F 15 [ 2] 359 ldw (0x15, sp), x + 0001BE AE FF 80 [ 2] 360 ldw x, #0xff80 + 0001C1 1F 13 [ 2] 361 ldw (0x13, sp), x + 0001C3 20 08 [ 2] 362 jra 00140$ + 0001C5 363 00139$: + 0001C5 5F [ 1] 364 clrw x + 0001C6 1F 15 [ 2] 365 ldw (0x15, sp), x + 0001C8 AE 7F 80 [ 2] 366 ldw x, #0x7f80 + 0001CB 1F 13 [ 2] 367 ldw (0x13, sp), x + 0001CD 368 00140$: + 0001CD 1E 07 [ 2] 369 ldw x, (0x07, sp) + 0001CF 16 15 [ 2] 370 ldw y, (0x15, sp) + 0001D1 EF 02 [ 2] 371 ldw (0x2, x), y + 0001D3 16 13 [ 2] 372 ldw y, (0x13, sp) + 0001D5 FF [ 2] 373 ldw (x), y + 0001D6 CCr02r75 [ 2] 374 jp 00136$ + 0001D9 375 00135$: + 376 ; ../_fsadd.c: 245: else if (exp1 < 0) + 0001D9 0D 15 [ 1] 377 tnz (0x15, sp) + 0001DB 2A 0C [ 1] 378 jrpl 00132$ + 379 ; ../_fsadd.c: 246: *pfl1 = 0; + 0001DD 1E 07 [ 2] 380 ldw x, (0x07, sp) + 0001DF 6F 03 [ 1] 381 clr (0x3, x) + 0001E1 6F 02 [ 1] 382 clr (0x2, x) + 0001E3 6F 01 [ 1] 383 clr (0x1, x) + 0001E5 7F [ 1] 384 clr (x) + 0001E6 CCr02r75 [ 2] 385 jp 00136$ + 0001E9 386 00132$: + 387 ; ../_fsadd.c: 248: *pfl1 = PACK (sign ? SIGNBIT : 0 , exp1, mant1>>4); + 0001E9 0D 10 [ 1] 388 tnz (0x10, sp) + 0001EB 27 0A [ 1] 389 jreq 00141$ + 0001ED 5F [ 1] 390 clrw x + 0001EE 1F 05 [ 2] 391 ldw (0x05, sp), x + 0001F0 AE 80 00 [ 2] 392 ldw x, #0x8000 + 0001F3 1F 03 [ 2] 393 ldw (0x03, sp), x + 0001F5 20 05 [ 2] 394 jra 00142$ + 0001F7 395 00141$: + 0001F7 5F [ 1] 396 clrw x + 0001F8 1F 05 [ 2] 397 ldw (0x05, sp), x + 0001FA 1F 03 [ 2] 398 ldw (0x03, sp), x + 0001FC 399 00142$: + 0001FC 16 0A [ 2] 400 ldw y, (0x0a, sp) + 0001FE 17 0F [ 2] 401 ldw (0x0f, sp), y + 000200 7B 0F [ 1] 402 ld a, (0x0f, sp) + 000202 49 [ 1] 403 rlc a + 000203 4F [ 1] 404 clr a + 000204 A2 00 [ 1] 405 sbc a, #0x00 + 000206 6B 0E [ 1] 406 ld (0x0e, sp), a + 000208 6B 0D [ 1] 407 ld (0x0d, sp), a + 00020A 16 0F [ 2] 408 ldw y, (0x0f, sp) + 00020C 17 0D [ 2] 409 ldw (0x0d, sp), y + 00020E 5F [ 1] 410 clrw x + 00020F 1F 0F [ 2] 411 ldw (0x0f, sp), x + 000211 A6 07 [ 1] 412 ld a, #0x07 + 000213 413 00273$: + 000213 08 0E [ 1] 414 sll (0x0e, sp) + 000215 09 0D [ 1] 415 rlc (0x0d, sp) + 000217 4A [ 1] 416 dec a + 000218 26 F9 [ 1] 417 jrne 00273$ + 00021A 7B 06 [ 1] 418 ld a, (0x06, sp) + 00021C 1A 10 [ 1] 419 or a, (0x10, sp) + 00021E 6B 0C [ 1] 420 ld (0x0c, sp), a + 000220 7B 05 [ 1] 421 ld a, (0x05, sp) + 000222 1A 0F [ 1] 422 or a, (0x0f, sp) + 000224 6B 0B [ 1] 423 ld (0x0b, sp), a + 000226 7B 04 [ 1] 424 ld a, (0x04, sp) + 000228 1A 0E [ 1] 425 or a, (0x0e, sp) + 00022A 6B 0A [ 1] 426 ld (0x0a, sp), a + 00022C 7B 03 [ 1] 427 ld a, (0x03, sp) + 00022E 1A 0D [ 1] 428 or a, (0x0d, sp) + 000230 6B 09 [ 1] 429 ld (0x09, sp), a + 000232 16 11 [ 2] 430 ldw y, (0x11, sp) + 000234 17 03 [ 2] 431 ldw (0x03, sp), y + 000236 1E 13 [ 2] 432 ldw x, (0x13, sp) + 000238 07 03 [ 1] 433 sra (0x03, sp) + 00023A 06 04 [ 1] 434 rrc (0x04, sp) + 00023C 56 [ 2] 435 rrcw x + 00023D 07 03 [ 1] 436 sra (0x03, sp) + 00023F 06 04 [ 1] 437 rrc (0x04, sp) + 000241 56 [ 2] 438 rrcw x + 000242 07 03 [ 1] 439 sra (0x03, sp) + 000244 06 04 [ 1] 440 rrc (0x04, sp) + 000246 56 [ 2] 441 rrcw x + 000247 07 03 [ 1] 442 sra (0x03, sp) + 000249 06 04 [ 1] 443 rrc (0x04, sp) + 00024B 56 [ 2] 444 rrcw x + 00024C 1F 05 [ 2] 445 ldw (0x05, sp), x + 00024E 1F 15 [ 2] 446 ldw (0x15, sp), x + 000250 16 03 [ 2] 447 ldw y, (0x03, sp) + 000252 17 13 [ 2] 448 ldw (0x13, sp), y + 000254 7B 0C [ 1] 449 ld a, (0x0c, sp) + 000256 1A 16 [ 1] 450 or a, (0x16, sp) + 000258 6B 12 [ 1] 451 ld (0x12, sp), a + 00025A 7B 0B [ 1] 452 ld a, (0x0b, sp) + 00025C 1A 15 [ 1] 453 or a, (0x15, sp) + 00025E 6B 11 [ 1] 454 ld (0x11, sp), a + 000260 7B 0A [ 1] 455 ld a, (0x0a, sp) + 000262 1A 14 [ 1] 456 or a, (0x14, sp) + 000264 6B 10 [ 1] 457 ld (0x10, sp), a + 000266 7B 09 [ 1] 458 ld a, (0x09, sp) + 000268 1A 13 [ 1] 459 or a, (0x13, sp) + 00026A 6B 0F [ 1] 460 ld (0x0f, sp), a + 00026C 1E 07 [ 2] 461 ldw x, (0x07, sp) + 00026E 16 11 [ 2] 462 ldw y, (0x11, sp) + 000270 EF 02 [ 2] 463 ldw (0x2, x), y + 000272 16 0F [ 2] 464 ldw y, (0x0f, sp) + 000274 FF [ 2] 465 ldw (x), y + 000275 466 00136$: + 467 ; ../_fsadd.c: 249: return (a1); + 000275 1E 1B [ 2] 468 ldw x, (0x1b, sp) + 000277 16 19 [ 2] 469 ldw y, (0x19, sp) + 000279 470 00137$: + 471 ; ../_fsadd.c: 250: } + 000279 5B 16 [ 2] 472 addw sp, #22 + 00027B 81 [ 4] 473 ret + 474 .area CODE + 475 .area CONST + 476 .area INITIALIZER + 477 .area CABS (ABS) diff --git a/device/lib/stm8/_fsadd.rel b/device/lib/stm8/_fsadd.rel new file mode 100644 index 0000000..f54b6f9 --- /dev/null +++ b/device/lib/stm8/_fsadd.rel @@ -0,0 +1,219 @@ +XH3 +H B areas 2 global symbols +M _fsadd +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 27C flags 0 addr 0 +S ___fsadd Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 16 96 1C 00 1D 90 93 90 EE 02 17 11 +R 00 00 00 09 +T 00 00 0D FE 1F 0F 16 11 17 15 16 0F 17 13 93 A6 +R 00 00 00 09 +T 00 00 1A 80 62 4F 95 1F 01 16 11 7B 10 A4 7F 95 +R 00 00 00 09 +T 00 00 27 4F 97 58 99 56 5E A6 04 +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 90 58 59 4A 26 FA 17 05 1F 03 0D 13 2A +R 00 00 00 09 +T 00 00 3C 0E 16 05 90 50 1E 03 24 01 5C +R 00 00 00 09 +T 00 00 46 +R 00 00 00 09 +T 00 00 46 50 17 05 1F 03 +R 00 00 00 09 +T 00 00 4B +R 00 00 00 09 +T 00 00 4B 1E 11 26 0B 1E 0F 26 07 1E 1B 16 19 CC +R 00 00 00 09 +T 00 00 58 02 79 +R 00 00 00 09 00 03 00 09 +T 00 00 5A +R 00 00 00 09 +T 00 00 5A 96 1C 00 19 1F 07 90 93 90 EE 02 17 0B +R 00 00 00 09 +T 00 00 67 FE 1F 09 16 0B 17 15 16 09 17 13 93 A6 +R 00 00 00 09 +T 00 00 74 80 62 4F 95 1F 0D 16 0B 7B 0A A4 7F 95 +R 00 00 00 09 +T 00 00 81 4F 97 58 99 56 5E A6 04 +R 00 00 00 09 +T 00 00 89 +R 00 00 00 09 +T 00 00 89 90 58 59 4A 26 FA 17 11 1F 0F 0D 13 2A +R 00 00 00 09 +T 00 00 96 20 0D 09 2A 1C 7B 12 40 6B 16 4F 12 11 +R 00 00 00 09 +T 00 00 A3 6B 15 4F 12 10 6B 14 4F 12 0F 6B 0F 16 +R 00 00 00 09 +T 00 00 B0 15 17 11 7B 14 6B 10 +R 00 00 00 09 +T 00 00 B7 +R 00 00 00 09 +T 00 00 B7 1E 0B 26 0B 1E 09 26 07 1E 1F 16 1D CC +R 00 00 00 09 +T 00 00 C4 02 79 +R 00 00 00 09 00 03 00 09 +T 00 00 C6 +R 00 00 00 09 +T 00 00 C6 1E 0D 72 F0 01 1F 15 A3 00 19 2D 07 1E +R 00 00 00 09 +T 00 00 D3 1B 16 19 CC 02 79 +R 00 00 00 09 00 07 00 09 +T 00 00 D9 +R 00 00 00 09 +T 00 00 D9 1E 15 A3 FF E7 2E 07 1E 1F 16 1D CC +R 00 00 00 09 +T 00 00 E5 02 79 +R 00 00 00 09 00 03 00 09 +T 00 00 E7 +R 00 00 00 09 +T 00 00 E7 0D 15 2A 1E 1E 15 50 1F 15 72 FB 0D 1F +R 00 00 00 09 +T 00 00 F4 0D 1E 11 16 0F 7B 16 27 06 +R 00 00 00 09 +T 00 00 FD +R 00 00 00 09 +T 00 00 FD 90 57 56 4A 26 FA +R 00 00 00 09 +T 00 01 03 +R 00 00 00 09 +T 00 01 03 1F 11 17 0F 20 12 +R 00 00 00 09 +T 00 01 09 +R 00 00 00 09 +T 00 01 09 1E 05 16 03 7B 16 27 06 +R 00 00 00 09 +T 00 01 11 +R 00 00 00 09 +T 00 01 11 90 57 56 4A 26 FA +R 00 00 00 09 +T 00 01 17 +R 00 00 00 09 +T 00 01 17 1F 05 17 03 +R 00 00 00 09 +T 00 01 1B +R 00 00 00 09 +T 00 01 1B 16 11 72 F9 05 1E 0F 24 01 5C +R 00 00 00 09 +T 00 01 25 +R 00 00 00 09 +T 00 01 25 72 FB 03 17 13 1F 11 0F 10 0D 11 2A 14 +R 00 00 00 09 +T 00 01 32 16 13 90 50 1E 11 24 01 5C +R 00 00 00 09 +T 00 01 3B +R 00 00 00 09 +T 00 01 3B 50 17 13 1F 11 A6 01 6B 10 20 0D +R 00 00 00 09 +T 00 01 46 +R 00 00 00 09 +T 00 01 46 1E 13 26 09 1E 11 26 05 90 5F CC 02 79 +R 00 00 00 09 00 0E 00 09 +T 00 01 53 +R 00 00 00 09 +T 00 01 53 16 0D 17 15 +R 00 00 00 09 +T 00 01 57 +R 00 00 00 09 +T 00 01 57 1E 11 A3 08 00 24 0F 08 14 09 13 09 12 +R 00 00 00 09 +T 00 01 64 09 11 1E 15 5A 1F 15 20 EA +R 00 00 00 09 +T 00 01 6D +R 00 00 00 09 +T 00 01 6D +R 00 00 00 09 +T 00 01 6D 7B 11 A5 F0 27 23 7B 14 44 24 0F 1E 13 +R 00 00 00 09 +T 00 01 7A 1C 00 02 16 11 24 02 90 5C +R 00 00 00 09 +T 00 01 83 +R 00 00 00 09 +T 00 01 83 1F 13 17 11 +R 00 00 00 09 +T 00 01 87 +R 00 00 00 09 +T 00 01 87 07 11 06 12 06 13 06 14 1E 15 5C 1F 15 +R 00 00 00 09 +T 00 01 94 20 D7 +R 00 00 00 09 +T 00 01 96 +R 00 00 00 09 +T 00 01 96 16 15 17 0A 16 13 17 0E 7B 12 6B 0D 7B +R 00 00 00 09 +T 00 01 A3 11 A4 F7 6B 0C 16 0E 17 13 16 0C 17 11 +R 00 00 00 09 +T 00 01 B0 1E 15 A3 01 00 2F 22 0D 10 27 0A 5F 1F +R 00 00 00 09 +T 00 01 BD 15 AE FF 80 1F 13 20 08 +R 00 00 00 09 +T 00 01 C5 +R 00 00 00 09 +T 00 01 C5 5F 1F 15 AE 7F 80 1F 13 +R 00 00 00 09 +T 00 01 CD +R 00 00 00 09 +T 00 01 CD 1E 07 16 15 EF 02 16 13 FF CC 02 75 +R 00 00 00 09 00 0D 00 09 +T 00 01 D9 +R 00 00 00 09 +T 00 01 D9 0D 15 2A 0C 1E 07 6F 03 6F 02 6F 01 7F +R 00 00 00 09 +T 00 01 E6 CC 02 75 +R 00 00 00 09 00 04 00 09 +T 00 01 E9 +R 00 00 00 09 +T 00 01 E9 0D 10 27 0A 5F 1F 05 AE 80 00 1F 03 20 +R 00 00 00 09 +T 00 01 F6 05 +R 00 00 00 09 +T 00 01 F7 +R 00 00 00 09 +T 00 01 F7 5F 1F 05 1F 03 +R 00 00 00 09 +T 00 01 FC +R 00 00 00 09 +T 00 01 FC 16 0A 17 0F 7B 0F 49 4F A2 00 6B 0E 6B +R 00 00 00 09 +T 00 02 09 0D 16 0F 17 0D 5F 1F 0F A6 07 +R 00 00 00 09 +T 00 02 13 +R 00 00 00 09 +T 00 02 13 08 0E 09 0D 4A 26 F9 7B 06 1A 10 6B 0C +R 00 00 00 09 +T 00 02 20 7B 05 1A 0F 6B 0B 7B 04 1A 0E 6B 0A 7B +R 00 00 00 09 +T 00 02 2D 03 1A 0D 6B 09 16 11 17 03 1E 13 07 03 +R 00 00 00 09 +T 00 02 3A 06 04 56 07 03 06 04 56 07 03 06 04 56 +R 00 00 00 09 +T 00 02 47 07 03 06 04 56 1F 05 1F 15 16 03 17 13 +R 00 00 00 09 +T 00 02 54 7B 0C 1A 16 6B 12 7B 0B 1A 15 6B 11 7B +R 00 00 00 09 +T 00 02 61 0A 1A 14 6B 10 7B 09 1A 13 6B 0F 1E 07 +R 00 00 00 09 +T 00 02 6E 16 11 EF 02 16 0F FF +R 00 00 00 09 +T 00 02 75 +R 00 00 00 09 +T 00 02 75 1E 1B 16 19 +R 00 00 00 09 +T 00 02 79 +R 00 00 00 09 +T 00 02 79 5B 16 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fsadd.sym b/device/lib/stm8/_fsadd.sym new file mode 100644 index 0000000..bb1acde --- /dev/null +++ b/device/lib/stm8/_fsadd.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fsadd 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 27C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fsdiv.asm b/device/lib/stm8/_fsdiv.asm new file mode 100644 index 0000000..d958994 --- /dev/null +++ b/device/lib/stm8/_fsdiv.asm @@ -0,0 +1,468 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fsdiv + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fsdiv +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fsdiv.c: 274: static float __fsdiv_org (float a1, float a2) +; ----------------------------------------- +; function __fsdiv_org +; ----------------------------------------- +___fsdiv_org: + sub sp, #34 +; ../_fsdiv.c: 283: fl1.f = a1; + ldw y, (0x27, sp) + ldw (0x03, sp), y + ldw y, (0x25, sp) + ldw (0x01, sp), y +; ../_fsdiv.c: 284: fl2.f = a2; + ldw y, (0x2b, sp) + ldw (0x07, sp), y + ldw y, (0x29, sp) + ldw (0x05, sp), y +; ../_fsdiv.c: 287: exp = EXP (fl1.l) ; + ldw x, (0x01, sp) + ld a, #0x80 + div x, a + clr a + ld xh, a + ldw (0x0d, sp), x +; ../_fsdiv.c: 288: exp -= EXP (fl2.l); + ldw x, (0x05, sp) + ld a, #0x80 + div x, a + ld a, xl + ld (0x16, sp), a + clr (0x15, sp) + ldw x, (0x0d, sp) + subw x, (0x15, sp) +; ../_fsdiv.c: 289: exp += EXCESS; + ldw (0x0d, sp), x + addw x, #0x007e + ldw (0x0d, sp), x +; ../_fsdiv.c: 292: sign = SIGN (fl1.l) ^ SIGN (fl2.l); + ldw x, (0x01, sp) + sllw x + clr a + rlc a + ld (0x16, sp), a + ldw x, (0x05, sp) + sllw x + clr a + rlc a + xor a, (0x16, sp) + ld (0x14, sp), a +; ../_fsdiv.c: 295: if (!fl2.l) + ldw y, (0x07, sp) + ldw (0x12, sp), y + ldw y, (0x05, sp) + ldw (0x10, sp), y + ldw x, (0x12, sp) + jrne 00102$ +; ../_fsdiv.c: 297: fl2.l = 0x7FC00000; + ldw x, (0x10, sp) + jrne 00102$ + ldw (0x07, sp), x + ldw x, #0x7fc0 + ldw (0x05, sp), x +; ../_fsdiv.c: 298: return (fl2.f); + ldw x, (0x07, sp) + ldw y, (0x05, sp) + jp 00118$ +00102$: +; ../_fsdiv.c: 302: if (!fl1.l) + ldw x, (0x03, sp) + ldw y, (0x01, sp) + tnzw x + jrne 00104$ + tnzw y + jrne 00104$ +; ../_fsdiv.c: 303: return (0); + clrw x + clrw y + jp 00118$ +00104$: +; ../_fsdiv.c: 306: mant1 = MANT (fl1.l); + ldw y, (0x03, sp) + ldw x, (0x01, sp) + ld a, xl + and a, #0x7f + ld xl, a + clr a + rrwa x + or a, #0x80 + ld xl, a + ldw (0x21, sp), y + ldw (0x1f, sp), x +; ../_fsdiv.c: 307: mant2 = MANT (fl2.l); + ldw y, (0x07, sp) + ldw x, (0x05, sp) + ld a, xl + and a, #0x7f + ld xl, a + clr a + rrwa x + or a, #0x80 + ld xl, a + ldw (0x0b, sp), y + ldw (0x09, sp), x +; ../_fsdiv.c: 310: if (mant1 < mant2) + ldw x, (0x21, sp) + cpw x, (0x0b, sp) + ld a, (0x20, sp) + sbc a, (0x0a, sp) + ld a, (0x1f, sp) + sbc a, (0x09, sp) + jrsge 00106$ +; ../_fsdiv.c: 312: mant1 <<= 1; + sll (0x22, sp) + rlc (0x21, sp) + rlc (0x20, sp) + rlc (0x1f, sp) +; ../_fsdiv.c: 313: exp--; + ldw x, (0x0d, sp) + decw x + ldw (0x15, sp), x + ldw (0x0d, sp), x +00106$: +; ../_fsdiv.c: 317: mask = 0x1000000; + clrw x + ldw (0x1d, sp), x + ldw x, #0x0100 + ldw (0x1b, sp), x +; ../_fsdiv.c: 318: result = 0; + clrw x + ldw (0x19, sp), x + ldw (0x17, sp), x +; ../_fsdiv.c: 319: while (mask) +00109$: + ldw x, (0x1d, sp) + jrne 00179$ + ldw x, (0x1b, sp) + jreq 00111$ +00179$: +; ../_fsdiv.c: 321: if (mant1 >= mant2) + ldw x, (0x21, sp) + cpw x, (0x0b, sp) + ld a, (0x20, sp) + sbc a, (0x0a, sp) + ld a, (0x1f, sp) + sbc a, (0x09, sp) + jrslt 00108$ +; ../_fsdiv.c: 323: result |= mask; + ldw x, (0x19, sp) + ldw y, (0x17, sp) + ld a, xl + or a, (0x1e, sp) + rlwa x + or a, (0x1d, sp) + ld xh, a + ld a, yl + or a, (0x1c, sp) + rlwa y + or a, (0x1b, sp) + ld yh, a + ldw (0x19, sp), x + ldw (0x17, sp), y +; ../_fsdiv.c: 324: mant1 -= mant2; + ldw y, (0x21, sp) + subw y, (0x0b, sp) + ld a, (0x20, sp) + sbc a, (0x0a, sp) + ld xl, a + ld a, (0x1f, sp) + sbc a, (0x09, sp) + ld xh, a + ldw (0x21, sp), y + ldw (0x1f, sp), x +00108$: +; ../_fsdiv.c: 326: mant1 <<= 1; + sll (0x22, sp) + rlc (0x21, sp) + rlc (0x20, sp) + rlc (0x1f, sp) +; ../_fsdiv.c: 327: mask >>= 1; + srl (0x1b, sp) + rrc (0x1c, sp) + rrc (0x1d, sp) + rrc (0x1e, sp) + jra 00109$ +00111$: +; ../_fsdiv.c: 331: result += 1; + ldw x, (0x19, sp) + addw x, #0x0001 + ldw y, (0x17, sp) + jrnc 00181$ + incw y +00181$: + ldw (0x19, sp), x + ldw (0x17, sp), y +; ../_fsdiv.c: 334: exp++; + ldw x, (0x0d, sp) + incw x + ldw (0x0d, sp), x +; ../_fsdiv.c: 335: result >>= 1; + sra (0x17, sp) + rrc (0x18, sp) + rrc (0x19, sp) + rrc (0x1a, sp) +; ../_fsdiv.c: 337: result &= ~HIDDEN; + ldw y, (0x19, sp) + ld a, (0x18, sp) + and a, #0x7f + ld xl, a + ld a, (0x17, sp) + ld xh, a + ldw (0x19, sp), y + ldw (0x17, sp), x +; ../_fsdiv.c: 340: if (exp >= 0x100) + ldw x, (0x0d, sp) + cpw x, #0x0100 + jrslt 00116$ +; ../_fsdiv.c: 341: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY; + tnz (0x14, sp) + jreq 00120$ + clrw x + ldw (0x15, sp), x + clr (0x14, sp) + ld a, #0x80 + jra 00121$ +00120$: + clrw x + ldw (0x15, sp), x + clr (0x14, sp) + clr a +00121$: + or a, #0x7f + ld yh, a + ld a, (0x16, sp) + ld xl, a + ld a, (0x15, sp) + ld xh, a + ld a, (0x14, sp) + or a, #0x80 + ld yl, a + ldw (0x03, sp), x + ldw (0x01, sp), y + jra 00117$ +00116$: +; ../_fsdiv.c: 342: else if (exp < 0) + tnz (0x0d, sp) + jrpl 00113$ +; ../_fsdiv.c: 343: fl1.l = 0; + clrw x + ldw (0x03, sp), x + ldw (0x01, sp), x + jra 00117$ +00113$: +; ../_fsdiv.c: 345: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result); + tnz (0x14, sp) + jreq 00122$ + clrw x + ldw (0x15, sp), x + ldw x, #0x8000 + ldw (0x13, sp), x + jra 00123$ +00122$: + clrw x + ldw (0x15, sp), x + ldw (0x13, sp), x +00123$: + ldw y, (0x0d, sp) + clrw x + tnzw y + jrpl 00186$ + decw x +00186$: + clrw x + ld a, #0x07 +00187$: + sllw y + dec a + jrne 00187$ + ld a, xl + or a, (0x16, sp) + ld (0x12, sp), a + ld a, xh + or a, (0x15, sp) + ld (0x11, sp), a + ld a, yl + or a, (0x14, sp) + ld (0x10, sp), a + ld a, yh + or a, (0x13, sp) + ldw y, (0x19, sp) + ldw (0x15, sp), y + ldw y, (0x17, sp) + pushw y + or a, (1, sp) + popw y + ld yh, a + ld a, (0x12, sp) + or a, (0x16, sp) + ld xl, a + ld a, (0x11, sp) + or a, (0x15, sp) + ld xh, a + pushw y + ld a, (0x12, sp) + or a, (2, sp) + popw y + ld yl, a + ldw (0x03, sp), x + ldw (0x01, sp), y +00117$: +; ../_fsdiv.c: 346: return (fl1.f); + ldw x, (0x03, sp) + ldw y, (0x01, sp) +00118$: +; ../_fsdiv.c: 347: } + addw sp, #34 + ret +; ../_fsdiv.c: 349: float __fsdiv (float a1, float a2) +; ----------------------------------------- +; function __fsdiv +; ----------------------------------------- +___fsdiv: + sub sp, #6 +; ../_fsdiv.c: 352: unsigned long *p = (unsigned long *) &f; + ldw x, sp + incw x + ldw (0x05, sp), x +; ../_fsdiv.c: 354: if (a2 == 0.0f && a1 > 0.0f) + ldw x, (0x0f, sp) + jrne 00110$ + ldw x, (0x0d, sp) + sllw x + jrne 00110$ + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + clrw x + pushw x + clrw x + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00110$ +; ../_fsdiv.c: 355: *p = 0x7f800000; // inf + ldw x, (0x05, sp) + clr (0x3, x) + clr (0x2, x) + ldw y, #0x7f80 + ldw (x), y + jra 00111$ +00110$: +; ../_fsdiv.c: 356: else if (a2 == 0.0f && a1 < 0.0f) + ldw x, (0x0f, sp) + jrne 00106$ + ldw x, (0x0d, sp) + sllw x + jrne 00106$ + clrw x + pushw x + clrw x + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00106$ +; ../_fsdiv.c: 357: *p = 0xff800000; // -inf + ldw x, (0x05, sp) + clr (0x3, x) + clr (0x2, x) + ldw y, #0xff80 + ldw (x), y + jra 00111$ +00106$: +; ../_fsdiv.c: 358: else if (a2 == 0.0f && a1 == 0.0f) + ldw x, (0x0f, sp) + jrne 00102$ + ldw x, (0x0d, sp) + sllw x + jrne 00102$ + ldw x, (0x0b, sp) + jrne 00102$ + ldw x, (0x09, sp) + sllw x + jrne 00102$ +; ../_fsdiv.c: 359: *p = 0xffc00000; // nan + ldw x, (0x05, sp) + clr (0x3, x) + clr (0x2, x) + ldw y, #0xffc0 + ldw (x), y + jra 00111$ +00102$: +; ../_fsdiv.c: 361: f = __fsdiv_org (a1, a2); + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fsdiv_org + addw sp, #8 + ldw (0x03, sp), x + ldw (0x01, sp), y +00111$: +; ../_fsdiv.c: 363: return f; + ldw x, (0x03, sp) + ldw y, (0x01, sp) +; ../_fsdiv.c: 364: } + addw sp, #6 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fsdiv.lst b/device/lib/stm8/_fsdiv.lst new file mode 100644 index 0000000..aa4a189 --- /dev/null +++ b/device/lib/stm8/_fsdiv.lst @@ -0,0 +1,468 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fsdiv + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fsdiv + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_fsdiv.c: 274: static float __fsdiv_org (float a1, float a2) + 50 ; ----------------------------------------- + 51 ; function __fsdiv_org + 52 ; ----------------------------------------- + 000000 53 ___fsdiv_org: + 000000 52 22 [ 2] 54 sub sp, #34 + 55 ; ../_fsdiv.c: 283: fl1.f = a1; + 000002 16 27 [ 2] 56 ldw y, (0x27, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 25 [ 2] 58 ldw y, (0x25, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fsdiv.c: 284: fl2.f = a2; + 00000A 16 2B [ 2] 61 ldw y, (0x2b, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 29 [ 2] 63 ldw y, (0x29, sp) + 000010 17 05 [ 2] 64 ldw (0x05, sp), y + 65 ; ../_fsdiv.c: 287: exp = EXP (fl1.l) ; + 000012 1E 01 [ 2] 66 ldw x, (0x01, sp) + 000014 A6 80 [ 1] 67 ld a, #0x80 + 000016 62 [ 2] 68 div x, a + 000017 4F [ 1] 69 clr a + 000018 95 [ 1] 70 ld xh, a + 000019 1F 0D [ 2] 71 ldw (0x0d, sp), x + 72 ; ../_fsdiv.c: 288: exp -= EXP (fl2.l); + 00001B 1E 05 [ 2] 73 ldw x, (0x05, sp) + 00001D A6 80 [ 1] 74 ld a, #0x80 + 00001F 62 [ 2] 75 div x, a + 000020 9F [ 1] 76 ld a, xl + 000021 6B 16 [ 1] 77 ld (0x16, sp), a + 000023 0F 15 [ 1] 78 clr (0x15, sp) + 000025 1E 0D [ 2] 79 ldw x, (0x0d, sp) + 000027 72 F0 15 [ 2] 80 subw x, (0x15, sp) + 81 ; ../_fsdiv.c: 289: exp += EXCESS; + 00002A 1F 0D [ 2] 82 ldw (0x0d, sp), x + 00002C 1C 00 7E [ 2] 83 addw x, #0x007e + 00002F 1F 0D [ 2] 84 ldw (0x0d, sp), x + 85 ; ../_fsdiv.c: 292: sign = SIGN (fl1.l) ^ SIGN (fl2.l); + 000031 1E 01 [ 2] 86 ldw x, (0x01, sp) + 000033 58 [ 2] 87 sllw x + 000034 4F [ 1] 88 clr a + 000035 49 [ 1] 89 rlc a + 000036 6B 16 [ 1] 90 ld (0x16, sp), a + 000038 1E 05 [ 2] 91 ldw x, (0x05, sp) + 00003A 58 [ 2] 92 sllw x + 00003B 4F [ 1] 93 clr a + 00003C 49 [ 1] 94 rlc a + 00003D 18 16 [ 1] 95 xor a, (0x16, sp) + 00003F 6B 14 [ 1] 96 ld (0x14, sp), a + 97 ; ../_fsdiv.c: 295: if (!fl2.l) + 000041 16 07 [ 2] 98 ldw y, (0x07, sp) + 000043 17 12 [ 2] 99 ldw (0x12, sp), y + 000045 16 05 [ 2] 100 ldw y, (0x05, sp) + 000047 17 10 [ 2] 101 ldw (0x10, sp), y + 000049 1E 12 [ 2] 102 ldw x, (0x12, sp) + 00004B 26 12 [ 1] 103 jrne 00102$ + 104 ; ../_fsdiv.c: 297: fl2.l = 0x7FC00000; + 00004D 1E 10 [ 2] 105 ldw x, (0x10, sp) + 00004F 26 0E [ 1] 106 jrne 00102$ + 000051 1F 07 [ 2] 107 ldw (0x07, sp), x + 000053 AE 7F C0 [ 2] 108 ldw x, #0x7fc0 + 000056 1F 05 [ 2] 109 ldw (0x05, sp), x + 110 ; ../_fsdiv.c: 298: return (fl2.f); + 000058 1E 07 [ 2] 111 ldw x, (0x07, sp) + 00005A 16 05 [ 2] 112 ldw y, (0x05, sp) + 00005C CCr01rD6 [ 2] 113 jp 00118$ + 00005F 114 00102$: + 115 ; ../_fsdiv.c: 302: if (!fl1.l) + 00005F 1E 03 [ 2] 116 ldw x, (0x03, sp) + 000061 16 01 [ 2] 117 ldw y, (0x01, sp) + 000063 5D [ 2] 118 tnzw x + 000064 26 0A [ 1] 119 jrne 00104$ + 000066 90 5D [ 2] 120 tnzw y + 000068 26 06 [ 1] 121 jrne 00104$ + 122 ; ../_fsdiv.c: 303: return (0); + 00006A 5F [ 1] 123 clrw x + 00006B 90 5F [ 1] 124 clrw y + 00006D CCr01rD6 [ 2] 125 jp 00118$ + 000070 126 00104$: + 127 ; ../_fsdiv.c: 306: mant1 = MANT (fl1.l); + 000070 16 03 [ 2] 128 ldw y, (0x03, sp) + 000072 1E 01 [ 2] 129 ldw x, (0x01, sp) + 000074 9F [ 1] 130 ld a, xl + 000075 A4 7F [ 1] 131 and a, #0x7f + 000077 97 [ 1] 132 ld xl, a + 000078 4F [ 1] 133 clr a + 000079 01 [ 1] 134 rrwa x + 00007A AA 80 [ 1] 135 or a, #0x80 + 00007C 97 [ 1] 136 ld xl, a + 00007D 17 21 [ 2] 137 ldw (0x21, sp), y + 00007F 1F 1F [ 2] 138 ldw (0x1f, sp), x + 139 ; ../_fsdiv.c: 307: mant2 = MANT (fl2.l); + 000081 16 07 [ 2] 140 ldw y, (0x07, sp) + 000083 1E 05 [ 2] 141 ldw x, (0x05, sp) + 000085 9F [ 1] 142 ld a, xl + 000086 A4 7F [ 1] 143 and a, #0x7f + 000088 97 [ 1] 144 ld xl, a + 000089 4F [ 1] 145 clr a + 00008A 01 [ 1] 146 rrwa x + 00008B AA 80 [ 1] 147 or a, #0x80 + 00008D 97 [ 1] 148 ld xl, a + 00008E 17 0B [ 2] 149 ldw (0x0b, sp), y + 000090 1F 09 [ 2] 150 ldw (0x09, sp), x + 151 ; ../_fsdiv.c: 310: if (mant1 < mant2) + 000092 1E 21 [ 2] 152 ldw x, (0x21, sp) + 000094 13 0B [ 2] 153 cpw x, (0x0b, sp) + 000096 7B 20 [ 1] 154 ld a, (0x20, sp) + 000098 12 0A [ 1] 155 sbc a, (0x0a, sp) + 00009A 7B 1F [ 1] 156 ld a, (0x1f, sp) + 00009C 12 09 [ 1] 157 sbc a, (0x09, sp) + 00009E 2E 0F [ 1] 158 jrsge 00106$ + 159 ; ../_fsdiv.c: 312: mant1 <<= 1; + 0000A0 08 22 [ 1] 160 sll (0x22, sp) + 0000A2 09 21 [ 1] 161 rlc (0x21, sp) + 0000A4 09 20 [ 1] 162 rlc (0x20, sp) + 0000A6 09 1F [ 1] 163 rlc (0x1f, sp) + 164 ; ../_fsdiv.c: 313: exp--; + 0000A8 1E 0D [ 2] 165 ldw x, (0x0d, sp) + 0000AA 5A [ 2] 166 decw x + 0000AB 1F 15 [ 2] 167 ldw (0x15, sp), x + 0000AD 1F 0D [ 2] 168 ldw (0x0d, sp), x + 0000AF 169 00106$: + 170 ; ../_fsdiv.c: 317: mask = 0x1000000; + 0000AF 5F [ 1] 171 clrw x + 0000B0 1F 1D [ 2] 172 ldw (0x1d, sp), x + 0000B2 AE 01 00 [ 2] 173 ldw x, #0x0100 + 0000B5 1F 1B [ 2] 174 ldw (0x1b, sp), x + 175 ; ../_fsdiv.c: 318: result = 0; + 0000B7 5F [ 1] 176 clrw x + 0000B8 1F 19 [ 2] 177 ldw (0x19, sp), x + 0000BA 1F 17 [ 2] 178 ldw (0x17, sp), x + 179 ; ../_fsdiv.c: 319: while (mask) + 0000BC 180 00109$: + 0000BC 1E 1D [ 2] 181 ldw x, (0x1d, sp) + 0000BE 26 04 [ 1] 182 jrne 00179$ + 0000C0 1E 1B [ 2] 183 ldw x, (0x1b, sp) + 0000C2 27 4C [ 1] 184 jreq 00111$ + 0000C4 185 00179$: + 186 ; ../_fsdiv.c: 321: if (mant1 >= mant2) + 0000C4 1E 21 [ 2] 187 ldw x, (0x21, sp) + 0000C6 13 0B [ 2] 188 cpw x, (0x0b, sp) + 0000C8 7B 20 [ 1] 189 ld a, (0x20, sp) + 0000CA 12 0A [ 1] 190 sbc a, (0x0a, sp) + 0000CC 7B 1F [ 1] 191 ld a, (0x1f, sp) + 0000CE 12 09 [ 1] 192 sbc a, (0x09, sp) + 0000D0 2F 2C [ 1] 193 jrslt 00108$ + 194 ; ../_fsdiv.c: 323: result |= mask; + 0000D2 1E 19 [ 2] 195 ldw x, (0x19, sp) + 0000D4 16 17 [ 2] 196 ldw y, (0x17, sp) + 0000D6 9F [ 1] 197 ld a, xl + 0000D7 1A 1E [ 1] 198 or a, (0x1e, sp) + 0000D9 02 [ 1] 199 rlwa x + 0000DA 1A 1D [ 1] 200 or a, (0x1d, sp) + 0000DC 95 [ 1] 201 ld xh, a + 0000DD 90 9F [ 1] 202 ld a, yl + 0000DF 1A 1C [ 1] 203 or a, (0x1c, sp) + 0000E1 90 02 [ 1] 204 rlwa y + 0000E3 1A 1B [ 1] 205 or a, (0x1b, sp) + 0000E5 90 95 [ 1] 206 ld yh, a + 0000E7 1F 19 [ 2] 207 ldw (0x19, sp), x + 0000E9 17 17 [ 2] 208 ldw (0x17, sp), y + 209 ; ../_fsdiv.c: 324: mant1 -= mant2; + 0000EB 16 21 [ 2] 210 ldw y, (0x21, sp) + 0000ED 72 F2 0B [ 2] 211 subw y, (0x0b, sp) + 0000F0 7B 20 [ 1] 212 ld a, (0x20, sp) + 0000F2 12 0A [ 1] 213 sbc a, (0x0a, sp) + 0000F4 97 [ 1] 214 ld xl, a + 0000F5 7B 1F [ 1] 215 ld a, (0x1f, sp) + 0000F7 12 09 [ 1] 216 sbc a, (0x09, sp) + 0000F9 95 [ 1] 217 ld xh, a + 0000FA 17 21 [ 2] 218 ldw (0x21, sp), y + 0000FC 1F 1F [ 2] 219 ldw (0x1f, sp), x + 0000FE 220 00108$: + 221 ; ../_fsdiv.c: 326: mant1 <<= 1; + 0000FE 08 22 [ 1] 222 sll (0x22, sp) + 000100 09 21 [ 1] 223 rlc (0x21, sp) + 000102 09 20 [ 1] 224 rlc (0x20, sp) + 000104 09 1F [ 1] 225 rlc (0x1f, sp) + 226 ; ../_fsdiv.c: 327: mask >>= 1; + 000106 04 1B [ 1] 227 srl (0x1b, sp) + 000108 06 1C [ 1] 228 rrc (0x1c, sp) + 00010A 06 1D [ 1] 229 rrc (0x1d, sp) + 00010C 06 1E [ 1] 230 rrc (0x1e, sp) + 00010E 20 AC [ 2] 231 jra 00109$ + 000110 232 00111$: + 233 ; ../_fsdiv.c: 331: result += 1; + 000110 1E 19 [ 2] 234 ldw x, (0x19, sp) + 000112 1C 00 01 [ 2] 235 addw x, #0x0001 + 000115 16 17 [ 2] 236 ldw y, (0x17, sp) + 000117 24 02 [ 1] 237 jrnc 00181$ + 000119 90 5C [ 1] 238 incw y + 00011B 239 00181$: + 00011B 1F 19 [ 2] 240 ldw (0x19, sp), x + 00011D 17 17 [ 2] 241 ldw (0x17, sp), y + 242 ; ../_fsdiv.c: 334: exp++; + 00011F 1E 0D [ 2] 243 ldw x, (0x0d, sp) + 000121 5C [ 1] 244 incw x + 000122 1F 0D [ 2] 245 ldw (0x0d, sp), x + 246 ; ../_fsdiv.c: 335: result >>= 1; + 000124 07 17 [ 1] 247 sra (0x17, sp) + 000126 06 18 [ 1] 248 rrc (0x18, sp) + 000128 06 19 [ 1] 249 rrc (0x19, sp) + 00012A 06 1A [ 1] 250 rrc (0x1a, sp) + 251 ; ../_fsdiv.c: 337: result &= ~HIDDEN; + 00012C 16 19 [ 2] 252 ldw y, (0x19, sp) + 00012E 7B 18 [ 1] 253 ld a, (0x18, sp) + 000130 A4 7F [ 1] 254 and a, #0x7f + 000132 97 [ 1] 255 ld xl, a + 000133 7B 17 [ 1] 256 ld a, (0x17, sp) + 000135 95 [ 1] 257 ld xh, a + 000136 17 19 [ 2] 258 ldw (0x19, sp), y + 000138 1F 17 [ 2] 259 ldw (0x17, sp), x + 260 ; ../_fsdiv.c: 340: if (exp >= 0x100) + 00013A 1E 0D [ 2] 261 ldw x, (0x0d, sp) + 00013C A3 01 00 [ 2] 262 cpw x, #0x0100 + 00013F 2F 29 [ 1] 263 jrslt 00116$ + 264 ; ../_fsdiv.c: 341: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY; + 000141 0D 14 [ 1] 265 tnz (0x14, sp) + 000143 27 09 [ 1] 266 jreq 00120$ + 000145 5F [ 1] 267 clrw x + 000146 1F 15 [ 2] 268 ldw (0x15, sp), x + 000148 0F 14 [ 1] 269 clr (0x14, sp) + 00014A A6 80 [ 1] 270 ld a, #0x80 + 00014C 20 06 [ 2] 271 jra 00121$ + 00014E 272 00120$: + 00014E 5F [ 1] 273 clrw x + 00014F 1F 15 [ 2] 274 ldw (0x15, sp), x + 000151 0F 14 [ 1] 275 clr (0x14, sp) + 000153 4F [ 1] 276 clr a + 000154 277 00121$: + 000154 AA 7F [ 1] 278 or a, #0x7f + 000156 90 95 [ 1] 279 ld yh, a + 000158 7B 16 [ 1] 280 ld a, (0x16, sp) + 00015A 97 [ 1] 281 ld xl, a + 00015B 7B 15 [ 1] 282 ld a, (0x15, sp) + 00015D 95 [ 1] 283 ld xh, a + 00015E 7B 14 [ 1] 284 ld a, (0x14, sp) + 000160 AA 80 [ 1] 285 or a, #0x80 + 000162 90 97 [ 1] 286 ld yl, a + 000164 1F 03 [ 2] 287 ldw (0x03, sp), x + 000166 17 01 [ 2] 288 ldw (0x01, sp), y + 000168 20 68 [ 2] 289 jra 00117$ + 00016A 290 00116$: + 291 ; ../_fsdiv.c: 342: else if (exp < 0) + 00016A 0D 0D [ 1] 292 tnz (0x0d, sp) + 00016C 2A 07 [ 1] 293 jrpl 00113$ + 294 ; ../_fsdiv.c: 343: fl1.l = 0; + 00016E 5F [ 1] 295 clrw x + 00016F 1F 03 [ 2] 296 ldw (0x03, sp), x + 000171 1F 01 [ 2] 297 ldw (0x01, sp), x + 000173 20 5D [ 2] 298 jra 00117$ + 000175 299 00113$: + 300 ; ../_fsdiv.c: 345: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result); + 000175 0D 14 [ 1] 301 tnz (0x14, sp) + 000177 27 0A [ 1] 302 jreq 00122$ + 000179 5F [ 1] 303 clrw x + 00017A 1F 15 [ 2] 304 ldw (0x15, sp), x + 00017C AE 80 00 [ 2] 305 ldw x, #0x8000 + 00017F 1F 13 [ 2] 306 ldw (0x13, sp), x + 000181 20 05 [ 2] 307 jra 00123$ + 000183 308 00122$: + 000183 5F [ 1] 309 clrw x + 000184 1F 15 [ 2] 310 ldw (0x15, sp), x + 000186 1F 13 [ 2] 311 ldw (0x13, sp), x + 000188 312 00123$: + 000188 16 0D [ 2] 313 ldw y, (0x0d, sp) + 00018A 5F [ 1] 314 clrw x + 00018B 90 5D [ 2] 315 tnzw y + 00018D 2A 01 [ 1] 316 jrpl 00186$ + 00018F 5A [ 2] 317 decw x + 000190 318 00186$: + 000190 5F [ 1] 319 clrw x + 000191 A6 07 [ 1] 320 ld a, #0x07 + 000193 321 00187$: + 000193 90 58 [ 2] 322 sllw y + 000195 4A [ 1] 323 dec a + 000196 26 FB [ 1] 324 jrne 00187$ + 000198 9F [ 1] 325 ld a, xl + 000199 1A 16 [ 1] 326 or a, (0x16, sp) + 00019B 6B 12 [ 1] 327 ld (0x12, sp), a + 00019D 9E [ 1] 328 ld a, xh + 00019E 1A 15 [ 1] 329 or a, (0x15, sp) + 0001A0 6B 11 [ 1] 330 ld (0x11, sp), a + 0001A2 90 9F [ 1] 331 ld a, yl + 0001A4 1A 14 [ 1] 332 or a, (0x14, sp) + 0001A6 6B 10 [ 1] 333 ld (0x10, sp), a + 0001A8 90 9E [ 1] 334 ld a, yh + 0001AA 1A 13 [ 1] 335 or a, (0x13, sp) + 0001AC 16 19 [ 2] 336 ldw y, (0x19, sp) + 0001AE 17 15 [ 2] 337 ldw (0x15, sp), y + 0001B0 16 17 [ 2] 338 ldw y, (0x17, sp) + 0001B2 90 89 [ 2] 339 pushw y + 0001B4 1A 01 [ 1] 340 or a, (1, sp) + 0001B6 90 85 [ 2] 341 popw y + 0001B8 90 95 [ 1] 342 ld yh, a + 0001BA 7B 12 [ 1] 343 ld a, (0x12, sp) + 0001BC 1A 16 [ 1] 344 or a, (0x16, sp) + 0001BE 97 [ 1] 345 ld xl, a + 0001BF 7B 11 [ 1] 346 ld a, (0x11, sp) + 0001C1 1A 15 [ 1] 347 or a, (0x15, sp) + 0001C3 95 [ 1] 348 ld xh, a + 0001C4 90 89 [ 2] 349 pushw y + 0001C6 7B 12 [ 1] 350 ld a, (0x12, sp) + 0001C8 1A 02 [ 1] 351 or a, (2, sp) + 0001CA 90 85 [ 2] 352 popw y + 0001CC 90 97 [ 1] 353 ld yl, a + 0001CE 1F 03 [ 2] 354 ldw (0x03, sp), x + 0001D0 17 01 [ 2] 355 ldw (0x01, sp), y + 0001D2 356 00117$: + 357 ; ../_fsdiv.c: 346: return (fl1.f); + 0001D2 1E 03 [ 2] 358 ldw x, (0x03, sp) + 0001D4 16 01 [ 2] 359 ldw y, (0x01, sp) + 0001D6 360 00118$: + 361 ; ../_fsdiv.c: 347: } + 0001D6 5B 22 [ 2] 362 addw sp, #34 + 0001D8 81 [ 4] 363 ret + 364 ; ../_fsdiv.c: 349: float __fsdiv (float a1, float a2) + 365 ; ----------------------------------------- + 366 ; function __fsdiv + 367 ; ----------------------------------------- + 0001D9 368 ___fsdiv: + 0001D9 52 06 [ 2] 369 sub sp, #6 + 370 ; ../_fsdiv.c: 352: unsigned long *p = (unsigned long *) &f; + 0001DB 96 [ 1] 371 ldw x, sp + 0001DC 5C [ 1] 372 incw x + 0001DD 1F 05 [ 2] 373 ldw (0x05, sp), x + 374 ; ../_fsdiv.c: 354: if (a2 == 0.0f && a1 > 0.0f) + 0001DF 1E 0F [ 2] 375 ldw x, (0x0f, sp) + 0001E1 26 24 [ 1] 376 jrne 00110$ + 0001E3 1E 0D [ 2] 377 ldw x, (0x0d, sp) + 0001E5 58 [ 2] 378 sllw x + 0001E6 26 1F [ 1] 379 jrne 00110$ + 0001E8 1E 0B [ 2] 380 ldw x, (0x0b, sp) + 0001EA 89 [ 2] 381 pushw x + 0001EB 1E 0B [ 2] 382 ldw x, (0x0b, sp) + 0001ED 89 [ 2] 383 pushw x + 0001EE 5F [ 1] 384 clrw x + 0001EF 89 [ 2] 385 pushw x + 0001F0 5F [ 1] 386 clrw x + 0001F1 89 [ 2] 387 pushw x + 0001F2 CDr00r00 [ 4] 388 call ___fslt + 0001F5 5B 08 [ 2] 389 addw sp, #8 + 0001F7 4D [ 1] 390 tnz a + 0001F8 27 0D [ 1] 391 jreq 00110$ + 392 ; ../_fsdiv.c: 355: *p = 0x7f800000; // inf + 0001FA 1E 05 [ 2] 393 ldw x, (0x05, sp) + 0001FC 6F 03 [ 1] 394 clr (0x3, x) + 0001FE 6F 02 [ 1] 395 clr (0x2, x) + 000200 90 AE 7F 80 [ 2] 396 ldw y, #0x7f80 + 000204 FF [ 2] 397 ldw (x), y + 000205 20 5C [ 2] 398 jra 00111$ + 000207 399 00110$: + 400 ; ../_fsdiv.c: 356: else if (a2 == 0.0f && a1 < 0.0f) + 000207 1E 0F [ 2] 401 ldw x, (0x0f, sp) + 000209 26 24 [ 1] 402 jrne 00106$ + 00020B 1E 0D [ 2] 403 ldw x, (0x0d, sp) + 00020D 58 [ 2] 404 sllw x + 00020E 26 1F [ 1] 405 jrne 00106$ + 000210 5F [ 1] 406 clrw x + 000211 89 [ 2] 407 pushw x + 000212 5F [ 1] 408 clrw x + 000213 89 [ 2] 409 pushw x + 000214 1E 0F [ 2] 410 ldw x, (0x0f, sp) + 000216 89 [ 2] 411 pushw x + 000217 1E 0F [ 2] 412 ldw x, (0x0f, sp) + 000219 89 [ 2] 413 pushw x + 00021A CDr00r00 [ 4] 414 call ___fslt + 00021D 5B 08 [ 2] 415 addw sp, #8 + 00021F 4D [ 1] 416 tnz a + 000220 27 0D [ 1] 417 jreq 00106$ + 418 ; ../_fsdiv.c: 357: *p = 0xff800000; // -inf + 000222 1E 05 [ 2] 419 ldw x, (0x05, sp) + 000224 6F 03 [ 1] 420 clr (0x3, x) + 000226 6F 02 [ 1] 421 clr (0x2, x) + 000228 90 AE FF 80 [ 2] 422 ldw y, #0xff80 + 00022C FF [ 2] 423 ldw (x), y + 00022D 20 34 [ 2] 424 jra 00111$ + 00022F 425 00106$: + 426 ; ../_fsdiv.c: 358: else if (a2 == 0.0f && a1 == 0.0f) + 00022F 1E 0F [ 2] 427 ldw x, (0x0f, sp) + 000231 26 1B [ 1] 428 jrne 00102$ + 000233 1E 0D [ 2] 429 ldw x, (0x0d, sp) + 000235 58 [ 2] 430 sllw x + 000236 26 16 [ 1] 431 jrne 00102$ + 000238 1E 0B [ 2] 432 ldw x, (0x0b, sp) + 00023A 26 12 [ 1] 433 jrne 00102$ + 00023C 1E 09 [ 2] 434 ldw x, (0x09, sp) + 00023E 58 [ 2] 435 sllw x + 00023F 26 0D [ 1] 436 jrne 00102$ + 437 ; ../_fsdiv.c: 359: *p = 0xffc00000; // nan + 000241 1E 05 [ 2] 438 ldw x, (0x05, sp) + 000243 6F 03 [ 1] 439 clr (0x3, x) + 000245 6F 02 [ 1] 440 clr (0x2, x) + 000247 90 AE FF C0 [ 2] 441 ldw y, #0xffc0 + 00024B FF [ 2] 442 ldw (x), y + 00024C 20 15 [ 2] 443 jra 00111$ + 00024E 444 00102$: + 445 ; ../_fsdiv.c: 361: f = __fsdiv_org (a1, a2); + 00024E 1E 0F [ 2] 446 ldw x, (0x0f, sp) + 000250 89 [ 2] 447 pushw x + 000251 1E 0F [ 2] 448 ldw x, (0x0f, sp) + 000253 89 [ 2] 449 pushw x + 000254 1E 0F [ 2] 450 ldw x, (0x0f, sp) + 000256 89 [ 2] 451 pushw x + 000257 1E 0F [ 2] 452 ldw x, (0x0f, sp) + 000259 89 [ 2] 453 pushw x + 00025A CDr00r00 [ 4] 454 call ___fsdiv_org + 00025D 5B 08 [ 2] 455 addw sp, #8 + 00025F 1F 03 [ 2] 456 ldw (0x03, sp), x + 000261 17 01 [ 2] 457 ldw (0x01, sp), y + 000263 458 00111$: + 459 ; ../_fsdiv.c: 363: return f; + 000263 1E 03 [ 2] 460 ldw x, (0x03, sp) + 000265 16 01 [ 2] 461 ldw y, (0x01, sp) + 462 ; ../_fsdiv.c: 364: } + 000267 5B 06 [ 2] 463 addw sp, #6 + 000269 81 [ 4] 464 ret + 465 .area CODE + 466 .area CONST + 467 .area INITIALIZER + 468 .area CABS (ABS) diff --git a/device/lib/stm8/_fsdiv.rel b/device/lib/stm8/_fsdiv.rel new file mode 100644 index 0000000..d5845dd --- /dev/null +++ b/device/lib/stm8/_fsdiv.rel @@ -0,0 +1,184 @@ +XH3 +H B areas 3 global symbols +M _fsdiv +O -mstm8 +S ___fslt Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 26A flags 0 addr 0 +S ___fsdiv Def0001D9 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 22 16 27 17 03 16 25 17 01 16 2B 17 +R 00 00 00 09 +T 00 00 0D 07 16 29 17 05 1E 01 A6 80 62 4F 95 1F +R 00 00 00 09 +T 00 00 1A 0D 1E 05 A6 80 62 9F 6B 16 0F 15 1E 0D +R 00 00 00 09 +T 00 00 27 72 F0 15 1F 0D 1C 00 7E 1F 0D 1E 01 58 +R 00 00 00 09 +T 00 00 34 4F 49 6B 16 1E 05 58 4F 49 18 16 6B 14 +R 00 00 00 09 +T 00 00 41 16 07 17 12 16 05 17 10 1E 12 26 12 1E +R 00 00 00 09 +T 00 00 4E 10 26 0E 1F 07 AE 7F C0 1F 05 1E 07 16 +R 00 00 00 09 +T 00 00 5B 05 CC 01 D6 +R 00 00 00 09 00 05 00 09 +T 00 00 5F +R 00 00 00 09 +T 00 00 5F 1E 03 16 01 5D 26 0A 90 5D 26 06 5F 90 +R 00 00 00 09 +T 00 00 6C 5F CC 01 D6 +R 00 00 00 09 00 05 00 09 +T 00 00 70 +R 00 00 00 09 +T 00 00 70 16 03 1E 01 9F A4 7F 97 4F 01 AA 80 97 +R 00 00 00 09 +T 00 00 7D 17 21 1F 1F 16 07 1E 05 9F A4 7F 97 4F +R 00 00 00 09 +T 00 00 8A 01 AA 80 97 17 0B 1F 09 1E 21 13 0B 7B +R 00 00 00 09 +T 00 00 97 20 12 0A 7B 1F 12 09 2E 0F 08 22 09 21 +R 00 00 00 09 +T 00 00 A4 09 20 09 1F 1E 0D 5A 1F 15 1F 0D +R 00 00 00 09 +T 00 00 AF +R 00 00 00 09 +T 00 00 AF 5F 1F 1D AE 01 00 1F 1B 5F 1F 19 1F 17 +R 00 00 00 09 +T 00 00 BC +R 00 00 00 09 +T 00 00 BC 1E 1D 26 04 1E 1B 27 4C +R 00 00 00 09 +T 00 00 C4 +R 00 00 00 09 +T 00 00 C4 1E 21 13 0B 7B 20 12 0A 7B 1F 12 09 2F +R 00 00 00 09 +T 00 00 D1 2C 1E 19 16 17 9F 1A 1E 02 1A 1D 95 90 +R 00 00 00 09 +T 00 00 DE 9F 1A 1C 90 02 1A 1B 90 95 1F 19 17 17 +R 00 00 00 09 +T 00 00 EB 16 21 72 F2 0B 7B 20 12 0A 97 7B 1F 12 +R 00 00 00 09 +T 00 00 F8 09 95 17 21 1F 1F +R 00 00 00 09 +T 00 00 FE +R 00 00 00 09 +T 00 00 FE 08 22 09 21 09 20 09 1F 04 1B 06 1C 06 +R 00 00 00 09 +T 00 01 0B 1D 06 1E 20 AC +R 00 00 00 09 +T 00 01 10 +R 00 00 00 09 +T 00 01 10 1E 19 1C 00 01 16 17 24 02 90 5C +R 00 00 00 09 +T 00 01 1B +R 00 00 00 09 +T 00 01 1B 1F 19 17 17 1E 0D 5C 1F 0D 07 17 06 18 +R 00 00 00 09 +T 00 01 28 06 19 06 1A 16 19 7B 18 A4 7F 97 7B 17 +R 00 00 00 09 +T 00 01 35 95 17 19 1F 17 1E 0D A3 01 00 2F 29 0D +R 00 00 00 09 +T 00 01 42 14 27 09 5F 1F 15 0F 14 A6 80 20 06 +R 00 00 00 09 +T 00 01 4E +R 00 00 00 09 +T 00 01 4E 5F 1F 15 0F 14 4F +R 00 00 00 09 +T 00 01 54 +R 00 00 00 09 +T 00 01 54 AA 7F 90 95 7B 16 97 7B 15 95 7B 14 AA +R 00 00 00 09 +T 00 01 61 80 90 97 1F 03 17 01 20 68 +R 00 00 00 09 +T 00 01 6A +R 00 00 00 09 +T 00 01 6A 0D 0D 2A 07 5F 1F 03 1F 01 20 5D +R 00 00 00 09 +T 00 01 75 +R 00 00 00 09 +T 00 01 75 0D 14 27 0A 5F 1F 15 AE 80 00 1F 13 20 +R 00 00 00 09 +T 00 01 82 05 +R 00 00 00 09 +T 00 01 83 +R 00 00 00 09 +T 00 01 83 5F 1F 15 1F 13 +R 00 00 00 09 +T 00 01 88 +R 00 00 00 09 +T 00 01 88 16 0D 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 01 90 +R 00 00 00 09 +T 00 01 90 5F A6 07 +R 00 00 00 09 +T 00 01 93 +R 00 00 00 09 +T 00 01 93 90 58 4A 26 FB 9F 1A 16 6B 12 9E 1A 15 +R 00 00 00 09 +T 00 01 A0 6B 11 90 9F 1A 14 6B 10 90 9E 1A 13 16 +R 00 00 00 09 +T 00 01 AD 19 17 15 16 17 90 89 1A 01 90 85 90 95 +R 00 00 00 09 +T 00 01 BA 7B 12 1A 16 97 7B 11 1A 15 95 90 89 7B +R 00 00 00 09 +T 00 01 C7 12 1A 02 90 85 90 97 1F 03 17 01 +R 00 00 00 09 +T 00 01 D2 +R 00 00 00 09 +T 00 01 D2 1E 03 16 01 +R 00 00 00 09 +T 00 01 D6 +R 00 00 00 09 +T 00 01 D6 5B 22 81 +R 00 00 00 09 +T 00 01 D9 +R 00 00 00 09 +T 00 01 D9 52 06 96 5C 1F 05 1E 0F 26 24 1E 0D 58 +R 00 00 00 09 +T 00 01 E6 26 1F 1E 0B 89 1E 0B 89 5F 89 5F 89 CD +R 00 00 00 09 +T 00 01 F3 00 00 5B 08 4D 27 0D 1E 05 6F 03 6F 02 +R 00 00 00 09 02 03 00 00 +T 00 02 00 90 AE 7F 80 FF 20 5C +R 00 00 00 09 +T 00 02 07 +R 00 00 00 09 +T 00 02 07 1E 0F 26 24 1E 0D 58 26 1F 5F 89 5F 89 +R 00 00 00 09 +T 00 02 14 1E 0F 89 1E 0F 89 CD 00 00 5B 08 4D 27 +R 00 00 00 09 02 0A 00 00 +T 00 02 21 0D 1E 05 6F 03 6F 02 90 AE FF 80 FF 20 +R 00 00 00 09 +T 00 02 2E 34 +R 00 00 00 09 +T 00 02 2F +R 00 00 00 09 +T 00 02 2F 1E 0F 26 1B 1E 0D 58 26 16 1E 0B 26 12 +R 00 00 00 09 +T 00 02 3C 1E 09 58 26 0D 1E 05 6F 03 6F 02 90 AE +R 00 00 00 09 +T 00 02 49 FF C0 FF 20 15 +R 00 00 00 09 +T 00 02 4E +R 00 00 00 09 +T 00 02 4E 1E 0F 89 1E 0F 89 1E 0F 89 1E 0F 89 CD +R 00 00 00 09 +T 00 02 5B 00 00 5B 08 1F 03 17 01 +R 00 00 00 09 00 03 00 09 +T 00 02 63 +R 00 00 00 09 +T 00 02 63 1E 03 16 01 5B 06 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fsdiv.sym b/device/lib/stm8/_fsdiv.sym new file mode 100644 index 0000000..8dc2add --- /dev/null +++ b/device/lib/stm8/_fsdiv.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fsdiv 0001D9 GR + 9 ___fsdiv_org 000000 R + ___fslt ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 26A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fseq.asm b/device/lib/stm8/_fseq.asm new file mode 100644 index 0000000..9d8cea4 --- /dev/null +++ b/device/lib/stm8/_fseq.asm @@ -0,0 +1,118 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fseq + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fseq +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fseq.c: 83: __fseq (float a1, float a2) +; ----------------------------------------- +; function __fseq +; ----------------------------------------- +___fseq: + sub sp, #16 +; ../_fseq.c: 87: fl1.f = a1; + ldw y, (0x15, sp) + ldw (0x03, sp), y + ldw y, (0x13, sp) + ldw (0x01, sp), y +; ../_fseq.c: 88: fl2.f = a2; + ldw y, (0x19, sp) + ldw (0x07, sp), y + ldw y, (0x17, sp) + ldw (0x05, sp), y +; ../_fseq.c: 90: if (fl1.l == fl2.l) + ldw y, (0x03, sp) + ldw (0x0b, sp), y + ldw y, (0x01, sp) + ldw (0x09, sp), y + ldw y, (0x07, sp) + ldw (0x0f, sp), y + ldw y, (0x05, sp) + ldw x, (0x0b, sp) + cpw x, (0x0f, sp) + jrne 00102$ + ldw x, y + cpw x, (0x09, sp) + jrne 00102$ +; ../_fseq.c: 91: return (1); + ld a, #0x01 + jra 00105$ +00102$: +; ../_fseq.c: 92: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0) + ldw y, (0x03, sp) + ldw (0x0f, sp), y + ldw y, (0x01, sp) + ldw (0x0d, sp), y + ldw x, (0x07, sp) + ldw y, (0x05, sp) + ld a, xl + or a, (0x10, sp) + rlwa x + or a, (0x0f, sp) + ld xh, a + ld a, yl + or a, (0x0e, sp) + rlwa y + or a, (0x0d, sp) + and a, #0x7f + ld yh, a + tnzw x + jrne 00104$ + tnzw y + jrne 00104$ +; ../_fseq.c: 93: return (1); + ld a, #0x01 +; ../_fseq.c: 94: return (0); + .byte 0x21 +00104$: + clr a +00105$: +; ../_fseq.c: 95: } + addw sp, #16 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fseq.lst b/device/lib/stm8/_fseq.lst new file mode 100644 index 0000000..32c04fb --- /dev/null +++ b/device/lib/stm8/_fseq.lst @@ -0,0 +1,118 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fseq + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fseq + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_fseq.c: 83: __fseq (float a1, float a2) + 50 ; ----------------------------------------- + 51 ; function __fseq + 52 ; ----------------------------------------- + 000000 53 ___fseq: + 000000 52 10 [ 2] 54 sub sp, #16 + 55 ; ../_fseq.c: 87: fl1.f = a1; + 000002 16 15 [ 2] 56 ldw y, (0x15, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 13 [ 2] 58 ldw y, (0x13, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fseq.c: 88: fl2.f = a2; + 00000A 16 19 [ 2] 61 ldw y, (0x19, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 17 [ 2] 63 ldw y, (0x17, sp) + 000010 17 05 [ 2] 64 ldw (0x05, sp), y + 65 ; ../_fseq.c: 90: if (fl1.l == fl2.l) + 000012 16 03 [ 2] 66 ldw y, (0x03, sp) + 000014 17 0B [ 2] 67 ldw (0x0b, sp), y + 000016 16 01 [ 2] 68 ldw y, (0x01, sp) + 000018 17 09 [ 2] 69 ldw (0x09, sp), y + 00001A 16 07 [ 2] 70 ldw y, (0x07, sp) + 00001C 17 0F [ 2] 71 ldw (0x0f, sp), y + 00001E 16 05 [ 2] 72 ldw y, (0x05, sp) + 000020 1E 0B [ 2] 73 ldw x, (0x0b, sp) + 000022 13 0F [ 2] 74 cpw x, (0x0f, sp) + 000024 26 09 [ 1] 75 jrne 00102$ + 000026 93 [ 1] 76 ldw x, y + 000027 13 09 [ 2] 77 cpw x, (0x09, sp) + 000029 26 04 [ 1] 78 jrne 00102$ + 79 ; ../_fseq.c: 91: return (1); + 00002B A6 01 [ 1] 80 ld a, #0x01 + 00002D 20 2A [ 2] 81 jra 00105$ + 00002F 82 00102$: + 83 ; ../_fseq.c: 92: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0) + 00002F 16 03 [ 2] 84 ldw y, (0x03, sp) + 000031 17 0F [ 2] 85 ldw (0x0f, sp), y + 000033 16 01 [ 2] 86 ldw y, (0x01, sp) + 000035 17 0D [ 2] 87 ldw (0x0d, sp), y + 000037 1E 07 [ 2] 88 ldw x, (0x07, sp) + 000039 16 05 [ 2] 89 ldw y, (0x05, sp) + 00003B 9F [ 1] 90 ld a, xl + 00003C 1A 10 [ 1] 91 or a, (0x10, sp) + 00003E 02 [ 1] 92 rlwa x + 00003F 1A 0F [ 1] 93 or a, (0x0f, sp) + 000041 95 [ 1] 94 ld xh, a + 000042 90 9F [ 1] 95 ld a, yl + 000044 1A 0E [ 1] 96 or a, (0x0e, sp) + 000046 90 02 [ 1] 97 rlwa y + 000048 1A 0D [ 1] 98 or a, (0x0d, sp) + 00004A A4 7F [ 1] 99 and a, #0x7f + 00004C 90 95 [ 1] 100 ld yh, a + 00004E 5D [ 2] 101 tnzw x + 00004F 26 07 [ 1] 102 jrne 00104$ + 000051 90 5D [ 2] 103 tnzw y + 000053 26 03 [ 1] 104 jrne 00104$ + 105 ; ../_fseq.c: 93: return (1); + 000055 A6 01 [ 1] 106 ld a, #0x01 + 107 ; ../_fseq.c: 94: return (0); + 000057 21 108 .byte 0x21 + 000058 109 00104$: + 000058 4F [ 1] 110 clr a + 000059 111 00105$: + 112 ; ../_fseq.c: 95: } + 000059 5B 10 [ 2] 113 addw sp, #16 + 00005B 81 [ 4] 114 ret + 115 .area CODE + 116 .area CONST + 117 .area INITIALIZER + 118 .area CABS (ABS) diff --git a/device/lib/stm8/_fseq.rel b/device/lib/stm8/_fseq.rel new file mode 100644 index 0000000..bb0efbc --- /dev/null +++ b/device/lib/stm8/_fseq.rel @@ -0,0 +1,45 @@ +XH3 +H B areas 2 global symbols +M _fseq +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 5C flags 0 addr 0 +S ___fseq Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 10 16 15 17 03 16 13 17 01 16 19 17 +R 00 00 00 09 +T 00 00 0D 07 16 17 17 05 16 03 17 0B 16 01 17 09 +R 00 00 00 09 +T 00 00 1A 16 07 17 0F 16 05 1E 0B 13 0F 26 09 93 +R 00 00 00 09 +T 00 00 27 13 09 26 04 A6 01 20 2A +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 16 03 17 0F 16 01 17 0D 1E 07 16 05 9F +R 00 00 00 09 +T 00 00 3C 1A 10 02 1A 0F 95 90 9F 1A 0E 90 02 1A +R 00 00 00 09 +T 00 00 49 0D A4 7F 90 95 5D 26 07 90 5D 26 03 A6 +R 00 00 00 09 +T 00 00 56 01 21 +R 00 00 00 09 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 4F +R 00 00 00 09 +T 00 00 59 +R 00 00 00 09 +T 00 00 59 5B 10 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fseq.sym b/device/lib/stm8/_fseq.sym new file mode 100644 index 0000000..1a8dd70 --- /dev/null +++ b/device/lib/stm8/_fseq.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fseq 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 5C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fslt.asm b/device/lib/stm8/_fslt.asm new file mode 100644 index 0000000..d0d2c28 --- /dev/null +++ b/device/lib/stm8/_fslt.asm @@ -0,0 +1,163 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fslt + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fslt +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fslt.c: 108: char __fslt (float a1, float a2) +; ----------------------------------------- +; function __fslt +; ----------------------------------------- +___fslt: + sub sp, #16 +; ../_fslt.c: 112: fl1.f = a1; + ldw y, (0x15, sp) + ldw (0x03, sp), y + ldw y, (0x13, sp) + ldw (0x01, sp), y +; ../_fslt.c: 113: fl2.f = a2; + ldw y, (0x19, sp) + ldw (0x07, sp), y + ldw y, (0x17, sp) + ldw (0x05, sp), y +; ../_fslt.c: 115: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0) + ldw y, (0x03, sp) + ldw (0x0f, sp), y + ldw y, (0x01, sp) + ldw (0x0d, sp), y + ldw x, (0x07, sp) + ldw y, (0x05, sp) + ld a, xl + or a, (0x10, sp) + ld (0x0c, sp), a + ld a, xh + or a, (0x0f, sp) + ld (0x0b, sp), a + ld a, yl + or a, (0x0e, sp) + ld (0x0a, sp), a + ld a, yh + or a, (0x0d, sp) + and a, #0x7f + ld (0x0d, sp), a + ldw y, (0x0b, sp) + ldw (0x0f, sp), y + ld a, (0x0a, sp) + ld (0x0e, sp), a + ldw x, (0x0f, sp) + jrne 00102$ + ldw x, (0x0d, sp) + jrne 00102$ +; ../_fslt.c: 116: return (0); + clr a + jra 00110$ +00102$: +; ../_fslt.c: 118: if (fl1.l<0 && fl2.l<0) { + ldw y, (0x03, sp) + ldw (0x0f, sp), y + ldw y, (0x01, sp) + ldw (0x0d, sp), y + tnz (0x0d, sp) + jrpl 00106$ + ldw y, (0x07, sp) + ldw (0x0f, sp), y + ldw y, (0x05, sp) + ldw (0x0d, sp), y + tnz (0x0d, sp) + jrpl 00106$ +; ../_fslt.c: 119: if (fl2.l < fl1.l) + ldw y, (0x07, sp) + ldw (0x0b, sp), y + ldw y, (0x05, sp) + ldw (0x09, sp), y + ldw y, (0x03, sp) + ldw (0x0f, sp), y + ldw y, (0x01, sp) + ldw (0x0d, sp), y + ldw x, (0x0b, sp) + cpw x, (0x0f, sp) + ld a, (0x0a, sp) + sbc a, (0x0e, sp) + ld a, (0x09, sp) + sbc a, (0x0d, sp) + jrsge 00104$ +; ../_fslt.c: 120: return (1); + ld a, #0x01 + jra 00110$ +00104$: +; ../_fslt.c: 121: return (0); + clr a + jra 00110$ +00106$: +; ../_fslt.c: 124: if (fl1.l < fl2.l) + ldw y, (0x03, sp) + ldw (0x0b, sp), y + ldw y, (0x01, sp) + ldw (0x09, sp), y + ldw y, (0x07, sp) + ldw (0x0f, sp), y + ldw y, (0x05, sp) + ldw (0x0d, sp), y + ldw x, (0x0b, sp) + cpw x, (0x0f, sp) + ld a, (0x0a, sp) + sbc a, (0x0e, sp) + ld a, (0x09, sp) + sbc a, (0x0d, sp) + jrsge 00109$ +; ../_fslt.c: 125: return (1); + ld a, #0x01 +; ../_fslt.c: 126: return (0); + .byte 0x21 +00109$: + clr a +00110$: +; ../_fslt.c: 127: } + addw sp, #16 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fslt.lst b/device/lib/stm8/_fslt.lst new file mode 100644 index 0000000..73ca287 --- /dev/null +++ b/device/lib/stm8/_fslt.lst @@ -0,0 +1,163 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fslt + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fslt + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_fslt.c: 108: char __fslt (float a1, float a2) + 50 ; ----------------------------------------- + 51 ; function __fslt + 52 ; ----------------------------------------- + 000000 53 ___fslt: + 000000 52 10 [ 2] 54 sub sp, #16 + 55 ; ../_fslt.c: 112: fl1.f = a1; + 000002 16 15 [ 2] 56 ldw y, (0x15, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 13 [ 2] 58 ldw y, (0x13, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fslt.c: 113: fl2.f = a2; + 00000A 16 19 [ 2] 61 ldw y, (0x19, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 17 [ 2] 63 ldw y, (0x17, sp) + 000010 17 05 [ 2] 64 ldw (0x05, sp), y + 65 ; ../_fslt.c: 115: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0) + 000012 16 03 [ 2] 66 ldw y, (0x03, sp) + 000014 17 0F [ 2] 67 ldw (0x0f, sp), y + 000016 16 01 [ 2] 68 ldw y, (0x01, sp) + 000018 17 0D [ 2] 69 ldw (0x0d, sp), y + 00001A 1E 07 [ 2] 70 ldw x, (0x07, sp) + 00001C 16 05 [ 2] 71 ldw y, (0x05, sp) + 00001E 9F [ 1] 72 ld a, xl + 00001F 1A 10 [ 1] 73 or a, (0x10, sp) + 000021 6B 0C [ 1] 74 ld (0x0c, sp), a + 000023 9E [ 1] 75 ld a, xh + 000024 1A 0F [ 1] 76 or a, (0x0f, sp) + 000026 6B 0B [ 1] 77 ld (0x0b, sp), a + 000028 90 9F [ 1] 78 ld a, yl + 00002A 1A 0E [ 1] 79 or a, (0x0e, sp) + 00002C 6B 0A [ 1] 80 ld (0x0a, sp), a + 00002E 90 9E [ 1] 81 ld a, yh + 000030 1A 0D [ 1] 82 or a, (0x0d, sp) + 000032 A4 7F [ 1] 83 and a, #0x7f + 000034 6B 0D [ 1] 84 ld (0x0d, sp), a + 000036 16 0B [ 2] 85 ldw y, (0x0b, sp) + 000038 17 0F [ 2] 86 ldw (0x0f, sp), y + 00003A 7B 0A [ 1] 87 ld a, (0x0a, sp) + 00003C 6B 0E [ 1] 88 ld (0x0e, sp), a + 00003E 1E 0F [ 2] 89 ldw x, (0x0f, sp) + 000040 26 07 [ 1] 90 jrne 00102$ + 000042 1E 0D [ 2] 91 ldw x, (0x0d, sp) + 000044 26 03 [ 1] 92 jrne 00102$ + 93 ; ../_fslt.c: 116: return (0); + 000046 4F [ 1] 94 clr a + 000047 20 5F [ 2] 95 jra 00110$ + 000049 96 00102$: + 97 ; ../_fslt.c: 118: if (fl1.l<0 && fl2.l<0) { + 000049 16 03 [ 2] 98 ldw y, (0x03, sp) + 00004B 17 0F [ 2] 99 ldw (0x0f, sp), y + 00004D 16 01 [ 2] 100 ldw y, (0x01, sp) + 00004F 17 0D [ 2] 101 ldw (0x0d, sp), y + 000051 0D 0D [ 1] 102 tnz (0x0d, sp) + 000053 2A 31 [ 1] 103 jrpl 00106$ + 000055 16 07 [ 2] 104 ldw y, (0x07, sp) + 000057 17 0F [ 2] 105 ldw (0x0f, sp), y + 000059 16 05 [ 2] 106 ldw y, (0x05, sp) + 00005B 17 0D [ 2] 107 ldw (0x0d, sp), y + 00005D 0D 0D [ 1] 108 tnz (0x0d, sp) + 00005F 2A 25 [ 1] 109 jrpl 00106$ + 110 ; ../_fslt.c: 119: if (fl2.l < fl1.l) + 000061 16 07 [ 2] 111 ldw y, (0x07, sp) + 000063 17 0B [ 2] 112 ldw (0x0b, sp), y + 000065 16 05 [ 2] 113 ldw y, (0x05, sp) + 000067 17 09 [ 2] 114 ldw (0x09, sp), y + 000069 16 03 [ 2] 115 ldw y, (0x03, sp) + 00006B 17 0F [ 2] 116 ldw (0x0f, sp), y + 00006D 16 01 [ 2] 117 ldw y, (0x01, sp) + 00006F 17 0D [ 2] 118 ldw (0x0d, sp), y + 000071 1E 0B [ 2] 119 ldw x, (0x0b, sp) + 000073 13 0F [ 2] 120 cpw x, (0x0f, sp) + 000075 7B 0A [ 1] 121 ld a, (0x0a, sp) + 000077 12 0E [ 1] 122 sbc a, (0x0e, sp) + 000079 7B 09 [ 1] 123 ld a, (0x09, sp) + 00007B 12 0D [ 1] 124 sbc a, (0x0d, sp) + 00007D 2E 04 [ 1] 125 jrsge 00104$ + 126 ; ../_fslt.c: 120: return (1); + 00007F A6 01 [ 1] 127 ld a, #0x01 + 000081 20 25 [ 2] 128 jra 00110$ + 000083 129 00104$: + 130 ; ../_fslt.c: 121: return (0); + 000083 4F [ 1] 131 clr a + 000084 20 22 [ 2] 132 jra 00110$ + 000086 133 00106$: + 134 ; ../_fslt.c: 124: if (fl1.l < fl2.l) + 000086 16 03 [ 2] 135 ldw y, (0x03, sp) + 000088 17 0B [ 2] 136 ldw (0x0b, sp), y + 00008A 16 01 [ 2] 137 ldw y, (0x01, sp) + 00008C 17 09 [ 2] 138 ldw (0x09, sp), y + 00008E 16 07 [ 2] 139 ldw y, (0x07, sp) + 000090 17 0F [ 2] 140 ldw (0x0f, sp), y + 000092 16 05 [ 2] 141 ldw y, (0x05, sp) + 000094 17 0D [ 2] 142 ldw (0x0d, sp), y + 000096 1E 0B [ 2] 143 ldw x, (0x0b, sp) + 000098 13 0F [ 2] 144 cpw x, (0x0f, sp) + 00009A 7B 0A [ 1] 145 ld a, (0x0a, sp) + 00009C 12 0E [ 1] 146 sbc a, (0x0e, sp) + 00009E 7B 09 [ 1] 147 ld a, (0x09, sp) + 0000A0 12 0D [ 1] 148 sbc a, (0x0d, sp) + 0000A2 2E 03 [ 1] 149 jrsge 00109$ + 150 ; ../_fslt.c: 125: return (1); + 0000A4 A6 01 [ 1] 151 ld a, #0x01 + 152 ; ../_fslt.c: 126: return (0); + 0000A6 21 153 .byte 0x21 + 0000A7 154 00109$: + 0000A7 4F [ 1] 155 clr a + 0000A8 156 00110$: + 157 ; ../_fslt.c: 127: } + 0000A8 5B 10 [ 2] 158 addw sp, #16 + 0000AA 81 [ 4] 159 ret + 160 .area CODE + 161 .area CONST + 162 .area INITIALIZER + 163 .area CABS (ABS) diff --git a/device/lib/stm8/_fslt.rel b/device/lib/stm8/_fslt.rel new file mode 100644 index 0000000..5f4219f --- /dev/null +++ b/device/lib/stm8/_fslt.rel @@ -0,0 +1,63 @@ +XH3 +H B areas 2 global symbols +M _fslt +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size AB flags 0 addr 0 +S ___fslt Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 10 16 15 17 03 16 13 17 01 16 19 17 +R 00 00 00 09 +T 00 00 0D 07 16 17 17 05 16 03 17 0F 16 01 17 0D +R 00 00 00 09 +T 00 00 1A 1E 07 16 05 9F 1A 10 6B 0C 9E 1A 0F 6B +R 00 00 00 09 +T 00 00 27 0B 90 9F 1A 0E 6B 0A 90 9E 1A 0D A4 7F +R 00 00 00 09 +T 00 00 34 6B 0D 16 0B 17 0F 7B 0A 6B 0E 1E 0F 26 +R 00 00 00 09 +T 00 00 41 07 1E 0D 26 03 4F 20 5F +R 00 00 00 09 +T 00 00 49 +R 00 00 00 09 +T 00 00 49 16 03 17 0F 16 01 17 0D 0D 0D 2A 31 16 +R 00 00 00 09 +T 00 00 56 07 17 0F 16 05 17 0D 0D 0D 2A 25 16 07 +R 00 00 00 09 +T 00 00 63 17 0B 16 05 17 09 16 03 17 0F 16 01 17 +R 00 00 00 09 +T 00 00 70 0D 1E 0B 13 0F 7B 0A 12 0E 7B 09 12 0D +R 00 00 00 09 +T 00 00 7D 2E 04 A6 01 20 25 +R 00 00 00 09 +T 00 00 83 +R 00 00 00 09 +T 00 00 83 4F 20 22 +R 00 00 00 09 +T 00 00 86 +R 00 00 00 09 +T 00 00 86 16 03 17 0B 16 01 17 09 16 07 17 0F 16 +R 00 00 00 09 +T 00 00 93 05 17 0D 1E 0B 13 0F 7B 0A 12 0E 7B 09 +R 00 00 00 09 +T 00 00 A0 12 0D 2E 03 A6 01 21 +R 00 00 00 09 +T 00 00 A7 +R 00 00 00 09 +T 00 00 A7 4F +R 00 00 00 09 +T 00 00 A8 +R 00 00 00 09 +T 00 00 A8 5B 10 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fslt.sym b/device/lib/stm8/_fslt.sym new file mode 100644 index 0000000..b090281 --- /dev/null +++ b/device/lib/stm8/_fslt.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fslt 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size AB flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fsmul.asm b/device/lib/stm8/_fsmul.asm new file mode 100644 index 0000000..5d7f125 --- /dev/null +++ b/device/lib/stm8/_fsmul.asm @@ -0,0 +1,391 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fsmul + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fsmul +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fsmul.c: 241: float __fsmul (float a1, float a2) { +; ----------------------------------------- +; function __fsmul +; ----------------------------------------- +___fsmul: + sub sp, #21 +; ../_fsmul.c: 247: fl1.f = a1; + ldw y, (0x1a, sp) + ldw (0x03, sp), y + ldw y, (0x18, sp) + ldw (0x01, sp), y +; ../_fsmul.c: 248: fl2.f = a2; + ldw y, (0x1e, sp) + ldw (0x07, sp), y + ldw y, (0x1c, sp) + ldw (0x05, sp), y +; ../_fsmul.c: 250: if (!fl1.l || !fl2.l) + ldw y, (0x03, sp) + ldw (0x14, sp), y + ldw y, (0x01, sp) + ldw (0x12, sp), y + ldw x, (0x14, sp) + jrne 00149$ + ldw x, (0x12, sp) + jreq 00101$ +00149$: + ldw x, (0x07, sp) + ldw y, (0x05, sp) + tnzw x + jrne 00102$ + tnzw y + jrne 00102$ +00101$: +; ../_fsmul.c: 251: return (0); + clrw x + clrw y + jp 00113$ +00102$: +; ../_fsmul.c: 254: sign = SIGN (fl1.l) ^ SIGN (fl2.l); + ldw x, (0x01, sp) + sllw x + clr a + rlc a + ld (0x15, sp), a + ldw x, (0x05, sp) + sllw x + clr a + rlc a + xor a, (0x15, sp) + ld (0x0d, sp), a +; ../_fsmul.c: 255: exp = EXP (fl1.l) - EXCESS; + ldw x, (0x01, sp) + ld a, #0x80 + div x, a + clr a + ld xh, a + subw x, #0x007e + ldw (0x14, sp), x +; ../_fsmul.c: 256: exp += EXP (fl2.l); + ldw x, (0x05, sp) + ld a, #0x80 + div x, a + clr a + ld xh, a + addw x, (0x14, sp) + ldw (0x0e, sp), x +; ../_fsmul.c: 258: fl1.l = MANT (fl1.l); + ldw y, (0x03, sp) + ldw x, (0x01, sp) + ld a, xl + and a, #0x7f + ld xl, a + clr a + rrwa x + or a, #0x80 + ld xl, a + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../_fsmul.c: 259: fl2.l = MANT (fl2.l); + ldw y, (0x07, sp) + ldw x, (0x05, sp) + ld a, xl + and a, #0x7f + ld xl, a + clr a + rrwa x + or a, #0x80 + ld xl, a + ldw (0x07, sp), y + ldw (0x05, sp), x +; ../_fsmul.c: 262: result = (unsigned long)((unsigned short)(fl1.l >> 8)) * (unsigned short)(fl2.l >> 8); + ldw y, (0x03, sp) + ldw x, (0x01, sp) + ld a, xl + rlwa y + ld (0x11, sp), a + rrwa y + ld (0x10, sp), a + ldw x, (0x07, sp) + ldw (0x14, sp), x + ldw x, (0x05, sp) + ld a, (0x14, sp) + ld (0x15, sp), a + ldw (0x13, sp), x + clr (0x12, sp) + ld a, (0x15, sp) + rlwa x + ld a, (0x14, sp) + rrwa x + ld xl, a + pushw x + ldw x, (0x12, sp) + pushw x + call ___muluint2ulong + addw sp, #4 + ldw (0x0b, sp), x + ldw (0x09, sp), y +; ../_fsmul.c: 263: result += ((unsigned long)((unsigned short)(fl1.l & 0xff)) * (unsigned short)(fl2.l >> 8)) >> 8; + ldw y, (0x03, sp) + clr a + ld yh, a + ldw x, (0x07, sp) + ldw (0x14, sp), x + ldw x, (0x05, sp) + ld a, (0x14, sp) + ld (0x15, sp), a + ldw (0x13, sp), x + clr (0x12, sp) + ld a, (0x15, sp) + rlwa x + ld a, (0x14, sp) + rrwa x + ld xl, a + pushw x + pushw y + call ___muluint2ulong + addw sp, #4 + ld a, xh + ld (0x15, sp), a + ldw (0x13, sp), y + clr (0x12, sp) + ldw x, (0x0b, sp) + addw x, (0x14, sp) + ldw y, (0x09, sp) + jrnc 00152$ + incw y +00152$: + addw y, (0x12, sp) + ldw (0x0b, sp), x + ldw (0x09, sp), y +; ../_fsmul.c: 264: result += ((unsigned long)((unsigned short)(fl2.l & 0xff)) * (unsigned short)(fl1.l >> 8)) >> 8; + ldw y, (0x07, sp) + clr a + ld yh, a + ldw x, (0x03, sp) + ldw (0x14, sp), x + ldw x, (0x01, sp) + ld a, (0x14, sp) + ld (0x15, sp), a + ldw (0x13, sp), x + clr (0x12, sp) + ld a, (0x15, sp) + rlwa x + ld a, (0x14, sp) + rrwa x + ld xl, a + pushw x + pushw y + call ___muluint2ulong + addw sp, #4 + ld a, xh + ld (0x15, sp), a + ldw (0x13, sp), y + clr (0x12, sp) + ldw x, (0x0b, sp) + addw x, (0x14, sp) + ldw y, (0x09, sp) + jrnc 00153$ + incw y +00153$: + addw y, (0x12, sp) + ldw (0x0b, sp), x + ldw (0x09, sp), y +; ../_fsmul.c: 267: result += 0x40; + ldw x, (0x0b, sp) + addw x, #0x0040 + ldw y, (0x09, sp) + jrnc 00154$ + incw y +00154$: + ldw (0x0b, sp), x + ldw (0x09, sp), y +; ../_fsmul.c: 269: if (result & SIGNBIT) + tnz (0x09, sp) + jrpl 00105$ +; ../_fsmul.c: 272: result += 0x40; + ldw x, (0x0b, sp) + addw x, #0x0040 + ldw y, (0x09, sp) + jrnc 00156$ + incw y +00156$: + ldw (0x0b, sp), x + ldw (0x09, sp), y +; ../_fsmul.c: 273: result >>= 8; + ldw y, (0x0a, sp) + ld a, (0x09, sp) + ld xl, a + clr a + ld xh, a + ldw (0x0b, sp), y + ldw (0x09, sp), x + jra 00106$ +00105$: +; ../_fsmul.c: 277: result >>= 7; + ldw x, (0x0b, sp) + ldw y, (0x09, sp) + clr a + rrwa y + rrwa x + sll a + rlcw x + rlcw y + ldw (0x0b, sp), x + ldw (0x09, sp), y +; ../_fsmul.c: 278: exp--; + ldw x, (0x0e, sp) + decw x + ldw (0x0e, sp), x +00106$: +; ../_fsmul.c: 281: result &= ~HIDDEN; + ldw y, (0x0b, sp) + ld a, (0x0a, sp) + and a, #0x7f + ld xl, a + ld a, (0x09, sp) + ld xh, a + ldw (0x0b, sp), y + ldw (0x09, sp), x +; ../_fsmul.c: 284: if (exp >= 0x100) + ldw x, (0x0e, sp) + cpw x, #0x0100 + jrslt 00111$ +; ../_fsmul.c: 285: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY; + tnz (0x0d, sp) + jreq 00115$ + clrw x + ldw (0x14, sp), x + clr (0x13, sp) + ld a, #0x80 + jra 00116$ +00115$: + clrw x + ldw (0x14, sp), x + clr (0x13, sp) + clr a +00116$: + or a, #0x7f + ld yh, a + ld a, (0x15, sp) + ld xl, a + ld a, (0x14, sp) + ld xh, a + ld a, (0x13, sp) + or a, #0x80 + ld yl, a + ldw (0x03, sp), x + ldw (0x01, sp), y + jra 00112$ +00111$: +; ../_fsmul.c: 286: else if (exp < 0) + tnz (0x0e, sp) + jrpl 00108$ +; ../_fsmul.c: 287: fl1.l = 0; + clrw x + ldw (0x03, sp), x + ldw (0x01, sp), x + jra 00112$ +00108$: +; ../_fsmul.c: 289: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result); + tnz (0x0d, sp) + jreq 00117$ + clrw x + ldw (0x14, sp), x + ldw x, #0x8000 + ldw (0x12, sp), x + jra 00118$ +00117$: + clrw x + ldw (0x14, sp), x + ldw (0x12, sp), x +00118$: + ldw y, (0x0e, sp) + clrw x + tnzw y + jrpl 00161$ + decw x +00161$: + ld a, yl + clrw x + push a + ld a, #0x07 +00162$: + sll (1, sp) + rlwa y + rlc a + rrwa y + dec a + jrne 00162$ + pop a + or a, (0x13, sp) + ld yl, a + ld a, xl + or a, (0x15, sp) + rlwa x + or a, (0x14, sp) + ld xh, a + ld a, yh + or a, (0x12, sp) + or a, (0x09, sp) + ld yh, a + ld a, xl + or a, (0x0c, sp) + rlwa x + or a, (0x0b, sp) + ld xh, a + ld a, yl + or a, (0x0a, sp) + ld yl, a + ldw (0x03, sp), x + ldw (0x01, sp), y +00112$: +; ../_fsmul.c: 290: return (fl1.f); + ldw x, (0x03, sp) + ldw y, (0x01, sp) +00113$: +; ../_fsmul.c: 291: } + addw sp, #21 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fsmul.lst b/device/lib/stm8/_fsmul.lst new file mode 100644 index 0000000..707c8f2 --- /dev/null +++ b/device/lib/stm8/_fsmul.lst @@ -0,0 +1,391 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fsmul + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fsmul + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_fsmul.c: 241: float __fsmul (float a1, float a2) { + 50 ; ----------------------------------------- + 51 ; function __fsmul + 52 ; ----------------------------------------- + 000000 53 ___fsmul: + 000000 52 15 [ 2] 54 sub sp, #21 + 55 ; ../_fsmul.c: 247: fl1.f = a1; + 000002 16 1A [ 2] 56 ldw y, (0x1a, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 18 [ 2] 58 ldw y, (0x18, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fsmul.c: 248: fl2.f = a2; + 00000A 16 1E [ 2] 61 ldw y, (0x1e, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 1C [ 2] 63 ldw y, (0x1c, sp) + 000010 17 05 [ 2] 64 ldw (0x05, sp), y + 65 ; ../_fsmul.c: 250: if (!fl1.l || !fl2.l) + 000012 16 03 [ 2] 66 ldw y, (0x03, sp) + 000014 17 14 [ 2] 67 ldw (0x14, sp), y + 000016 16 01 [ 2] 68 ldw y, (0x01, sp) + 000018 17 12 [ 2] 69 ldw (0x12, sp), y + 00001A 1E 14 [ 2] 70 ldw x, (0x14, sp) + 00001C 26 04 [ 1] 71 jrne 00149$ + 00001E 1E 12 [ 2] 72 ldw x, (0x12, sp) + 000020 27 0B [ 1] 73 jreq 00101$ + 000022 74 00149$: + 000022 1E 07 [ 2] 75 ldw x, (0x07, sp) + 000024 16 05 [ 2] 76 ldw y, (0x05, sp) + 000026 5D [ 2] 77 tnzw x + 000027 26 0A [ 1] 78 jrne 00102$ + 000029 90 5D [ 2] 79 tnzw y + 00002B 26 06 [ 1] 80 jrne 00102$ + 00002D 81 00101$: + 82 ; ../_fsmul.c: 251: return (0); + 00002D 5F [ 1] 83 clrw x + 00002E 90 5F [ 1] 84 clrw y + 000030 CCr02r03 [ 2] 85 jp 00113$ + 000033 86 00102$: + 87 ; ../_fsmul.c: 254: sign = SIGN (fl1.l) ^ SIGN (fl2.l); + 000033 1E 01 [ 2] 88 ldw x, (0x01, sp) + 000035 58 [ 2] 89 sllw x + 000036 4F [ 1] 90 clr a + 000037 49 [ 1] 91 rlc a + 000038 6B 15 [ 1] 92 ld (0x15, sp), a + 00003A 1E 05 [ 2] 93 ldw x, (0x05, sp) + 00003C 58 [ 2] 94 sllw x + 00003D 4F [ 1] 95 clr a + 00003E 49 [ 1] 96 rlc a + 00003F 18 15 [ 1] 97 xor a, (0x15, sp) + 000041 6B 0D [ 1] 98 ld (0x0d, sp), a + 99 ; ../_fsmul.c: 255: exp = EXP (fl1.l) - EXCESS; + 000043 1E 01 [ 2] 100 ldw x, (0x01, sp) + 000045 A6 80 [ 1] 101 ld a, #0x80 + 000047 62 [ 2] 102 div x, a + 000048 4F [ 1] 103 clr a + 000049 95 [ 1] 104 ld xh, a + 00004A 1D 00 7E [ 2] 105 subw x, #0x007e + 00004D 1F 14 [ 2] 106 ldw (0x14, sp), x + 107 ; ../_fsmul.c: 256: exp += EXP (fl2.l); + 00004F 1E 05 [ 2] 108 ldw x, (0x05, sp) + 000051 A6 80 [ 1] 109 ld a, #0x80 + 000053 62 [ 2] 110 div x, a + 000054 4F [ 1] 111 clr a + 000055 95 [ 1] 112 ld xh, a + 000056 72 FB 14 [ 2] 113 addw x, (0x14, sp) + 000059 1F 0E [ 2] 114 ldw (0x0e, sp), x + 115 ; ../_fsmul.c: 258: fl1.l = MANT (fl1.l); + 00005B 16 03 [ 2] 116 ldw y, (0x03, sp) + 00005D 1E 01 [ 2] 117 ldw x, (0x01, sp) + 00005F 9F [ 1] 118 ld a, xl + 000060 A4 7F [ 1] 119 and a, #0x7f + 000062 97 [ 1] 120 ld xl, a + 000063 4F [ 1] 121 clr a + 000064 01 [ 1] 122 rrwa x + 000065 AA 80 [ 1] 123 or a, #0x80 + 000067 97 [ 1] 124 ld xl, a + 000068 17 03 [ 2] 125 ldw (0x03, sp), y + 00006A 1F 01 [ 2] 126 ldw (0x01, sp), x + 127 ; ../_fsmul.c: 259: fl2.l = MANT (fl2.l); + 00006C 16 07 [ 2] 128 ldw y, (0x07, sp) + 00006E 1E 05 [ 2] 129 ldw x, (0x05, sp) + 000070 9F [ 1] 130 ld a, xl + 000071 A4 7F [ 1] 131 and a, #0x7f + 000073 97 [ 1] 132 ld xl, a + 000074 4F [ 1] 133 clr a + 000075 01 [ 1] 134 rrwa x + 000076 AA 80 [ 1] 135 or a, #0x80 + 000078 97 [ 1] 136 ld xl, a + 000079 17 07 [ 2] 137 ldw (0x07, sp), y + 00007B 1F 05 [ 2] 138 ldw (0x05, sp), x + 139 ; ../_fsmul.c: 262: result = (unsigned long)((unsigned short)(fl1.l >> 8)) * (unsigned short)(fl2.l >> 8); + 00007D 16 03 [ 2] 140 ldw y, (0x03, sp) + 00007F 1E 01 [ 2] 141 ldw x, (0x01, sp) + 000081 9F [ 1] 142 ld a, xl + 000082 90 02 [ 1] 143 rlwa y + 000084 6B 11 [ 1] 144 ld (0x11, sp), a + 000086 90 01 [ 1] 145 rrwa y + 000088 6B 10 [ 1] 146 ld (0x10, sp), a + 00008A 1E 07 [ 2] 147 ldw x, (0x07, sp) + 00008C 1F 14 [ 2] 148 ldw (0x14, sp), x + 00008E 1E 05 [ 2] 149 ldw x, (0x05, sp) + 000090 7B 14 [ 1] 150 ld a, (0x14, sp) + 000092 6B 15 [ 1] 151 ld (0x15, sp), a + 000094 1F 13 [ 2] 152 ldw (0x13, sp), x + 000096 0F 12 [ 1] 153 clr (0x12, sp) + 000098 7B 15 [ 1] 154 ld a, (0x15, sp) + 00009A 02 [ 1] 155 rlwa x + 00009B 7B 14 [ 1] 156 ld a, (0x14, sp) + 00009D 01 [ 1] 157 rrwa x + 00009E 97 [ 1] 158 ld xl, a + 00009F 89 [ 2] 159 pushw x + 0000A0 1E 12 [ 2] 160 ldw x, (0x12, sp) + 0000A2 89 [ 2] 161 pushw x + 0000A3 CDr00r00 [ 4] 162 call ___muluint2ulong + 0000A6 5B 04 [ 2] 163 addw sp, #4 + 0000A8 1F 0B [ 2] 164 ldw (0x0b, sp), x + 0000AA 17 09 [ 2] 165 ldw (0x09, sp), y + 166 ; ../_fsmul.c: 263: result += ((unsigned long)((unsigned short)(fl1.l & 0xff)) * (unsigned short)(fl2.l >> 8)) >> 8; + 0000AC 16 03 [ 2] 167 ldw y, (0x03, sp) + 0000AE 4F [ 1] 168 clr a + 0000AF 90 95 [ 1] 169 ld yh, a + 0000B1 1E 07 [ 2] 170 ldw x, (0x07, sp) + 0000B3 1F 14 [ 2] 171 ldw (0x14, sp), x + 0000B5 1E 05 [ 2] 172 ldw x, (0x05, sp) + 0000B7 7B 14 [ 1] 173 ld a, (0x14, sp) + 0000B9 6B 15 [ 1] 174 ld (0x15, sp), a + 0000BB 1F 13 [ 2] 175 ldw (0x13, sp), x + 0000BD 0F 12 [ 1] 176 clr (0x12, sp) + 0000BF 7B 15 [ 1] 177 ld a, (0x15, sp) + 0000C1 02 [ 1] 178 rlwa x + 0000C2 7B 14 [ 1] 179 ld a, (0x14, sp) + 0000C4 01 [ 1] 180 rrwa x + 0000C5 97 [ 1] 181 ld xl, a + 0000C6 89 [ 2] 182 pushw x + 0000C7 90 89 [ 2] 183 pushw y + 0000C9 CDr00r00 [ 4] 184 call ___muluint2ulong + 0000CC 5B 04 [ 2] 185 addw sp, #4 + 0000CE 9E [ 1] 186 ld a, xh + 0000CF 6B 15 [ 1] 187 ld (0x15, sp), a + 0000D1 17 13 [ 2] 188 ldw (0x13, sp), y + 0000D3 0F 12 [ 1] 189 clr (0x12, sp) + 0000D5 1E 0B [ 2] 190 ldw x, (0x0b, sp) + 0000D7 72 FB 14 [ 2] 191 addw x, (0x14, sp) + 0000DA 16 09 [ 2] 192 ldw y, (0x09, sp) + 0000DC 24 02 [ 1] 193 jrnc 00152$ + 0000DE 90 5C [ 1] 194 incw y + 0000E0 195 00152$: + 0000E0 72 F9 12 [ 2] 196 addw y, (0x12, sp) + 0000E3 1F 0B [ 2] 197 ldw (0x0b, sp), x + 0000E5 17 09 [ 2] 198 ldw (0x09, sp), y + 199 ; ../_fsmul.c: 264: result += ((unsigned long)((unsigned short)(fl2.l & 0xff)) * (unsigned short)(fl1.l >> 8)) >> 8; + 0000E7 16 07 [ 2] 200 ldw y, (0x07, sp) + 0000E9 4F [ 1] 201 clr a + 0000EA 90 95 [ 1] 202 ld yh, a + 0000EC 1E 03 [ 2] 203 ldw x, (0x03, sp) + 0000EE 1F 14 [ 2] 204 ldw (0x14, sp), x + 0000F0 1E 01 [ 2] 205 ldw x, (0x01, sp) + 0000F2 7B 14 [ 1] 206 ld a, (0x14, sp) + 0000F4 6B 15 [ 1] 207 ld (0x15, sp), a + 0000F6 1F 13 [ 2] 208 ldw (0x13, sp), x + 0000F8 0F 12 [ 1] 209 clr (0x12, sp) + 0000FA 7B 15 [ 1] 210 ld a, (0x15, sp) + 0000FC 02 [ 1] 211 rlwa x + 0000FD 7B 14 [ 1] 212 ld a, (0x14, sp) + 0000FF 01 [ 1] 213 rrwa x + 000100 97 [ 1] 214 ld xl, a + 000101 89 [ 2] 215 pushw x + 000102 90 89 [ 2] 216 pushw y + 000104 CDr00r00 [ 4] 217 call ___muluint2ulong + 000107 5B 04 [ 2] 218 addw sp, #4 + 000109 9E [ 1] 219 ld a, xh + 00010A 6B 15 [ 1] 220 ld (0x15, sp), a + 00010C 17 13 [ 2] 221 ldw (0x13, sp), y + 00010E 0F 12 [ 1] 222 clr (0x12, sp) + 000110 1E 0B [ 2] 223 ldw x, (0x0b, sp) + 000112 72 FB 14 [ 2] 224 addw x, (0x14, sp) + 000115 16 09 [ 2] 225 ldw y, (0x09, sp) + 000117 24 02 [ 1] 226 jrnc 00153$ + 000119 90 5C [ 1] 227 incw y + 00011B 228 00153$: + 00011B 72 F9 12 [ 2] 229 addw y, (0x12, sp) + 00011E 1F 0B [ 2] 230 ldw (0x0b, sp), x + 000120 17 09 [ 2] 231 ldw (0x09, sp), y + 232 ; ../_fsmul.c: 267: result += 0x40; + 000122 1E 0B [ 2] 233 ldw x, (0x0b, sp) + 000124 1C 00 40 [ 2] 234 addw x, #0x0040 + 000127 16 09 [ 2] 235 ldw y, (0x09, sp) + 000129 24 02 [ 1] 236 jrnc 00154$ + 00012B 90 5C [ 1] 237 incw y + 00012D 238 00154$: + 00012D 1F 0B [ 2] 239 ldw (0x0b, sp), x + 00012F 17 09 [ 2] 240 ldw (0x09, sp), y + 241 ; ../_fsmul.c: 269: if (result & SIGNBIT) + 000131 0D 09 [ 1] 242 tnz (0x09, sp) + 000133 2A 1C [ 1] 243 jrpl 00105$ + 244 ; ../_fsmul.c: 272: result += 0x40; + 000135 1E 0B [ 2] 245 ldw x, (0x0b, sp) + 000137 1C 00 40 [ 2] 246 addw x, #0x0040 + 00013A 16 09 [ 2] 247 ldw y, (0x09, sp) + 00013C 24 02 [ 1] 248 jrnc 00156$ + 00013E 90 5C [ 1] 249 incw y + 000140 250 00156$: + 000140 1F 0B [ 2] 251 ldw (0x0b, sp), x + 000142 17 09 [ 2] 252 ldw (0x09, sp), y + 253 ; ../_fsmul.c: 273: result >>= 8; + 000144 16 0A [ 2] 254 ldw y, (0x0a, sp) + 000146 7B 09 [ 1] 255 ld a, (0x09, sp) + 000148 97 [ 1] 256 ld xl, a + 000149 4F [ 1] 257 clr a + 00014A 95 [ 1] 258 ld xh, a + 00014B 17 0B [ 2] 259 ldw (0x0b, sp), y + 00014D 1F 09 [ 2] 260 ldw (0x09, sp), x + 00014F 20 15 [ 2] 261 jra 00106$ + 000151 262 00105$: + 263 ; ../_fsmul.c: 277: result >>= 7; + 000151 1E 0B [ 2] 264 ldw x, (0x0b, sp) + 000153 16 09 [ 2] 265 ldw y, (0x09, sp) + 000155 4F [ 1] 266 clr a + 000156 90 01 [ 1] 267 rrwa y + 000158 01 [ 1] 268 rrwa x + 000159 48 [ 1] 269 sll a + 00015A 59 [ 2] 270 rlcw x + 00015B 90 59 [ 2] 271 rlcw y + 00015D 1F 0B [ 2] 272 ldw (0x0b, sp), x + 00015F 17 09 [ 2] 273 ldw (0x09, sp), y + 274 ; ../_fsmul.c: 278: exp--; + 000161 1E 0E [ 2] 275 ldw x, (0x0e, sp) + 000163 5A [ 2] 276 decw x + 000164 1F 0E [ 2] 277 ldw (0x0e, sp), x + 000166 278 00106$: + 279 ; ../_fsmul.c: 281: result &= ~HIDDEN; + 000166 16 0B [ 2] 280 ldw y, (0x0b, sp) + 000168 7B 0A [ 1] 281 ld a, (0x0a, sp) + 00016A A4 7F [ 1] 282 and a, #0x7f + 00016C 97 [ 1] 283 ld xl, a + 00016D 7B 09 [ 1] 284 ld a, (0x09, sp) + 00016F 95 [ 1] 285 ld xh, a + 000170 17 0B [ 2] 286 ldw (0x0b, sp), y + 000172 1F 09 [ 2] 287 ldw (0x09, sp), x + 288 ; ../_fsmul.c: 284: if (exp >= 0x100) + 000174 1E 0E [ 2] 289 ldw x, (0x0e, sp) + 000176 A3 01 00 [ 2] 290 cpw x, #0x0100 + 000179 2F 29 [ 1] 291 jrslt 00111$ + 292 ; ../_fsmul.c: 285: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY; + 00017B 0D 0D [ 1] 293 tnz (0x0d, sp) + 00017D 27 09 [ 1] 294 jreq 00115$ + 00017F 5F [ 1] 295 clrw x + 000180 1F 14 [ 2] 296 ldw (0x14, sp), x + 000182 0F 13 [ 1] 297 clr (0x13, sp) + 000184 A6 80 [ 1] 298 ld a, #0x80 + 000186 20 06 [ 2] 299 jra 00116$ + 000188 300 00115$: + 000188 5F [ 1] 301 clrw x + 000189 1F 14 [ 2] 302 ldw (0x14, sp), x + 00018B 0F 13 [ 1] 303 clr (0x13, sp) + 00018D 4F [ 1] 304 clr a + 00018E 305 00116$: + 00018E AA 7F [ 1] 306 or a, #0x7f + 000190 90 95 [ 1] 307 ld yh, a + 000192 7B 15 [ 1] 308 ld a, (0x15, sp) + 000194 97 [ 1] 309 ld xl, a + 000195 7B 14 [ 1] 310 ld a, (0x14, sp) + 000197 95 [ 1] 311 ld xh, a + 000198 7B 13 [ 1] 312 ld a, (0x13, sp) + 00019A AA 80 [ 1] 313 or a, #0x80 + 00019C 90 97 [ 1] 314 ld yl, a + 00019E 1F 03 [ 2] 315 ldw (0x03, sp), x + 0001A0 17 01 [ 2] 316 ldw (0x01, sp), y + 0001A2 20 5B [ 2] 317 jra 00112$ + 0001A4 318 00111$: + 319 ; ../_fsmul.c: 286: else if (exp < 0) + 0001A4 0D 0E [ 1] 320 tnz (0x0e, sp) + 0001A6 2A 07 [ 1] 321 jrpl 00108$ + 322 ; ../_fsmul.c: 287: fl1.l = 0; + 0001A8 5F [ 1] 323 clrw x + 0001A9 1F 03 [ 2] 324 ldw (0x03, sp), x + 0001AB 1F 01 [ 2] 325 ldw (0x01, sp), x + 0001AD 20 50 [ 2] 326 jra 00112$ + 0001AF 327 00108$: + 328 ; ../_fsmul.c: 289: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result); + 0001AF 0D 0D [ 1] 329 tnz (0x0d, sp) + 0001B1 27 0A [ 1] 330 jreq 00117$ + 0001B3 5F [ 1] 331 clrw x + 0001B4 1F 14 [ 2] 332 ldw (0x14, sp), x + 0001B6 AE 80 00 [ 2] 333 ldw x, #0x8000 + 0001B9 1F 12 [ 2] 334 ldw (0x12, sp), x + 0001BB 20 05 [ 2] 335 jra 00118$ + 0001BD 336 00117$: + 0001BD 5F [ 1] 337 clrw x + 0001BE 1F 14 [ 2] 338 ldw (0x14, sp), x + 0001C0 1F 12 [ 2] 339 ldw (0x12, sp), x + 0001C2 340 00118$: + 0001C2 16 0E [ 2] 341 ldw y, (0x0e, sp) + 0001C4 5F [ 1] 342 clrw x + 0001C5 90 5D [ 2] 343 tnzw y + 0001C7 2A 01 [ 1] 344 jrpl 00161$ + 0001C9 5A [ 2] 345 decw x + 0001CA 346 00161$: + 0001CA 90 9F [ 1] 347 ld a, yl + 0001CC 5F [ 1] 348 clrw x + 0001CD 88 [ 1] 349 push a + 0001CE A6 07 [ 1] 350 ld a, #0x07 + 0001D0 351 00162$: + 0001D0 08 01 [ 1] 352 sll (1, sp) + 0001D2 90 02 [ 1] 353 rlwa y + 0001D4 49 [ 1] 354 rlc a + 0001D5 90 01 [ 1] 355 rrwa y + 0001D7 4A [ 1] 356 dec a + 0001D8 26 F6 [ 1] 357 jrne 00162$ + 0001DA 84 [ 1] 358 pop a + 0001DB 1A 13 [ 1] 359 or a, (0x13, sp) + 0001DD 90 97 [ 1] 360 ld yl, a + 0001DF 9F [ 1] 361 ld a, xl + 0001E0 1A 15 [ 1] 362 or a, (0x15, sp) + 0001E2 02 [ 1] 363 rlwa x + 0001E3 1A 14 [ 1] 364 or a, (0x14, sp) + 0001E5 95 [ 1] 365 ld xh, a + 0001E6 90 9E [ 1] 366 ld a, yh + 0001E8 1A 12 [ 1] 367 or a, (0x12, sp) + 0001EA 1A 09 [ 1] 368 or a, (0x09, sp) + 0001EC 90 95 [ 1] 369 ld yh, a + 0001EE 9F [ 1] 370 ld a, xl + 0001EF 1A 0C [ 1] 371 or a, (0x0c, sp) + 0001F1 02 [ 1] 372 rlwa x + 0001F2 1A 0B [ 1] 373 or a, (0x0b, sp) + 0001F4 95 [ 1] 374 ld xh, a + 0001F5 90 9F [ 1] 375 ld a, yl + 0001F7 1A 0A [ 1] 376 or a, (0x0a, sp) + 0001F9 90 97 [ 1] 377 ld yl, a + 0001FB 1F 03 [ 2] 378 ldw (0x03, sp), x + 0001FD 17 01 [ 2] 379 ldw (0x01, sp), y + 0001FF 380 00112$: + 381 ; ../_fsmul.c: 290: return (fl1.f); + 0001FF 1E 03 [ 2] 382 ldw x, (0x03, sp) + 000201 16 01 [ 2] 383 ldw y, (0x01, sp) + 000203 384 00113$: + 385 ; ../_fsmul.c: 291: } + 000203 5B 15 [ 2] 386 addw sp, #21 + 000205 81 [ 4] 387 ret + 388 .area CODE + 389 .area CONST + 390 .area INITIALIZER + 391 .area CABS (ABS) diff --git a/device/lib/stm8/_fsmul.rel b/device/lib/stm8/_fsmul.rel new file mode 100644 index 0000000..1e01eb1 --- /dev/null +++ b/device/lib/stm8/_fsmul.rel @@ -0,0 +1,158 @@ +XH3 +H B areas 3 global symbols +M _fsmul +O -mstm8 +S ___muluint2ulong Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 206 flags 0 addr 0 +S ___fsmul Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 15 16 1A 17 03 16 18 17 01 16 1E 17 +R 00 00 00 09 +T 00 00 0D 07 16 1C 17 05 16 03 17 14 16 01 17 12 +R 00 00 00 09 +T 00 00 1A 1E 14 26 04 1E 12 27 0B +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 1E 07 16 05 5D 26 0A 90 5D 26 06 +R 00 00 00 09 +T 00 00 2D +R 00 00 00 09 +T 00 00 2D 5F 90 5F CC 02 03 +R 00 00 00 09 00 07 00 09 +T 00 00 33 +R 00 00 00 09 +T 00 00 33 1E 01 58 4F 49 6B 15 1E 05 58 4F 49 18 +R 00 00 00 09 +T 00 00 40 15 6B 0D 1E 01 A6 80 62 4F 95 1D 00 7E +R 00 00 00 09 +T 00 00 4D 1F 14 1E 05 A6 80 62 4F 95 72 FB 14 1F +R 00 00 00 09 +T 00 00 5A 0E 16 03 1E 01 9F A4 7F 97 4F 01 AA 80 +R 00 00 00 09 +T 00 00 67 97 17 03 1F 01 16 07 1E 05 9F A4 7F 97 +R 00 00 00 09 +T 00 00 74 4F 01 AA 80 97 17 07 1F 05 16 03 1E 01 +R 00 00 00 09 +T 00 00 81 9F 90 02 6B 11 90 01 6B 10 1E 07 1F 14 +R 00 00 00 09 +T 00 00 8E 1E 05 7B 14 6B 15 1F 13 0F 12 7B 15 02 +R 00 00 00 09 +T 00 00 9B 7B 14 01 97 89 1E 12 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 00 +T 00 00 A8 1F 0B 17 09 16 03 4F 90 95 1E 07 1F 14 +R 00 00 00 09 +T 00 00 B5 1E 05 7B 14 6B 15 1F 13 0F 12 7B 15 02 +R 00 00 00 09 +T 00 00 C2 7B 14 01 97 89 90 89 CD 00 00 5B 04 9E +R 00 00 00 09 02 0B 00 00 +T 00 00 CF 6B 15 17 13 0F 12 1E 0B 72 FB 14 16 09 +R 00 00 00 09 +T 00 00 DC 24 02 90 5C +R 00 00 00 09 +T 00 00 E0 +R 00 00 00 09 +T 00 00 E0 72 F9 12 1F 0B 17 09 16 07 4F 90 95 1E +R 00 00 00 09 +T 00 00 ED 03 1F 14 1E 01 7B 14 6B 15 1F 13 0F 12 +R 00 00 00 09 +T 00 00 FA 7B 15 02 7B 14 01 97 89 90 89 CD 00 00 +R 00 00 00 09 02 0E 00 00 +T 00 01 07 5B 04 9E 6B 15 17 13 0F 12 1E 0B 72 FB +R 00 00 00 09 +T 00 01 14 14 16 09 24 02 90 5C +R 00 00 00 09 +T 00 01 1B +R 00 00 00 09 +T 00 01 1B 72 F9 12 1F 0B 17 09 1E 0B 1C 00 40 16 +R 00 00 00 09 +T 00 01 28 09 24 02 90 5C +R 00 00 00 09 +T 00 01 2D +R 00 00 00 09 +T 00 01 2D 1F 0B 17 09 0D 09 2A 1C 1E 0B 1C 00 40 +R 00 00 00 09 +T 00 01 3A 16 09 24 02 90 5C +R 00 00 00 09 +T 00 01 40 +R 00 00 00 09 +T 00 01 40 1F 0B 17 09 16 0A 7B 09 97 4F 95 17 0B +R 00 00 00 09 +T 00 01 4D 1F 09 20 15 +R 00 00 00 09 +T 00 01 51 +R 00 00 00 09 +T 00 01 51 1E 0B 16 09 4F 90 01 01 48 59 90 59 1F +R 00 00 00 09 +T 00 01 5E 0B 17 09 1E 0E 5A 1F 0E +R 00 00 00 09 +T 00 01 66 +R 00 00 00 09 +T 00 01 66 16 0B 7B 0A A4 7F 97 7B 09 95 17 0B 1F +R 00 00 00 09 +T 00 01 73 09 1E 0E A3 01 00 2F 29 0D 0D 27 09 5F +R 00 00 00 09 +T 00 01 80 1F 14 0F 13 A6 80 20 06 +R 00 00 00 09 +T 00 01 88 +R 00 00 00 09 +T 00 01 88 5F 1F 14 0F 13 4F +R 00 00 00 09 +T 00 01 8E +R 00 00 00 09 +T 00 01 8E AA 7F 90 95 7B 15 97 7B 14 95 7B 13 AA +R 00 00 00 09 +T 00 01 9B 80 90 97 1F 03 17 01 20 5B +R 00 00 00 09 +T 00 01 A4 +R 00 00 00 09 +T 00 01 A4 0D 0E 2A 07 5F 1F 03 1F 01 20 50 +R 00 00 00 09 +T 00 01 AF +R 00 00 00 09 +T 00 01 AF 0D 0D 27 0A 5F 1F 14 AE 80 00 1F 12 20 +R 00 00 00 09 +T 00 01 BC 05 +R 00 00 00 09 +T 00 01 BD +R 00 00 00 09 +T 00 01 BD 5F 1F 14 1F 12 +R 00 00 00 09 +T 00 01 C2 +R 00 00 00 09 +T 00 01 C2 16 0E 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 01 CA +R 00 00 00 09 +T 00 01 CA 90 9F 5F 88 A6 07 +R 00 00 00 09 +T 00 01 D0 +R 00 00 00 09 +T 00 01 D0 08 01 90 02 49 90 01 4A 26 F6 84 1A 13 +R 00 00 00 09 +T 00 01 DD 90 97 9F 1A 15 02 1A 14 95 90 9E 1A 12 +R 00 00 00 09 +T 00 01 EA 1A 09 90 95 9F 1A 0C 02 1A 0B 95 90 9F +R 00 00 00 09 +T 00 01 F7 1A 0A 90 97 1F 03 17 01 +R 00 00 00 09 +T 00 01 FF +R 00 00 00 09 +T 00 01 FF 1E 03 16 01 +R 00 00 00 09 +T 00 02 03 +R 00 00 00 09 +T 00 02 03 5B 15 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fsmul.sym b/device/lib/stm8/_fsmul.sym new file mode 100644 index 0000000..a29afb2 --- /dev/null +++ b/device/lib/stm8/_fsmul.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fsmul 000000 GR + ___muluint2ulong ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 206 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fsneq.asm b/device/lib/stm8/_fsneq.asm new file mode 100644 index 0000000..db511cb --- /dev/null +++ b/device/lib/stm8/_fsneq.asm @@ -0,0 +1,118 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fsneq + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fsneq +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fsneq.c: 80: char __fsneq (float a1, float a2) +; ----------------------------------------- +; function __fsneq +; ----------------------------------------- +___fsneq: + sub sp, #16 +; ../_fsneq.c: 84: fl1.f = a1; + ldw y, (0x15, sp) + ldw (0x03, sp), y + ldw y, (0x13, sp) + ldw (0x01, sp), y +; ../_fsneq.c: 85: fl2.f = a2; + ldw y, (0x19, sp) + ldw (0x07, sp), y + ldw y, (0x17, sp) + ldw (0x05, sp), y +; ../_fsneq.c: 87: if (fl1.l == fl2.l) + ldw y, (0x03, sp) + ldw (0x0b, sp), y + ldw y, (0x01, sp) + ldw (0x09, sp), y + ldw y, (0x07, sp) + ldw (0x0f, sp), y + ldw y, (0x05, sp) + ldw x, (0x0b, sp) + cpw x, (0x0f, sp) + jrne 00102$ + ldw x, y + cpw x, (0x09, sp) + jrne 00102$ +; ../_fsneq.c: 88: return (0); + clr a + jra 00105$ +00102$: +; ../_fsneq.c: 89: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0) + ldw y, (0x03, sp) + ldw (0x0f, sp), y + ldw y, (0x01, sp) + ldw (0x0d, sp), y + ldw x, (0x07, sp) + ldw y, (0x05, sp) + ld a, xl + or a, (0x10, sp) + rlwa x + or a, (0x0f, sp) + ld xh, a + ld a, yl + or a, (0x0e, sp) + rlwa y + or a, (0x0d, sp) + and a, #0x7f + ld yh, a + tnzw x + jrne 00104$ + tnzw y + jrne 00104$ +; ../_fsneq.c: 90: return (0); + clr a +; ../_fsneq.c: 91: return (1); + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: +; ../_fsneq.c: 92: } + addw sp, #16 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fsneq.lst b/device/lib/stm8/_fsneq.lst new file mode 100644 index 0000000..21cf030 --- /dev/null +++ b/device/lib/stm8/_fsneq.lst @@ -0,0 +1,118 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fsneq + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fsneq + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_fsneq.c: 80: char __fsneq (float a1, float a2) + 50 ; ----------------------------------------- + 51 ; function __fsneq + 52 ; ----------------------------------------- + 000000 53 ___fsneq: + 000000 52 10 [ 2] 54 sub sp, #16 + 55 ; ../_fsneq.c: 84: fl1.f = a1; + 000002 16 15 [ 2] 56 ldw y, (0x15, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 13 [ 2] 58 ldw y, (0x13, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fsneq.c: 85: fl2.f = a2; + 00000A 16 19 [ 2] 61 ldw y, (0x19, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 17 [ 2] 63 ldw y, (0x17, sp) + 000010 17 05 [ 2] 64 ldw (0x05, sp), y + 65 ; ../_fsneq.c: 87: if (fl1.l == fl2.l) + 000012 16 03 [ 2] 66 ldw y, (0x03, sp) + 000014 17 0B [ 2] 67 ldw (0x0b, sp), y + 000016 16 01 [ 2] 68 ldw y, (0x01, sp) + 000018 17 09 [ 2] 69 ldw (0x09, sp), y + 00001A 16 07 [ 2] 70 ldw y, (0x07, sp) + 00001C 17 0F [ 2] 71 ldw (0x0f, sp), y + 00001E 16 05 [ 2] 72 ldw y, (0x05, sp) + 000020 1E 0B [ 2] 73 ldw x, (0x0b, sp) + 000022 13 0F [ 2] 74 cpw x, (0x0f, sp) + 000024 26 08 [ 1] 75 jrne 00102$ + 000026 93 [ 1] 76 ldw x, y + 000027 13 09 [ 2] 77 cpw x, (0x09, sp) + 000029 26 03 [ 1] 78 jrne 00102$ + 79 ; ../_fsneq.c: 88: return (0); + 00002B 4F [ 1] 80 clr a + 00002C 20 2A [ 2] 81 jra 00105$ + 00002E 82 00102$: + 83 ; ../_fsneq.c: 89: if (((fl1.l | fl2.l) & 0x7FFFFFFF) == 0) + 00002E 16 03 [ 2] 84 ldw y, (0x03, sp) + 000030 17 0F [ 2] 85 ldw (0x0f, sp), y + 000032 16 01 [ 2] 86 ldw y, (0x01, sp) + 000034 17 0D [ 2] 87 ldw (0x0d, sp), y + 000036 1E 07 [ 2] 88 ldw x, (0x07, sp) + 000038 16 05 [ 2] 89 ldw y, (0x05, sp) + 00003A 9F [ 1] 90 ld a, xl + 00003B 1A 10 [ 1] 91 or a, (0x10, sp) + 00003D 02 [ 1] 92 rlwa x + 00003E 1A 0F [ 1] 93 or a, (0x0f, sp) + 000040 95 [ 1] 94 ld xh, a + 000041 90 9F [ 1] 95 ld a, yl + 000043 1A 0E [ 1] 96 or a, (0x0e, sp) + 000045 90 02 [ 1] 97 rlwa y + 000047 1A 0D [ 1] 98 or a, (0x0d, sp) + 000049 A4 7F [ 1] 99 and a, #0x7f + 00004B 90 95 [ 1] 100 ld yh, a + 00004D 5D [ 2] 101 tnzw x + 00004E 26 06 [ 1] 102 jrne 00104$ + 000050 90 5D [ 2] 103 tnzw y + 000052 26 02 [ 1] 104 jrne 00104$ + 105 ; ../_fsneq.c: 90: return (0); + 000054 4F [ 1] 106 clr a + 107 ; ../_fsneq.c: 91: return (1); + 000055 C5 108 .byte 0xc5 + 000056 109 00104$: + 000056 A6 01 [ 1] 110 ld a, #0x01 + 000058 111 00105$: + 112 ; ../_fsneq.c: 92: } + 000058 5B 10 [ 2] 113 addw sp, #16 + 00005A 81 [ 4] 114 ret + 115 .area CODE + 116 .area CONST + 117 .area INITIALIZER + 118 .area CABS (ABS) diff --git a/device/lib/stm8/_fsneq.rel b/device/lib/stm8/_fsneq.rel new file mode 100644 index 0000000..50dbabe --- /dev/null +++ b/device/lib/stm8/_fsneq.rel @@ -0,0 +1,45 @@ +XH3 +H B areas 2 global symbols +M _fsneq +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 5B flags 0 addr 0 +S ___fsneq Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 10 16 15 17 03 16 13 17 01 16 19 17 +R 00 00 00 09 +T 00 00 0D 07 16 17 17 05 16 03 17 0B 16 01 17 09 +R 00 00 00 09 +T 00 00 1A 16 07 17 0F 16 05 1E 0B 13 0F 26 08 93 +R 00 00 00 09 +T 00 00 27 13 09 26 03 4F 20 2A +R 00 00 00 09 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E 16 03 17 0F 16 01 17 0D 1E 07 16 05 9F +R 00 00 00 09 +T 00 00 3B 1A 10 02 1A 0F 95 90 9F 1A 0E 90 02 1A +R 00 00 00 09 +T 00 00 48 0D A4 7F 90 95 5D 26 06 90 5D 26 02 4F +R 00 00 00 09 +T 00 00 55 C5 +R 00 00 00 09 +T 00 00 56 +R 00 00 00 09 +T 00 00 56 A6 01 +R 00 00 00 09 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 5B 10 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_fsneq.sym b/device/lib/stm8/_fsneq.sym new file mode 100644 index 0000000..2b5d8fd --- /dev/null +++ b/device/lib/stm8/_fsneq.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___fsneq 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 5B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_fssub.asm b/device/lib/stm8/_fssub.asm new file mode 100644 index 0000000..3c2c675 --- /dev/null +++ b/device/lib/stm8/_fssub.asm @@ -0,0 +1,83 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _fssub + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___fssub +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_fssub.c: 73: float __fssub (float a1, float a2) +; ----------------------------------------- +; function __fssub +; ----------------------------------------- +___fssub: + sub sp, #4 +; ../_fssub.c: 75: float neg = -a1; + ldw y, (0x09, sp) + ldw x, (0x07, sp) + sllw x + ccf + rrcw x + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../_fssub.c: 76: return -(neg + a2); + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsadd + addw sp, #8 + sllw y + ccf + rrcw y +; ../_fssub.c: 77: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_fssub.lst b/device/lib/stm8/_fssub.lst new file mode 100644 index 0000000..e060135 --- /dev/null +++ b/device/lib/stm8/_fssub.lst @@ -0,0 +1,83 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _fssub + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___fssub + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_fssub.c: 73: float __fssub (float a1, float a2) + 50 ; ----------------------------------------- + 51 ; function __fssub + 52 ; ----------------------------------------- + 000000 53 ___fssub: + 000000 52 04 [ 2] 54 sub sp, #4 + 55 ; ../_fssub.c: 75: float neg = -a1; + 000002 16 09 [ 2] 56 ldw y, (0x09, sp) + 000004 1E 07 [ 2] 57 ldw x, (0x07, sp) + 000006 58 [ 2] 58 sllw x + 000007 8C [ 1] 59 ccf + 000008 56 [ 2] 60 rrcw x + 000009 17 03 [ 2] 61 ldw (0x03, sp), y + 00000B 1F 01 [ 2] 62 ldw (0x01, sp), x + 63 ; ../_fssub.c: 76: return -(neg + a2); + 00000D 1E 0D [ 2] 64 ldw x, (0x0d, sp) + 00000F 89 [ 2] 65 pushw x + 000010 1E 0D [ 2] 66 ldw x, (0x0d, sp) + 000012 89 [ 2] 67 pushw x + 000013 1E 07 [ 2] 68 ldw x, (0x07, sp) + 000015 89 [ 2] 69 pushw x + 000016 1E 07 [ 2] 70 ldw x, (0x07, sp) + 000018 89 [ 2] 71 pushw x + 000019 CDr00r00 [ 4] 72 call ___fsadd + 00001C 5B 08 [ 2] 73 addw sp, #8 + 00001E 90 58 [ 2] 74 sllw y + 000020 8C [ 1] 75 ccf + 000021 90 56 [ 2] 76 rrcw y + 77 ; ../_fssub.c: 77: } + 000023 5B 04 [ 2] 78 addw sp, #4 + 000025 81 [ 4] 79 ret + 80 .area CODE + 81 .area CONST + 82 .area INITIALIZER + 83 .area CABS (ABS) diff --git a/device/lib/stm8/_fssub.rel b/device/lib/stm8/_fssub.rel new file mode 100644 index 0000000..1e533f2 --- /dev/null +++ b/device/lib/stm8/_fssub.rel @@ -0,0 +1,26 @@ +XH3 +H B areas 3 global symbols +M _fssub +O -mstm8 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 26 flags 0 addr 0 +S ___fssub Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 16 09 1E 07 58 8C 56 17 03 1F 01 +R 00 00 00 09 +T 00 00 0D 1E 0D 89 1E 0D 89 1E 07 89 1E 07 89 CD +R 00 00 00 09 +T 00 00 1A 00 00 5B 08 90 58 8C 90 56 5B 04 81 +R 00 00 00 09 02 03 00 01 diff --git a/device/lib/stm8/_fssub.sym b/device/lib/stm8/_fssub.sym new file mode 100644 index 0000000..06fdc66 --- /dev/null +++ b/device/lib/stm8/_fssub.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + 9 ___fssub 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 26 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_itoa.asm b/device/lib/stm8/_itoa.asm new file mode 100644 index 0000000..8469595 --- /dev/null +++ b/device/lib/stm8/_itoa.asm @@ -0,0 +1,185 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _itoa + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __itoa + .globl __uitoa +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_itoa.c: 40: void _uitoa(unsigned int value, char* string, unsigned char radix) +; ----------------------------------------- +; function _uitoa +; ----------------------------------------- +__uitoa: + sub sp, #5 +; ../_itoa.c: 45: do { + clr (0x05, sp) +00103$: +; ../_itoa.c: 46: string[index] = '0' + (value % radix); + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + addw x, (0x0a, sp) + ldw (0x01, sp), x + ld a, (0x0c, sp) + ld (0x04, sp), a + clr (0x03, sp) + ldw x, (0x08, sp) + ldw y, (0x03, sp) + divw x, y + ld a, yl + add a, #0x30 + ldw x, (0x01, sp) + ld (x), a +; ../_itoa.c: 47: if (string[index] > '9') + ldw x, (0x01, sp) + ld a, (x) + cp a, #0x39 + jrule 00102$ +; ../_itoa.c: 48: string[index] += 'A' - '9' - 1; + add a, #0x07 + ldw x, (0x01, sp) + ld (x), a +00102$: +; ../_itoa.c: 49: value /= radix; + ldw x, (0x08, sp) + ldw y, (0x03, sp) + divw x, y + ldw (0x08, sp), x +; ../_itoa.c: 50: ++index; + inc (0x05, sp) +; ../_itoa.c: 51: } while (value != 0); + ldw x, (0x08, sp) + jrne 00103$ +; ../_itoa.c: 54: string[index--] = '\0'; + ld a, (0x05, sp) + dec a + ld (0x04, sp), a + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + addw x, (0x0a, sp) + clr (x) +; ../_itoa.c: 57: while (index > i) { + clr (0x05, sp) +00106$: + ld a, (0x04, sp) + cp a, (0x05, sp) + jrsle 00109$ +; ../_itoa.c: 58: char tmp = string[i]; + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + addw x, (0x0a, sp) + exgw x, y + ld a, (y) + ld (0x03, sp), a +; ../_itoa.c: 59: string[i] = string[index]; + ld a, (0x04, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + addw x, (0x0a, sp) + ld a, (x) + ld (y), a +; ../_itoa.c: 60: string[index] = tmp; + ld a, (0x03, sp) + ld (x), a +; ../_itoa.c: 61: ++i; + inc (0x05, sp) +; ../_itoa.c: 62: --index; + dec (0x04, sp) + jra 00106$ +00109$: +; ../_itoa.c: 64: } + addw sp, #5 + ret +; ../_itoa.c: 66: void _itoa(int value, char* string, unsigned char radix) +; ----------------------------------------- +; function _itoa +; ----------------------------------------- +__itoa: +; ../_itoa.c: 68: if (value < 0 && radix == 10) { + tnz (0x03, sp) + jrpl 00102$ + ld a, (0x07, sp) + cp a, #0x0a + jrne 00102$ +; ../_itoa.c: 69: *string++ = '-'; + ldw x, (0x05, sp) + ld a, #0x2d + ld (x), a + incw x + ldw (0x05, sp), x +; ../_itoa.c: 70: value = -value; + ldw x, (0x03, sp) + negw x + ldw (0x03, sp), x +00102$: +; ../_itoa.c: 72: _uitoa(value, string, radix); + ld a, (0x07, sp) + push a + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call __uitoa + addw sp, #5 +; ../_itoa.c: 73: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_itoa.lst b/device/lib/stm8/_itoa.lst new file mode 100644 index 0000000..20962c6 --- /dev/null +++ b/device/lib/stm8/_itoa.lst @@ -0,0 +1,185 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _itoa + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __itoa + 12 .globl __uitoa + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_itoa.c: 40: void _uitoa(unsigned int value, char* string, unsigned char radix) + 51 ; ----------------------------------------- + 52 ; function _uitoa + 53 ; ----------------------------------------- + 000000 54 __uitoa: + 000000 52 05 [ 2] 55 sub sp, #5 + 56 ; ../_itoa.c: 45: do { + 000002 0F 05 [ 1] 57 clr (0x05, sp) + 000004 58 00103$: + 59 ; ../_itoa.c: 46: string[index] = '0' + (value % radix); + 000004 7B 05 [ 1] 60 ld a, (0x05, sp) + 000006 97 [ 1] 61 ld xl, a + 000007 49 [ 1] 62 rlc a + 000008 4F [ 1] 63 clr a + 000009 A2 00 [ 1] 64 sbc a, #0x00 + 00000B 95 [ 1] 65 ld xh, a + 00000C 72 FB 0A [ 2] 66 addw x, (0x0a, sp) + 00000F 1F 01 [ 2] 67 ldw (0x01, sp), x + 000011 7B 0C [ 1] 68 ld a, (0x0c, sp) + 000013 6B 04 [ 1] 69 ld (0x04, sp), a + 000015 0F 03 [ 1] 70 clr (0x03, sp) + 000017 1E 08 [ 2] 71 ldw x, (0x08, sp) + 000019 16 03 [ 2] 72 ldw y, (0x03, sp) + 00001B 65 [ 2] 73 divw x, y + 00001C 90 9F [ 1] 74 ld a, yl + 00001E AB 30 [ 1] 75 add a, #0x30 + 000020 1E 01 [ 2] 76 ldw x, (0x01, sp) + 000022 F7 [ 1] 77 ld (x), a + 78 ; ../_itoa.c: 47: if (string[index] > '9') + 000023 1E 01 [ 2] 79 ldw x, (0x01, sp) + 000025 F6 [ 1] 80 ld a, (x) + 000026 A1 39 [ 1] 81 cp a, #0x39 + 000028 23 05 [ 2] 82 jrule 00102$ + 83 ; ../_itoa.c: 48: string[index] += 'A' - '9' - 1; + 00002A AB 07 [ 1] 84 add a, #0x07 + 00002C 1E 01 [ 2] 85 ldw x, (0x01, sp) + 00002E F7 [ 1] 86 ld (x), a + 00002F 87 00102$: + 88 ; ../_itoa.c: 49: value /= radix; + 00002F 1E 08 [ 2] 89 ldw x, (0x08, sp) + 000031 16 03 [ 2] 90 ldw y, (0x03, sp) + 000033 65 [ 2] 91 divw x, y + 000034 1F 08 [ 2] 92 ldw (0x08, sp), x + 93 ; ../_itoa.c: 50: ++index; + 000036 0C 05 [ 1] 94 inc (0x05, sp) + 95 ; ../_itoa.c: 51: } while (value != 0); + 000038 1E 08 [ 2] 96 ldw x, (0x08, sp) + 00003A 26 C8 [ 1] 97 jrne 00103$ + 98 ; ../_itoa.c: 54: string[index--] = '\0'; + 00003C 7B 05 [ 1] 99 ld a, (0x05, sp) + 00003E 4A [ 1] 100 dec a + 00003F 6B 04 [ 1] 101 ld (0x04, sp), a + 000041 7B 05 [ 1] 102 ld a, (0x05, sp) + 000043 97 [ 1] 103 ld xl, a + 000044 49 [ 1] 104 rlc a + 000045 4F [ 1] 105 clr a + 000046 A2 00 [ 1] 106 sbc a, #0x00 + 000048 95 [ 1] 107 ld xh, a + 000049 72 FB 0A [ 2] 108 addw x, (0x0a, sp) + 00004C 7F [ 1] 109 clr (x) + 110 ; ../_itoa.c: 57: while (index > i) { + 00004D 0F 05 [ 1] 111 clr (0x05, sp) + 00004F 112 00106$: + 00004F 7B 04 [ 1] 113 ld a, (0x04, sp) + 000051 11 05 [ 1] 114 cp a, (0x05, sp) + 000053 2D 27 [ 1] 115 jrsle 00109$ + 116 ; ../_itoa.c: 58: char tmp = string[i]; + 000055 7B 05 [ 1] 117 ld a, (0x05, sp) + 000057 97 [ 1] 118 ld xl, a + 000058 49 [ 1] 119 rlc a + 000059 4F [ 1] 120 clr a + 00005A A2 00 [ 1] 121 sbc a, #0x00 + 00005C 95 [ 1] 122 ld xh, a + 00005D 72 FB 0A [ 2] 123 addw x, (0x0a, sp) + 000060 51 [ 1] 124 exgw x, y + 000061 90 F6 [ 1] 125 ld a, (y) + 000063 6B 03 [ 1] 126 ld (0x03, sp), a + 127 ; ../_itoa.c: 59: string[i] = string[index]; + 000065 7B 04 [ 1] 128 ld a, (0x04, sp) + 000067 97 [ 1] 129 ld xl, a + 000068 49 [ 1] 130 rlc a + 000069 4F [ 1] 131 clr a + 00006A A2 00 [ 1] 132 sbc a, #0x00 + 00006C 95 [ 1] 133 ld xh, a + 00006D 72 FB 0A [ 2] 134 addw x, (0x0a, sp) + 000070 F6 [ 1] 135 ld a, (x) + 000071 90 F7 [ 1] 136 ld (y), a + 137 ; ../_itoa.c: 60: string[index] = tmp; + 000073 7B 03 [ 1] 138 ld a, (0x03, sp) + 000075 F7 [ 1] 139 ld (x), a + 140 ; ../_itoa.c: 61: ++i; + 000076 0C 05 [ 1] 141 inc (0x05, sp) + 142 ; ../_itoa.c: 62: --index; + 000078 0A 04 [ 1] 143 dec (0x04, sp) + 00007A 20 D3 [ 2] 144 jra 00106$ + 00007C 145 00109$: + 146 ; ../_itoa.c: 64: } + 00007C 5B 05 [ 2] 147 addw sp, #5 + 00007E 81 [ 4] 148 ret + 149 ; ../_itoa.c: 66: void _itoa(int value, char* string, unsigned char radix) + 150 ; ----------------------------------------- + 151 ; function _itoa + 152 ; ----------------------------------------- + 00007F 153 __itoa: + 154 ; ../_itoa.c: 68: if (value < 0 && radix == 10) { + 00007F 0D 03 [ 1] 155 tnz (0x03, sp) + 000081 2A 13 [ 1] 156 jrpl 00102$ + 000083 7B 07 [ 1] 157 ld a, (0x07, sp) + 000085 A1 0A [ 1] 158 cp a, #0x0a + 000087 26 0D [ 1] 159 jrne 00102$ + 160 ; ../_itoa.c: 69: *string++ = '-'; + 000089 1E 05 [ 2] 161 ldw x, (0x05, sp) + 00008B A6 2D [ 1] 162 ld a, #0x2d + 00008D F7 [ 1] 163 ld (x), a + 00008E 5C [ 1] 164 incw x + 00008F 1F 05 [ 2] 165 ldw (0x05, sp), x + 166 ; ../_itoa.c: 70: value = -value; + 000091 1E 03 [ 2] 167 ldw x, (0x03, sp) + 000093 50 [ 2] 168 negw x + 000094 1F 03 [ 2] 169 ldw (0x03, sp), x + 000096 170 00102$: + 171 ; ../_itoa.c: 72: _uitoa(value, string, radix); + 000096 7B 07 [ 1] 172 ld a, (0x07, sp) + 000098 88 [ 1] 173 push a + 000099 1E 06 [ 2] 174 ldw x, (0x06, sp) + 00009B 89 [ 2] 175 pushw x + 00009C 1E 06 [ 2] 176 ldw x, (0x06, sp) + 00009E 89 [ 2] 177 pushw x + 00009F CDr00r00 [ 4] 178 call __uitoa + 0000A2 5B 05 [ 2] 179 addw sp, #5 + 180 ; ../_itoa.c: 73: } + 0000A4 81 [ 4] 181 ret + 182 .area CODE + 183 .area CONST + 184 .area INITIALIZER + 185 .area CABS (ABS) diff --git a/device/lib/stm8/_itoa.rel b/device/lib/stm8/_itoa.rel new file mode 100644 index 0000000..56bec4c --- /dev/null +++ b/device/lib/stm8/_itoa.rel @@ -0,0 +1,66 @@ +XH3 +H B areas 3 global symbols +M _itoa +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size A5 flags 0 addr 0 +S __uitoa Def000000 +S __itoa Def00007F +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 05 0F 05 +R 00 00 00 09 +T 00 00 04 +R 00 00 00 09 +T 00 00 04 7B 05 97 49 4F A2 00 95 72 FB 0A 1F 01 +R 00 00 00 09 +T 00 00 11 7B 0C 6B 04 0F 03 1E 08 16 03 65 90 9F +R 00 00 00 09 +T 00 00 1E AB 30 1E 01 F7 1E 01 F6 A1 39 23 05 AB +R 00 00 00 09 +T 00 00 2B 07 1E 01 F7 +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 1E 08 16 03 65 1F 08 0C 05 1E 08 26 C8 +R 00 00 00 09 +T 00 00 3C 7B 05 4A 6B 04 7B 05 97 49 4F A2 00 95 +R 00 00 00 09 +T 00 00 49 72 FB 0A 7F 0F 05 +R 00 00 00 09 +T 00 00 4F +R 00 00 00 09 +T 00 00 4F 7B 04 11 05 2D 27 7B 05 97 49 4F A2 00 +R 00 00 00 09 +T 00 00 5C 95 72 FB 0A 51 90 F6 6B 03 7B 04 97 49 +R 00 00 00 09 +T 00 00 69 4F A2 00 95 72 FB 0A F6 90 F7 7B 03 F7 +R 00 00 00 09 +T 00 00 76 0C 05 0A 04 20 D3 +R 00 00 00 09 +T 00 00 7C +R 00 00 00 09 +T 00 00 7C 5B 05 81 +R 00 00 00 09 +T 00 00 7F +R 00 00 00 09 +T 00 00 7F 0D 03 2A 13 7B 07 A1 0A 26 0D 1E 05 A6 +R 00 00 00 09 +T 00 00 8C 2D F7 5C 1F 05 1E 03 50 1F 03 +R 00 00 00 09 +T 00 00 96 +R 00 00 00 09 +T 00 00 96 7B 07 88 1E 06 89 1E 06 89 CD 00 00 5B +R 00 00 00 09 00 0D 00 09 +T 00 00 A3 05 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_itoa.sym b/device/lib/stm8/_itoa.sym new file mode 100644 index 0000000..10661e1 --- /dev/null +++ b/device/lib/stm8/_itoa.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __itoa 00007F GR + 9 __uitoa 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size A5 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_ltoa.asm b/device/lib/stm8/_ltoa.asm new file mode 100644 index 0000000..4a83d2a --- /dev/null +++ b/device/lib/stm8/_ltoa.asm @@ -0,0 +1,178 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _ltoa + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __ltoa + .globl __ultoa +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_ltoa.c: 56: void _ultoa(unsigned long value, char* string, unsigned char radix) +; ----------------------------------------- +; function _ultoa +; ----------------------------------------- +__ultoa: + sub sp, #39 +; ../_ltoa.c: 61: do { + ldw x, sp + addw x, #5 + ldw (0x25, sp), x + ld a, #0x20 + ld (0x27, sp), a +00103$: +; ../_ltoa.c: 62: unsigned char c = '0' + (value % radix); + ld a, (0x30, sp) + ld (0x04, sp), a + clr (0x03, sp) + clr (0x02, sp) + clr (0x01, sp) + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + ldw x, (0x30, sp) + pushw x + ldw x, (0x30, sp) + pushw x + call __modulong + addw sp, #8 + ld a, xl + add a, #0x30 +; ../_ltoa.c: 63: if (c > (unsigned char)'9') + cp a, #0x39 + jrule 00102$ +; ../_ltoa.c: 64: c += 'A' - '9' - 1; + add a, #0x07 +00102$: +; ../_ltoa.c: 65: buffer[--index] = c; + dec (0x27, sp) + clrw x + exg a, xl + ld a, (0x27, sp) + exg a, xl + addw x, (0x25, sp) + ld (x), a +; ../_ltoa.c: 66: value /= radix; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + ldw x, (0x30, sp) + pushw x + ldw x, (0x30, sp) + pushw x + call __divulong + addw sp, #8 + ldw (0x2c, sp), x + ldw (0x2a, sp), y +; ../_ltoa.c: 67: } while (value); + ldw x, (0x2c, sp) + jrne 00103$ + ldw x, (0x2a, sp) + jrne 00103$ +; ../_ltoa.c: 69: do { + ldw x, (0x2e, sp) +00106$: +; ../_ltoa.c: 70: *string++ = buffer[index]; + clrw y + ld a, (0x27, sp) + ld yl, a + addw y, (0x25, sp) + ld a, (y) + ld (x), a + incw x +; ../_ltoa.c: 71: } while ( ++index != NUMBER_OF_DIGITS ); + inc (0x27, sp) + ld a, (0x27, sp) + cp a, #0x20 + jrne 00106$ +; ../_ltoa.c: 73: *string = 0; /* string terminator */ + clr (x) +; ../_ltoa.c: 74: } + addw sp, #39 + ret +; ../_ltoa.c: 76: void _ltoa(long value, char* string, unsigned char radix) +; ----------------------------------------- +; function _ltoa +; ----------------------------------------- +__ltoa: +; ../_ltoa.c: 78: if (value < 0 && radix == 10) { + tnz (0x03, sp) + jrpl 00102$ + ld a, (0x09, sp) + cp a, #0x0a + jrne 00102$ +; ../_ltoa.c: 79: *string++ = '-'; + ldw x, (0x07, sp) + ld a, #0x2d + ld (x), a + incw x + ldw (0x07, sp), x +; ../_ltoa.c: 80: value = -value; + ldw y, (0x05, sp) + negw y + ldw x, (0x03, sp) + jrnc 00120$ + incw x +00120$: + negw x + ldw (0x05, sp), y + ldw (0x03, sp), x +00102$: +; ../_ltoa.c: 82: _ultoa(value, string, radix); + ld a, (0x09, sp) + push a + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + call __ultoa + addw sp, #7 +; ../_ltoa.c: 83: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_ltoa.lst b/device/lib/stm8/_ltoa.lst new file mode 100644 index 0000000..1df7397 --- /dev/null +++ b/device/lib/stm8/_ltoa.lst @@ -0,0 +1,178 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _ltoa + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __ltoa + 12 .globl __ultoa + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_ltoa.c: 56: void _ultoa(unsigned long value, char* string, unsigned char radix) + 51 ; ----------------------------------------- + 52 ; function _ultoa + 53 ; ----------------------------------------- + 000000 54 __ultoa: + 000000 52 27 [ 2] 55 sub sp, #39 + 56 ; ../_ltoa.c: 61: do { + 000002 96 [ 1] 57 ldw x, sp + 000003 1C 00 05 [ 2] 58 addw x, #5 + 000006 1F 25 [ 2] 59 ldw (0x25, sp), x + 000008 A6 20 [ 1] 60 ld a, #0x20 + 00000A 6B 27 [ 1] 61 ld (0x27, sp), a + 00000C 62 00103$: + 63 ; ../_ltoa.c: 62: unsigned char c = '0' + (value % radix); + 00000C 7B 30 [ 1] 64 ld a, (0x30, sp) + 00000E 6B 04 [ 1] 65 ld (0x04, sp), a + 000010 0F 03 [ 1] 66 clr (0x03, sp) + 000012 0F 02 [ 1] 67 clr (0x02, sp) + 000014 0F 01 [ 1] 68 clr (0x01, sp) + 000016 1E 03 [ 2] 69 ldw x, (0x03, sp) + 000018 89 [ 2] 70 pushw x + 000019 1E 03 [ 2] 71 ldw x, (0x03, sp) + 00001B 89 [ 2] 72 pushw x + 00001C 1E 30 [ 2] 73 ldw x, (0x30, sp) + 00001E 89 [ 2] 74 pushw x + 00001F 1E 30 [ 2] 75 ldw x, (0x30, sp) + 000021 89 [ 2] 76 pushw x + 000022 CDr00r00 [ 4] 77 call __modulong + 000025 5B 08 [ 2] 78 addw sp, #8 + 000027 9F [ 1] 79 ld a, xl + 000028 AB 30 [ 1] 80 add a, #0x30 + 81 ; ../_ltoa.c: 63: if (c > (unsigned char)'9') + 00002A A1 39 [ 1] 82 cp a, #0x39 + 00002C 23 02 [ 2] 83 jrule 00102$ + 84 ; ../_ltoa.c: 64: c += 'A' - '9' - 1; + 00002E AB 07 [ 1] 85 add a, #0x07 + 000030 86 00102$: + 87 ; ../_ltoa.c: 65: buffer[--index] = c; + 000030 0A 27 [ 1] 88 dec (0x27, sp) + 000032 5F [ 1] 89 clrw x + 000033 41 [ 1] 90 exg a, xl + 000034 7B 27 [ 1] 91 ld a, (0x27, sp) + 000036 41 [ 1] 92 exg a, xl + 000037 72 FB 25 [ 2] 93 addw x, (0x25, sp) + 00003A F7 [ 1] 94 ld (x), a + 95 ; ../_ltoa.c: 66: value /= radix; + 00003B 1E 03 [ 2] 96 ldw x, (0x03, sp) + 00003D 89 [ 2] 97 pushw x + 00003E 1E 03 [ 2] 98 ldw x, (0x03, sp) + 000040 89 [ 2] 99 pushw x + 000041 1E 30 [ 2] 100 ldw x, (0x30, sp) + 000043 89 [ 2] 101 pushw x + 000044 1E 30 [ 2] 102 ldw x, (0x30, sp) + 000046 89 [ 2] 103 pushw x + 000047 CDr00r00 [ 4] 104 call __divulong + 00004A 5B 08 [ 2] 105 addw sp, #8 + 00004C 1F 2C [ 2] 106 ldw (0x2c, sp), x + 00004E 17 2A [ 2] 107 ldw (0x2a, sp), y + 108 ; ../_ltoa.c: 67: } while (value); + 000050 1E 2C [ 2] 109 ldw x, (0x2c, sp) + 000052 26 B8 [ 1] 110 jrne 00103$ + 000054 1E 2A [ 2] 111 ldw x, (0x2a, sp) + 000056 26 B4 [ 1] 112 jrne 00103$ + 113 ; ../_ltoa.c: 69: do { + 000058 1E 2E [ 2] 114 ldw x, (0x2e, sp) + 00005A 115 00106$: + 116 ; ../_ltoa.c: 70: *string++ = buffer[index]; + 00005A 90 5F [ 1] 117 clrw y + 00005C 7B 27 [ 1] 118 ld a, (0x27, sp) + 00005E 90 97 [ 1] 119 ld yl, a + 000060 72 F9 25 [ 2] 120 addw y, (0x25, sp) + 000063 90 F6 [ 1] 121 ld a, (y) + 000065 F7 [ 1] 122 ld (x), a + 000066 5C [ 1] 123 incw x + 124 ; ../_ltoa.c: 71: } while ( ++index != NUMBER_OF_DIGITS ); + 000067 0C 27 [ 1] 125 inc (0x27, sp) + 000069 7B 27 [ 1] 126 ld a, (0x27, sp) + 00006B A1 20 [ 1] 127 cp a, #0x20 + 00006D 26 EB [ 1] 128 jrne 00106$ + 129 ; ../_ltoa.c: 73: *string = 0; /* string terminator */ + 00006F 7F [ 1] 130 clr (x) + 131 ; ../_ltoa.c: 74: } + 000070 5B 27 [ 2] 132 addw sp, #39 + 000072 81 [ 4] 133 ret + 134 ; ../_ltoa.c: 76: void _ltoa(long value, char* string, unsigned char radix) + 135 ; ----------------------------------------- + 136 ; function _ltoa + 137 ; ----------------------------------------- + 000073 138 __ltoa: + 139 ; ../_ltoa.c: 78: if (value < 0 && radix == 10) { + 000073 0D 03 [ 1] 140 tnz (0x03, sp) + 000075 2A 1C [ 1] 141 jrpl 00102$ + 000077 7B 09 [ 1] 142 ld a, (0x09, sp) + 000079 A1 0A [ 1] 143 cp a, #0x0a + 00007B 26 16 [ 1] 144 jrne 00102$ + 145 ; ../_ltoa.c: 79: *string++ = '-'; + 00007D 1E 07 [ 2] 146 ldw x, (0x07, sp) + 00007F A6 2D [ 1] 147 ld a, #0x2d + 000081 F7 [ 1] 148 ld (x), a + 000082 5C [ 1] 149 incw x + 000083 1F 07 [ 2] 150 ldw (0x07, sp), x + 151 ; ../_ltoa.c: 80: value = -value; + 000085 16 05 [ 2] 152 ldw y, (0x05, sp) + 000087 90 50 [ 2] 153 negw y + 000089 1E 03 [ 2] 154 ldw x, (0x03, sp) + 00008B 24 01 [ 1] 155 jrnc 00120$ + 00008D 5C [ 1] 156 incw x + 00008E 157 00120$: + 00008E 50 [ 2] 158 negw x + 00008F 17 05 [ 2] 159 ldw (0x05, sp), y + 000091 1F 03 [ 2] 160 ldw (0x03, sp), x + 000093 161 00102$: + 162 ; ../_ltoa.c: 82: _ultoa(value, string, radix); + 000093 7B 09 [ 1] 163 ld a, (0x09, sp) + 000095 88 [ 1] 164 push a + 000096 1E 08 [ 2] 165 ldw x, (0x08, sp) + 000098 89 [ 2] 166 pushw x + 000099 1E 08 [ 2] 167 ldw x, (0x08, sp) + 00009B 89 [ 2] 168 pushw x + 00009C 1E 08 [ 2] 169 ldw x, (0x08, sp) + 00009E 89 [ 2] 170 pushw x + 00009F CDr00r00 [ 4] 171 call __ultoa + 0000A2 5B 07 [ 2] 172 addw sp, #7 + 173 ; ../_ltoa.c: 83: } + 0000A4 81 [ 4] 174 ret + 175 .area CODE + 176 .area CONST + 177 .area INITIALIZER + 178 .area CABS (ABS) diff --git a/device/lib/stm8/_ltoa.rel b/device/lib/stm8/_ltoa.rel new file mode 100644 index 0000000..bbc9f23 --- /dev/null +++ b/device/lib/stm8/_ltoa.rel @@ -0,0 +1,66 @@ +XH3 +H B areas 5 global symbols +M _ltoa +O -mstm8 +S .__.ABS. Def000000 +S __modulong Ref000000 +S __divulong Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size A5 flags 0 addr 0 +S __ultoa Def000000 +S __ltoa Def000073 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 27 96 1C 00 05 1F 25 A6 20 6B 27 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C 7B 30 6B 04 0F 03 0F 02 0F 01 1E 03 89 +R 00 00 00 09 +T 00 00 19 1E 03 89 1E 30 89 1E 30 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 00 26 08 9F AB 30 A1 39 23 02 AB 07 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 0A 27 5F 41 7B 27 41 72 FB 25 F7 1E 03 +R 00 00 00 09 +T 00 00 3D 89 1E 03 89 1E 30 89 1E 30 89 CD 00 00 +R 00 00 00 09 02 0E 00 02 +T 00 00 4A 5B 08 1F 2C 17 2A 1E 2C 26 B8 1E 2A 26 +R 00 00 00 09 +T 00 00 57 B4 1E 2E +R 00 00 00 09 +T 00 00 5A +R 00 00 00 09 +T 00 00 5A 90 5F 7B 27 90 97 72 F9 25 90 F6 F7 5C +R 00 00 00 09 +T 00 00 67 0C 27 7B 27 A1 20 26 EB 7F 5B 27 81 +R 00 00 00 09 +T 00 00 73 +R 00 00 00 09 +T 00 00 73 0D 03 2A 1C 7B 09 A1 0A 26 16 1E 07 A6 +R 00 00 00 09 +T 00 00 80 2D F7 5C 1F 07 16 05 90 50 1E 03 24 01 +R 00 00 00 09 +T 00 00 8D 5C +R 00 00 00 09 +T 00 00 8E +R 00 00 00 09 +T 00 00 8E 50 17 05 1F 03 +R 00 00 00 09 +T 00 00 93 +R 00 00 00 09 +T 00 00 93 7B 09 88 1E 08 89 1E 08 89 1E 08 89 CD +R 00 00 00 09 +T 00 00 A0 00 00 5B 07 81 +R 00 00 00 09 00 03 00 09 diff --git a/device/lib/stm8/_ltoa.sym b/device/lib/stm8/_ltoa.sym new file mode 100644 index 0000000..51e1755 --- /dev/null +++ b/device/lib/stm8/_ltoa.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + __divulong ****** GX + 9 __ltoa 000073 GR + __modulong ****** GX + 9 __ultoa 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size A5 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_memchr.asm b/device/lib/stm8/_memchr.asm new file mode 100644 index 0000000..043a22a --- /dev/null +++ b/device/lib/stm8/_memchr.asm @@ -0,0 +1,91 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _memchr + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _memchr +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_memchr.c: 31: void *memchr(const void *s, int c, size_t n) +; ----------------------------------------- +; function memchr +; ----------------------------------------- +_memchr: + sub sp, #5 +; ../_memchr.c: 33: unsigned char *p = (unsigned char *)s; + ldw x, (0x08, sp) +; ../_memchr.c: 34: unsigned char *end = p + n; + ldw (0x01, sp), x + addw x, (0x0c, sp) + ldw (0x03, sp), x +; ../_memchr.c: 38: return(0); + ldw x, (0x01, sp) +00105$: +; ../_memchr.c: 35: for(; p != end; p++) + cpw x, (0x03, sp) + jreq 00103$ +; ../_memchr.c: 36: if(*p == (unsigned char)c) + ld a, (x) + ld (0x05, sp), a + ld a, (0x0b, sp) + cp a, (0x05, sp) + jrne 00106$ +; ../_memchr.c: 37: return((void *)p); + ldw x, (0x01, sp) + jra 00107$ +00106$: +; ../_memchr.c: 35: for(; p != end; p++) + incw x + ldw (0x01, sp), x + jra 00105$ +00103$: +; ../_memchr.c: 38: return(0); + clrw x +00107$: +; ../_memchr.c: 39: } + addw sp, #5 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_memchr.lst b/device/lib/stm8/_memchr.lst new file mode 100644 index 0000000..4f307e5 --- /dev/null +++ b/device/lib/stm8/_memchr.lst @@ -0,0 +1,91 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _memchr + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _memchr + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_memchr.c: 31: void *memchr(const void *s, int c, size_t n) + 50 ; ----------------------------------------- + 51 ; function memchr + 52 ; ----------------------------------------- + 000000 53 _memchr: + 000000 52 05 [ 2] 54 sub sp, #5 + 55 ; ../_memchr.c: 33: unsigned char *p = (unsigned char *)s; + 000002 1E 08 [ 2] 56 ldw x, (0x08, sp) + 57 ; ../_memchr.c: 34: unsigned char *end = p + n; + 000004 1F 01 [ 2] 58 ldw (0x01, sp), x + 000006 72 FB 0C [ 2] 59 addw x, (0x0c, sp) + 000009 1F 03 [ 2] 60 ldw (0x03, sp), x + 61 ; ../_memchr.c: 38: return(0); + 00000B 1E 01 [ 2] 62 ldw x, (0x01, sp) + 00000D 63 00105$: + 64 ; ../_memchr.c: 35: for(; p != end; p++) + 00000D 13 03 [ 2] 65 cpw x, (0x03, sp) + 00000F 27 12 [ 1] 66 jreq 00103$ + 67 ; ../_memchr.c: 36: if(*p == (unsigned char)c) + 000011 F6 [ 1] 68 ld a, (x) + 000012 6B 05 [ 1] 69 ld (0x05, sp), a + 000014 7B 0B [ 1] 70 ld a, (0x0b, sp) + 000016 11 05 [ 1] 71 cp a, (0x05, sp) + 000018 26 04 [ 1] 72 jrne 00106$ + 73 ; ../_memchr.c: 37: return((void *)p); + 00001A 1E 01 [ 2] 74 ldw x, (0x01, sp) + 00001C 20 06 [ 2] 75 jra 00107$ + 00001E 76 00106$: + 77 ; ../_memchr.c: 35: for(; p != end; p++) + 00001E 5C [ 1] 78 incw x + 00001F 1F 01 [ 2] 79 ldw (0x01, sp), x + 000021 20 EA [ 2] 80 jra 00105$ + 000023 81 00103$: + 82 ; ../_memchr.c: 38: return(0); + 000023 5F [ 1] 83 clrw x + 000024 84 00107$: + 85 ; ../_memchr.c: 39: } + 000024 5B 05 [ 2] 86 addw sp, #5 + 000026 81 [ 4] 87 ret + 88 .area CODE + 89 .area CONST + 90 .area INITIALIZER + 91 .area CABS (ABS) diff --git a/device/lib/stm8/_memchr.rel b/device/lib/stm8/_memchr.rel new file mode 100644 index 0000000..f40592a --- /dev/null +++ b/device/lib/stm8/_memchr.rel @@ -0,0 +1,39 @@ +XH3 +H B areas 2 global symbols +M _memchr +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 27 flags 0 addr 0 +S _memchr Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 05 1E 08 1F 01 72 FB 0C 1F 03 1E 01 +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 13 03 27 12 F6 6B 05 7B 0B 11 05 26 04 +R 00 00 00 09 +T 00 00 1A 1E 01 20 06 +R 00 00 00 09 +T 00 00 1E +R 00 00 00 09 +T 00 00 1E 5C 1F 01 20 EA +R 00 00 00 09 +T 00 00 23 +R 00 00 00 09 +T 00 00 23 5F +R 00 00 00 09 +T 00 00 24 +R 00 00 00 09 +T 00 00 24 5B 05 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_memchr.sym b/device/lib/stm8/_memchr.sym new file mode 100644 index 0000000..2a68751 --- /dev/null +++ b/device/lib/stm8/_memchr.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _memchr 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 27 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_memcmp.asm b/device/lib/stm8/_memcmp.asm new file mode 100644 index 0000000..f79c5f6 --- /dev/null +++ b/device/lib/stm8/_memcmp.asm @@ -0,0 +1,101 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _memcmp + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _memcmp +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_memcmp.c: 31: int memcmp (const void * buf1, const void * buf2, size_t count) +; ----------------------------------------- +; function memcmp +; ----------------------------------------- +_memcmp: + sub sp, #5 +; ../_memcmp.c: 33: if (!count) +; ../_memcmp.c: 34: return(0); + ldw x, (0x0c, sp) +; ../_memcmp.c: 36: while ( --count && *((char *)buf1) == *((char *)buf2) ) { + jreq 00107$ + ldw y, (0x0c, sp) + ldw (0x04, sp), y +00104$: + ldw x, (0x04, sp) + decw x + ldw (0x04, sp), x + ldw x, (0x08, sp) + ldw y, (0x0a, sp) + ldw (0x01, sp), y + ld a, (x) + ld (0x03, sp), a + ldw y, (0x01, sp) + ld a, (y) + ldw y, (0x04, sp) + jreq 00106$ + cp a, (0x03, sp) + jrne 00106$ +; ../_memcmp.c: 37: buf1 = (char *)buf1 + 1; + incw x + ldw (0x08, sp), x +; ../_memcmp.c: 38: buf2 = (char *)buf2 + 1; + ldw x, (0x01, sp) + incw x + ldw (0x0a, sp), x + jra 00104$ +00106$: +; ../_memcmp.c: 41: return( *((unsigned char *)buf1) - *((unsigned char *)buf2) ); + clrw x + exg a, xl + ld a, (0x03, sp) + exg a, xl + ld (0x05, sp), a + clr (0x04, sp) + subw x, (0x04, sp) +00107$: +; ../_memcmp.c: 42: } + addw sp, #5 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_memcmp.lst b/device/lib/stm8/_memcmp.lst new file mode 100644 index 0000000..3822791 --- /dev/null +++ b/device/lib/stm8/_memcmp.lst @@ -0,0 +1,101 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _memcmp + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _memcmp + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_memcmp.c: 31: int memcmp (const void * buf1, const void * buf2, size_t count) + 50 ; ----------------------------------------- + 51 ; function memcmp + 52 ; ----------------------------------------- + 000000 53 _memcmp: + 000000 52 05 [ 2] 54 sub sp, #5 + 55 ; ../_memcmp.c: 33: if (!count) + 56 ; ../_memcmp.c: 34: return(0); + 000002 1E 0C [ 2] 57 ldw x, (0x0c, sp) + 58 ; ../_memcmp.c: 36: while ( --count && *((char *)buf1) == *((char *)buf2) ) { + 000004 27 34 [ 1] 59 jreq 00107$ + 000006 16 0C [ 2] 60 ldw y, (0x0c, sp) + 000008 17 04 [ 2] 61 ldw (0x04, sp), y + 00000A 62 00104$: + 00000A 1E 04 [ 2] 63 ldw x, (0x04, sp) + 00000C 5A [ 2] 64 decw x + 00000D 1F 04 [ 2] 65 ldw (0x04, sp), x + 00000F 1E 08 [ 2] 66 ldw x, (0x08, sp) + 000011 16 0A [ 2] 67 ldw y, (0x0a, sp) + 000013 17 01 [ 2] 68 ldw (0x01, sp), y + 000015 F6 [ 1] 69 ld a, (x) + 000016 6B 03 [ 1] 70 ld (0x03, sp), a + 000018 16 01 [ 2] 71 ldw y, (0x01, sp) + 00001A 90 F6 [ 1] 72 ld a, (y) + 00001C 16 04 [ 2] 73 ldw y, (0x04, sp) + 00001E 27 0E [ 1] 74 jreq 00106$ + 000020 11 03 [ 1] 75 cp a, (0x03, sp) + 000022 26 0A [ 1] 76 jrne 00106$ + 77 ; ../_memcmp.c: 37: buf1 = (char *)buf1 + 1; + 000024 5C [ 1] 78 incw x + 000025 1F 08 [ 2] 79 ldw (0x08, sp), x + 80 ; ../_memcmp.c: 38: buf2 = (char *)buf2 + 1; + 000027 1E 01 [ 2] 81 ldw x, (0x01, sp) + 000029 5C [ 1] 82 incw x + 00002A 1F 0A [ 2] 83 ldw (0x0a, sp), x + 00002C 20 DC [ 2] 84 jra 00104$ + 00002E 85 00106$: + 86 ; ../_memcmp.c: 41: return( *((unsigned char *)buf1) - *((unsigned char *)buf2) ); + 00002E 5F [ 1] 87 clrw x + 00002F 41 [ 1] 88 exg a, xl + 000030 7B 03 [ 1] 89 ld a, (0x03, sp) + 000032 41 [ 1] 90 exg a, xl + 000033 6B 05 [ 1] 91 ld (0x05, sp), a + 000035 0F 04 [ 1] 92 clr (0x04, sp) + 000037 72 F0 04 [ 2] 93 subw x, (0x04, sp) + 00003A 94 00107$: + 95 ; ../_memcmp.c: 42: } + 00003A 5B 05 [ 2] 96 addw sp, #5 + 00003C 81 [ 4] 97 ret + 98 .area CODE + 99 .area CONST + 100 .area INITIALIZER + 101 .area CABS (ABS) diff --git a/device/lib/stm8/_memcmp.rel b/device/lib/stm8/_memcmp.rel new file mode 100644 index 0000000..cd3bb03 --- /dev/null +++ b/device/lib/stm8/_memcmp.rel @@ -0,0 +1,37 @@ +XH3 +H B areas 2 global symbols +M _memcmp +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 3D flags 0 addr 0 +S _memcmp Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 05 1E 0C 27 34 16 0C 17 04 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 1E 04 5A 1F 04 1E 08 16 0A 17 01 F6 6B +R 00 00 00 09 +T 00 00 17 03 16 01 90 F6 16 04 27 0E 11 03 26 0A +R 00 00 00 09 +T 00 00 24 5C 1F 08 1E 01 5C 1F 0A 20 DC +R 00 00 00 09 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E 5F 41 7B 03 41 6B 05 0F 04 72 F0 04 +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 5B 05 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_memcmp.sym b/device/lib/stm8/_memcmp.sym new file mode 100644 index 0000000..7371d2b --- /dev/null +++ b/device/lib/stm8/_memcmp.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _memcmp 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 3D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_memmove.asm b/device/lib/stm8/_memmove.asm new file mode 100644 index 0000000..e9b7c0a --- /dev/null +++ b/device/lib/stm8/_memmove.asm @@ -0,0 +1,140 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _memmove + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _memmove +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_memmove.c: 34: void * memmove (void * dst, const void * src, size_t acount) +; ----------------------------------------- +; function memmove +; ----------------------------------------- +_memmove: + sub sp, #10 +; ../_memmove.c: 36: void * ret = dst; + ldw y, (0x0d, sp) + ldw (0x03, sp), y +; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) { + ldw x, (0x0f, sp) + ldw y, (0x0d, sp) + ldw (0x01, sp), y +; ../_memmove.c: 44: d = ((char *)dst)+acount-1; + ldw y, (0x0d, sp) + ldw (0x05, sp), y +; ../_memmove.c: 45: s = ((char *)src)+acount-1; + ldw y, (0x0f, sp) + ldw (0x07, sp), y +; ../_memmove.c: 46: while (acount--) { + ldw y, (0x11, sp) + ldw (0x09, sp), y +; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) { + cpw x, (0x01, sp) + jrnc 00108$ +; ../_memmove.c: 44: d = ((char *)dst)+acount-1; + ldw x, (0x05, sp) + addw x, (0x11, sp) + decw x + exgw x, y +; ../_memmove.c: 45: s = ((char *)src)+acount-1; + ldw x, (0x07, sp) + addw x, (0x11, sp) + decw x +; ../_memmove.c: 46: while (acount--) { + ldw (0x05, sp), x + ldw (0x07, sp), y + ldw y, (0x09, sp) +00101$: + ldw x, y + decw y + tnzw x + jreq 00109$ +; ../_memmove.c: 47: *d-- = *s--; + ldw x, (0x05, sp) + ld a, (x) + ldw x, (0x05, sp) + decw x + ldw (0x05, sp), x + ldw x, (0x07, sp) + ld (x), a + ldw x, (0x07, sp) + decw x + ldw (0x07, sp), x + jra 00101$ +00108$: +; ../_memmove.c: 54: d = dst; + ldw x, (0x05, sp) +; ../_memmove.c: 55: s = src; + ldw y, (0x07, sp) +; ../_memmove.c: 56: while (acount--) { + ldw (0x05, sp), y + ldw (0x07, sp), x +00104$: + ldw x, (0x09, sp) + ldw y, (0x09, sp) + decw y + ldw (0x09, sp), y + tnzw x + jreq 00109$ +; ../_memmove.c: 57: *d++ = *s++; + ldw x, (0x05, sp) + ld a, (x) + ldw x, (0x05, sp) + incw x + ldw (0x05, sp), x + ldw x, (0x07, sp) + ld (x), a + ldw x, (0x07, sp) + incw x + ldw (0x07, sp), x + jra 00104$ +00109$: +; ../_memmove.c: 61: return(ret); + ldw x, (0x03, sp) +; ../_memmove.c: 62: } + addw sp, #10 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_memmove.lst b/device/lib/stm8/_memmove.lst new file mode 100644 index 0000000..9427379 --- /dev/null +++ b/device/lib/stm8/_memmove.lst @@ -0,0 +1,140 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _memmove + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _memmove + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_memmove.c: 34: void * memmove (void * dst, const void * src, size_t acount) + 50 ; ----------------------------------------- + 51 ; function memmove + 52 ; ----------------------------------------- + 000000 53 _memmove: + 000000 52 0A [ 2] 54 sub sp, #10 + 55 ; ../_memmove.c: 36: void * ret = dst; + 000002 16 0D [ 2] 56 ldw y, (0x0d, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 58 ; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) { + 000006 1E 0F [ 2] 59 ldw x, (0x0f, sp) + 000008 16 0D [ 2] 60 ldw y, (0x0d, sp) + 00000A 17 01 [ 2] 61 ldw (0x01, sp), y + 62 ; ../_memmove.c: 44: d = ((char *)dst)+acount-1; + 00000C 16 0D [ 2] 63 ldw y, (0x0d, sp) + 00000E 17 05 [ 2] 64 ldw (0x05, sp), y + 65 ; ../_memmove.c: 45: s = ((char *)src)+acount-1; + 000010 16 0F [ 2] 66 ldw y, (0x0f, sp) + 000012 17 07 [ 2] 67 ldw (0x07, sp), y + 68 ; ../_memmove.c: 46: while (acount--) { + 000014 16 11 [ 2] 69 ldw y, (0x11, sp) + 000016 17 09 [ 2] 70 ldw (0x09, sp), y + 71 ; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) { + 000018 13 01 [ 2] 72 cpw x, (0x01, sp) + 00001A 24 2B [ 1] 73 jrnc 00108$ + 74 ; ../_memmove.c: 44: d = ((char *)dst)+acount-1; + 00001C 1E 05 [ 2] 75 ldw x, (0x05, sp) + 00001E 72 FB 11 [ 2] 76 addw x, (0x11, sp) + 000021 5A [ 2] 77 decw x + 000022 51 [ 1] 78 exgw x, y + 79 ; ../_memmove.c: 45: s = ((char *)src)+acount-1; + 000023 1E 07 [ 2] 80 ldw x, (0x07, sp) + 000025 72 FB 11 [ 2] 81 addw x, (0x11, sp) + 000028 5A [ 2] 82 decw x + 83 ; ../_memmove.c: 46: while (acount--) { + 000029 1F 05 [ 2] 84 ldw (0x05, sp), x + 00002B 17 07 [ 2] 85 ldw (0x07, sp), y + 00002D 16 09 [ 2] 86 ldw y, (0x09, sp) + 00002F 87 00101$: + 00002F 93 [ 1] 88 ldw x, y + 000030 90 5A [ 2] 89 decw y + 000032 5D [ 2] 90 tnzw x + 000033 27 37 [ 1] 91 jreq 00109$ + 92 ; ../_memmove.c: 47: *d-- = *s--; + 000035 1E 05 [ 2] 93 ldw x, (0x05, sp) + 000037 F6 [ 1] 94 ld a, (x) + 000038 1E 05 [ 2] 95 ldw x, (0x05, sp) + 00003A 5A [ 2] 96 decw x + 00003B 1F 05 [ 2] 97 ldw (0x05, sp), x + 00003D 1E 07 [ 2] 98 ldw x, (0x07, sp) + 00003F F7 [ 1] 99 ld (x), a + 000040 1E 07 [ 2] 100 ldw x, (0x07, sp) + 000042 5A [ 2] 101 decw x + 000043 1F 07 [ 2] 102 ldw (0x07, sp), x + 000045 20 E8 [ 2] 103 jra 00101$ + 000047 104 00108$: + 105 ; ../_memmove.c: 54: d = dst; + 000047 1E 05 [ 2] 106 ldw x, (0x05, sp) + 107 ; ../_memmove.c: 55: s = src; + 000049 16 07 [ 2] 108 ldw y, (0x07, sp) + 109 ; ../_memmove.c: 56: while (acount--) { + 00004B 17 05 [ 2] 110 ldw (0x05, sp), y + 00004D 1F 07 [ 2] 111 ldw (0x07, sp), x + 00004F 112 00104$: + 00004F 1E 09 [ 2] 113 ldw x, (0x09, sp) + 000051 16 09 [ 2] 114 ldw y, (0x09, sp) + 000053 90 5A [ 2] 115 decw y + 000055 17 09 [ 2] 116 ldw (0x09, sp), y + 000057 5D [ 2] 117 tnzw x + 000058 27 12 [ 1] 118 jreq 00109$ + 119 ; ../_memmove.c: 57: *d++ = *s++; + 00005A 1E 05 [ 2] 120 ldw x, (0x05, sp) + 00005C F6 [ 1] 121 ld a, (x) + 00005D 1E 05 [ 2] 122 ldw x, (0x05, sp) + 00005F 5C [ 1] 123 incw x + 000060 1F 05 [ 2] 124 ldw (0x05, sp), x + 000062 1E 07 [ 2] 125 ldw x, (0x07, sp) + 000064 F7 [ 1] 126 ld (x), a + 000065 1E 07 [ 2] 127 ldw x, (0x07, sp) + 000067 5C [ 1] 128 incw x + 000068 1F 07 [ 2] 129 ldw (0x07, sp), x + 00006A 20 E3 [ 2] 130 jra 00104$ + 00006C 131 00109$: + 132 ; ../_memmove.c: 61: return(ret); + 00006C 1E 03 [ 2] 133 ldw x, (0x03, sp) + 134 ; ../_memmove.c: 62: } + 00006E 5B 0A [ 2] 135 addw sp, #10 + 000070 81 [ 4] 136 ret + 137 .area CODE + 138 .area CONST + 139 .area INITIALIZER + 140 .area CABS (ABS) diff --git a/device/lib/stm8/_memmove.rel b/device/lib/stm8/_memmove.rel new file mode 100644 index 0000000..8050028 --- /dev/null +++ b/device/lib/stm8/_memmove.rel @@ -0,0 +1,49 @@ +XH3 +H B areas 2 global symbols +M _memmove +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 71 flags 0 addr 0 +S _memmove Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 16 0D 17 03 1E 0F 16 0D 17 01 16 +R 00 00 00 09 +T 00 00 0D 0D 17 05 16 0F 17 07 16 11 17 09 13 01 +R 00 00 00 09 +T 00 00 1A 24 2B 1E 05 72 FB 11 5A 51 1E 07 72 FB +R 00 00 00 09 +T 00 00 27 11 5A 1F 05 17 07 16 09 +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 93 90 5A 5D 27 37 1E 05 F6 1E 05 5A 1F +R 00 00 00 09 +T 00 00 3C 05 1E 07 F7 1E 07 5A 1F 07 20 E8 +R 00 00 00 09 +T 00 00 47 +R 00 00 00 09 +T 00 00 47 1E 05 16 07 17 05 1F 07 +R 00 00 00 09 +T 00 00 4F +R 00 00 00 09 +T 00 00 4F 1E 09 16 09 90 5A 17 09 5D 27 12 1E 05 +R 00 00 00 09 +T 00 00 5C F6 1E 05 5C 1F 05 1E 07 F7 1E 07 5C 1F +R 00 00 00 09 +T 00 00 69 07 20 E3 +R 00 00 00 09 +T 00 00 6C +R 00 00 00 09 +T 00 00 6C 1E 03 5B 0A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_memmove.sym b/device/lib/stm8/_memmove.sym new file mode 100644 index 0000000..588ce3b --- /dev/null +++ b/device/lib/stm8/_memmove.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _memmove 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 71 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_memset.asm b/device/lib/stm8/_memset.asm new file mode 100644 index 0000000..3f1a677 --- /dev/null +++ b/device/lib/stm8/_memset.asm @@ -0,0 +1,83 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _memset + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _memset +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_memset.c: 41: void *memset (void *s, int c, size_t n) +; ----------------------------------------- +; function memset +; ----------------------------------------- +_memset: + sub sp, #2 +; ../_memset.c: 44: register unsigned char *ret = s; + ldw x, (0x05, sp) +; ../_memset.c: 46: while (n--) + ldw (0x01, sp), x + ldw y, (0x09, sp) +00101$: + ldw x, y + decw y + tnzw x + jreq 00103$ +; ../_memset.c: 48: *(unsigned char *) ret = c; + ld a, (0x08, sp) + ldw x, (0x01, sp) + ld (x), a +; ../_memset.c: 49: ret = ((unsigned char *) ret) + 1; + ldw x, (0x01, sp) + incw x + ldw (0x01, sp), x + jra 00101$ +00103$: +; ../_memset.c: 52: return s; + ldw x, (0x05, sp) +; ../_memset.c: 53: } + addw sp, #2 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_memset.lst b/device/lib/stm8/_memset.lst new file mode 100644 index 0000000..3760029 --- /dev/null +++ b/device/lib/stm8/_memset.lst @@ -0,0 +1,83 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _memset + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _memset + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_memset.c: 41: void *memset (void *s, int c, size_t n) + 50 ; ----------------------------------------- + 51 ; function memset + 52 ; ----------------------------------------- + 000000 53 _memset: + 000000 52 02 [ 2] 54 sub sp, #2 + 55 ; ../_memset.c: 44: register unsigned char *ret = s; + 000002 1E 05 [ 2] 56 ldw x, (0x05, sp) + 57 ; ../_memset.c: 46: while (n--) + 000004 1F 01 [ 2] 58 ldw (0x01, sp), x + 000006 16 09 [ 2] 59 ldw y, (0x09, sp) + 000008 60 00101$: + 000008 93 [ 1] 61 ldw x, y + 000009 90 5A [ 2] 62 decw y + 00000B 5D [ 2] 63 tnzw x + 00000C 27 0C [ 1] 64 jreq 00103$ + 65 ; ../_memset.c: 48: *(unsigned char *) ret = c; + 00000E 7B 08 [ 1] 66 ld a, (0x08, sp) + 000010 1E 01 [ 2] 67 ldw x, (0x01, sp) + 000012 F7 [ 1] 68 ld (x), a + 69 ; ../_memset.c: 49: ret = ((unsigned char *) ret) + 1; + 000013 1E 01 [ 2] 70 ldw x, (0x01, sp) + 000015 5C [ 1] 71 incw x + 000016 1F 01 [ 2] 72 ldw (0x01, sp), x + 000018 20 EE [ 2] 73 jra 00101$ + 00001A 74 00103$: + 75 ; ../_memset.c: 52: return s; + 00001A 1E 05 [ 2] 76 ldw x, (0x05, sp) + 77 ; ../_memset.c: 53: } + 00001C 5B 02 [ 2] 78 addw sp, #2 + 00001E 81 [ 4] 79 ret + 80 .area CODE + 81 .area CONST + 82 .area INITIALIZER + 83 .area CABS (ABS) diff --git a/device/lib/stm8/_memset.rel b/device/lib/stm8/_memset.rel new file mode 100644 index 0000000..bbb7a40 --- /dev/null +++ b/device/lib/stm8/_memset.rel @@ -0,0 +1,31 @@ +XH3 +H B areas 2 global symbols +M _memset +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1F flags 0 addr 0 +S _memset Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 02 1E 05 1F 01 16 09 +R 00 00 00 09 +T 00 00 08 +R 00 00 00 09 +T 00 00 08 93 90 5A 5D 27 0C 7B 08 1E 01 F7 1E 01 +R 00 00 00 09 +T 00 00 15 5C 1F 01 20 EE +R 00 00 00 09 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 1E 05 5B 02 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_memset.sym b/device/lib/stm8/_memset.sym new file mode 100644 index 0000000..044f739 --- /dev/null +++ b/device/lib/stm8/_memset.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _memset 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_modschar.asm b/device/lib/stm8/_modschar.asm new file mode 100644 index 0000000..6b876d7 --- /dev/null +++ b/device/lib/stm8/_modschar.asm @@ -0,0 +1,122 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _modschar + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __modschar + .globl __moduschar + .globl __modsuchar +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_modschar.c: 31: _modschar (signed char x, signed char y) +; ----------------------------------------- +; function _modschar +; ----------------------------------------- +__modschar: +; ../_modschar.c: 33: return ((int)x % (int)y); + ld a, (0x03, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x04, sp) + ld yl, a + rlc a + clr a + sbc a, #0x00 + ld yh, a + pushw y + pushw x + call __modsint + addw sp, #4 +; ../_modschar.c: 34: } + ret +; ../_modschar.c: 37: _moduschar (unsigned char x, unsigned char y) +; ----------------------------------------- +; function _moduschar +; ----------------------------------------- +__moduschar: + sub sp, #2 +; ../_modschar.c: 39: return ((int)((signed char)x) % (int)y); + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x06, sp) + ld (0x02, sp), a + clr (0x01, sp) + ldw y, (0x01, sp) + pushw y + pushw x + call __modsint +; ../_modschar.c: 40: } + addw sp, #6 + ret +; ../_modschar.c: 43: _modsuchar (signed char x, signed char y) +; ----------------------------------------- +; function _modsuchar +; ----------------------------------------- +__modsuchar: +; ../_modschar.c: 45: return ((int)((unsigned char)x) % (int)y); + ld a, (0x03, sp) + clrw y + ld yl, a + ld a, (0x04, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + pushw x + pushw y + call __modsint + addw sp, #4 +; ../_modschar.c: 46: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_modschar.lst b/device/lib/stm8/_modschar.lst new file mode 100644 index 0000000..453fd16 --- /dev/null +++ b/device/lib/stm8/_modschar.lst @@ -0,0 +1,122 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _modschar + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __modschar + 12 .globl __moduschar + 13 .globl __modsuchar + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../_modschar.c: 31: _modschar (signed char x, signed char y) + 52 ; ----------------------------------------- + 53 ; function _modschar + 54 ; ----------------------------------------- + 000000 55 __modschar: + 56 ; ../_modschar.c: 33: return ((int)x % (int)y); + 000000 7B 03 [ 1] 57 ld a, (0x03, sp) + 000002 97 [ 1] 58 ld xl, a + 000003 49 [ 1] 59 rlc a + 000004 4F [ 1] 60 clr a + 000005 A2 00 [ 1] 61 sbc a, #0x00 + 000007 95 [ 1] 62 ld xh, a + 000008 7B 04 [ 1] 63 ld a, (0x04, sp) + 00000A 90 97 [ 1] 64 ld yl, a + 00000C 49 [ 1] 65 rlc a + 00000D 4F [ 1] 66 clr a + 00000E A2 00 [ 1] 67 sbc a, #0x00 + 000010 90 95 [ 1] 68 ld yh, a + 000012 90 89 [ 2] 69 pushw y + 000014 89 [ 2] 70 pushw x + 000015 CDr00r00 [ 4] 71 call __modsint + 000018 5B 04 [ 2] 72 addw sp, #4 + 73 ; ../_modschar.c: 34: } + 00001A 81 [ 4] 74 ret + 75 ; ../_modschar.c: 37: _moduschar (unsigned char x, unsigned char y) + 76 ; ----------------------------------------- + 77 ; function _moduschar + 78 ; ----------------------------------------- + 00001B 79 __moduschar: + 00001B 52 02 [ 2] 80 sub sp, #2 + 81 ; ../_modschar.c: 39: return ((int)((signed char)x) % (int)y); + 00001D 7B 05 [ 1] 82 ld a, (0x05, sp) + 00001F 97 [ 1] 83 ld xl, a + 000020 49 [ 1] 84 rlc a + 000021 4F [ 1] 85 clr a + 000022 A2 00 [ 1] 86 sbc a, #0x00 + 000024 95 [ 1] 87 ld xh, a + 000025 7B 06 [ 1] 88 ld a, (0x06, sp) + 000027 6B 02 [ 1] 89 ld (0x02, sp), a + 000029 0F 01 [ 1] 90 clr (0x01, sp) + 00002B 16 01 [ 2] 91 ldw y, (0x01, sp) + 00002D 90 89 [ 2] 92 pushw y + 00002F 89 [ 2] 93 pushw x + 000030 CDr00r00 [ 4] 94 call __modsint + 95 ; ../_modschar.c: 40: } + 000033 5B 06 [ 2] 96 addw sp, #6 + 000035 81 [ 4] 97 ret + 98 ; ../_modschar.c: 43: _modsuchar (signed char x, signed char y) + 99 ; ----------------------------------------- + 100 ; function _modsuchar + 101 ; ----------------------------------------- + 000036 102 __modsuchar: + 103 ; ../_modschar.c: 45: return ((int)((unsigned char)x) % (int)y); + 000036 7B 03 [ 1] 104 ld a, (0x03, sp) + 000038 90 5F [ 1] 105 clrw y + 00003A 90 97 [ 1] 106 ld yl, a + 00003C 7B 04 [ 1] 107 ld a, (0x04, sp) + 00003E 97 [ 1] 108 ld xl, a + 00003F 49 [ 1] 109 rlc a + 000040 4F [ 1] 110 clr a + 000041 A2 00 [ 1] 111 sbc a, #0x00 + 000043 95 [ 1] 112 ld xh, a + 000044 89 [ 2] 113 pushw x + 000045 90 89 [ 2] 114 pushw y + 000047 CDr00r00 [ 4] 115 call __modsint + 00004A 5B 04 [ 2] 116 addw sp, #4 + 117 ; ../_modschar.c: 46: } + 00004C 81 [ 4] 118 ret + 119 .area CODE + 120 .area CONST + 121 .area INITIALIZER + 122 .area CABS (ABS) diff --git a/device/lib/stm8/_modschar.rel b/device/lib/stm8/_modschar.rel new file mode 100644 index 0000000..7c5e914 --- /dev/null +++ b/device/lib/stm8/_modschar.rel @@ -0,0 +1,42 @@ +XH3 +H B areas 5 global symbols +M _modschar +O -mstm8 +S .__.ABS. Def000000 +S __modsint Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 4D flags 0 addr 0 +S __modsuchar Def000036 +S __moduschar Def00001B +S __modschar Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 03 97 49 4F A2 00 95 7B 04 90 97 49 +R 00 00 00 09 +T 00 00 0D 4F A2 00 90 95 90 89 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 01 +T 00 00 1A 81 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 52 02 7B 05 97 49 4F A2 00 95 7B 06 6B +R 00 00 00 09 +T 00 00 28 02 0F 01 16 01 90 89 89 CD 00 00 5B 06 +R 00 00 00 09 02 0C 00 01 +T 00 00 35 81 +R 00 00 00 09 +T 00 00 36 +R 00 00 00 09 +T 00 00 36 7B 03 90 5F 90 97 7B 04 97 49 4F A2 00 +R 00 00 00 09 +T 00 00 43 95 89 90 89 CD 00 00 5B 04 81 +R 00 00 00 09 02 08 00 01 diff --git a/device/lib/stm8/_modschar.sym b/device/lib/stm8/_modschar.sym new file mode 100644 index 0000000..77e2bdf --- /dev/null +++ b/device/lib/stm8/_modschar.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __modschar 000000 GR + __modsint ****** GX + 9 __modsuchar 000036 GR + 9 __moduschar 00001B GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 4D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_modsint.lst b/device/lib/stm8/_modsint.lst new file mode 100644 index 0000000..06def73 --- /dev/null +++ b/device/lib/stm8/_modsint.lst @@ -0,0 +1,49 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _modsint.s + 3 ; + 4 ; Copyright (C) 2014, Krzysztof Nikiel, Ben Shi + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __modsint + 30 + 31 .area CODE + 000000 32 __modsint: + 000000 16 05 [ 2] 33 ldw y, (#5, sp) + 000002 1E 03 [ 2] 34 ldw x, (#3, sp) + 000004 9E [ 1] 35 ld a, xh + 000005 2A 01 [ 1] 36 jrpl __modsint_1 + 000007 50 [ 2] 37 negw x + 000008 38 __modsint_1: + 000008 90 5D [ 2] 39 tnzw y + 00000A 2A 02 [ 1] 40 jrpl __modsint_2 + 00000C 90 50 [ 2] 41 negw y + 00000E 42 __modsint_2: + 00000E 65 [ 2] 43 divw x, y + 00000F 4D [ 1] 44 tnz a + 000010 2A 02 [ 1] 45 jrpl __modsint_3 + 000012 90 50 [ 2] 46 negw y + 000014 47 __modsint_3: + 000014 93 [ 1] 48 ldw x, y + 000015 81 [ 4] 49 ret diff --git a/device/lib/stm8/_modsint.rel b/device/lib/stm8/_modsint.rel new file mode 100644 index 0000000..c836888 --- /dev/null +++ b/device/lib/stm8/_modsint.rel @@ -0,0 +1,22 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 16 flags 0 addr 0 +S __modsint Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 16 05 1E 03 9E 2A 01 50 +R 00 00 00 01 +T 00 00 08 +R 00 00 00 01 +T 00 00 08 90 5D 2A 02 90 50 +R 00 00 00 01 +T 00 00 0E +R 00 00 00 01 +T 00 00 0E 65 4D 2A 02 90 50 +R 00 00 00 01 +T 00 00 14 +R 00 00 00 01 +T 00 00 14 93 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_modsint.s b/device/lib/stm8/_modsint.s new file mode 100644 index 0000000..bae3771 --- /dev/null +++ b/device/lib/stm8/_modsint.s @@ -0,0 +1,49 @@ +;-------------------------------------------------------------------------- +; _modsint.s +; +; Copyright (C) 2014, Krzysztof Nikiel, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl __modsint + + .area CODE +__modsint: + ldw y, (#5, sp) + ldw x, (#3, sp) + ld a, xh + jrpl __modsint_1 + negw x +__modsint_1: + tnzw y + jrpl __modsint_2 + negw y +__modsint_2: + divw x, y + tnz a + jrpl __modsint_3 + negw y +__modsint_3: + ldw x, y + ret diff --git a/device/lib/stm8/_modsint.sym b/device/lib/stm8/_modsint.sym new file mode 100644 index 0000000..fb5e966 --- /dev/null +++ b/device/lib/stm8/_modsint.sym @@ -0,0 +1,17 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 __modsin 000000 GR | 1 __modsin 000008 R + 1 __modsin 00000E R | 1 __modsin 000014 R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 16 flags 0 + diff --git a/device/lib/stm8/_modslong.lst b/device/lib/stm8/_modslong.lst new file mode 100644 index 0000000..06a4fb0 --- /dev/null +++ b/device/lib/stm8/_modslong.lst @@ -0,0 +1,56 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _modslong.s + 3 ; + 4 ; Copyright (C) 2014, Ben Shi + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __modslong + 30 + 31 .area CODE + 000000 32 __modslong: + 000000 1E 09 [ 2] 33 ldw x, (#0x09, sp) + 000002 16 07 [ 2] 34 ldw y, (#0x07, sp) + 000004 2A 03 [ 1] 35 jrpl __modslong_0 + 000006 CDr00r00 [ 4] 36 call __fast_long_neg + 000009 37 __modslong_0: + 000009 89 [ 2] 38 pushw x + 00000A 90 89 [ 2] 39 pushw y + 00000C 40 __modslong_1: + 00000C 1E 09 [ 2] 41 ldw x, (#0x09, sp) + 00000E 16 07 [ 2] 42 ldw y, (#0x07, sp) + 000010 2A 03 [ 1] 43 jrpl __modslong_2 + 000012 CDr00r00 [ 4] 44 call __fast_long_neg + 000015 45 __modslong_2: + 000015 89 [ 2] 46 pushw x + 000016 90 89 [ 2] 47 pushw y + 000018 48 __modslong_3: + 000018 CDr00r00 [ 4] 49 call __modulong + 00001B 5B 08 [ 2] 50 addw sp, #0x08 + 00001D 51 __modslong_4: + 00001D 7B 03 [ 1] 52 ld a, (#0x03, sp) + 00001F 2A 03 [ 1] 53 jrpl __modslong_5 + 000021 CDr00r00 [ 4] 54 call __fast_long_neg + 000024 55 __modslong_5: + 000024 81 [ 4] 56 ret diff --git a/device/lib/stm8/_modslong.rel b/device/lib/stm8/_modslong.rel new file mode 100644 index 0000000..d7a388a --- /dev/null +++ b/device/lib/stm8/_modslong.rel @@ -0,0 +1,36 @@ +XH3 +H 2 areas 4 global symbols +S __fast_long_neg Ref000000 +S .__.ABS. Def000000 +S __modulong Ref000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 25 flags 0 addr 0 +S __modslong Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 1E 09 16 07 2A 03 CD 00 00 +R 00 00 00 01 02 0A 00 00 +T 00 00 09 +R 00 00 00 01 +T 00 00 09 89 90 89 +R 00 00 00 01 +T 00 00 0C +R 00 00 00 01 +T 00 00 0C 1E 09 16 07 2A 03 CD 00 00 +R 00 00 00 01 02 0A 00 00 +T 00 00 15 +R 00 00 00 01 +T 00 00 15 89 90 89 +R 00 00 00 01 +T 00 00 18 +R 00 00 00 01 +T 00 00 18 CD 00 00 5B 08 +R 00 00 00 01 02 04 00 02 +T 00 00 1D +R 00 00 00 01 +T 00 00 1D 7B 03 2A 03 CD 00 00 +R 00 00 00 01 02 08 00 00 +T 00 00 24 +R 00 00 00 01 +T 00 00 24 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_modslong.s b/device/lib/stm8/_modslong.s new file mode 100644 index 0000000..6162d35 --- /dev/null +++ b/device/lib/stm8/_modslong.s @@ -0,0 +1,56 @@ +;-------------------------------------------------------------------------- +; _modslong.s +; +; Copyright (C) 2014, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl __modslong + + .area CODE +__modslong: + ldw x, (#0x09, sp) + ldw y, (#0x07, sp) + jrpl __modslong_0 + call __fast_long_neg +__modslong_0: + pushw x + pushw y +__modslong_1: + ldw x, (#0x09, sp) + ldw y, (#0x07, sp) + jrpl __modslong_2 + call __fast_long_neg +__modslong_2: + pushw x + pushw y +__modslong_3: + call __modulong + addw sp, #0x08 +__modslong_4: + ld a, (#0x03, sp) + jrpl __modslong_5 + call __fast_long_neg +__modslong_5: + ret diff --git a/device/lib/stm8/_modslong.sym b/device/lib/stm8/_modslong.sym new file mode 100644 index 0000000..d48dd56 --- /dev/null +++ b/device/lib/stm8/_modslong.sym @@ -0,0 +1,19 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | __fast_l ****** GX | 1 __modslo 000000 GR + 1 __modslo 000009 R | 1 __modslo 00000C R | 1 __modslo 000015 R + 1 __modslo 000018 R | 1 __modslo 00001D R | 1 __modslo 000024 R + __modulo ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 25 flags 0 + diff --git a/device/lib/stm8/_modslonglong.asm b/device/lib/stm8/_modslonglong.asm new file mode 100644 index 0000000..6e5839c --- /dev/null +++ b/device/lib/stm8/_modslonglong.asm @@ -0,0 +1,243 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _modslonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __modslonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_modslonglong.c: 36: _modslonglong (long long numerator, long long denominator) +; ----------------------------------------- +; function _modslonglong +; ----------------------------------------- +__modslonglong: + sub sp, #17 +; ../_modslonglong.c: 38: bool numeratorneg = (numerator < 0); + tnz (0x16, sp) + jrmi 00124$ + clr (0x11, sp) + jra 00125$ +00124$: + ld a, #0x01 + ld (0x11, sp), a +00125$: +; ../_modslonglong.c: 39: bool denominatorneg = (denominator < 0); + tnz (0x1e, sp) + jrmi 00126$ + clr a + .byte 0xc5 +00126$: + ld a, #0x01 +00127$: +; ../_modslonglong.c: 42: if (numeratorneg) + tnz (0x11, sp) + jreq 00102$ +; ../_modslonglong.c: 43: numerator = -numerator; + push a + ld a, (0x1e, sp) + neg a + ld (0x11, sp), a + clr a + sbc a, (0x1d, sp) + ld (0x10, sp), a + clr a + sbc a, (0x1c, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x1b, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x1a, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x19, sp) + ld (0x0c, sp), a + ldw x, (0x17, sp) + jrnc 00129$ + incw x +00129$: + negw x + pop a + ldw (0x16, sp), x + ldw y, (0x0f, sp) + ldw (0x1c, sp), y + ldw y, (0x0d, sp) + ldw (0x1a, sp), y + ldw y, (0x0b, sp) + ldw (0x18, sp), y +00102$: +; ../_modslonglong.c: 44: if (denominatorneg) + tnz a + jreq 00104$ +; ../_modslonglong.c: 45: denominator = -denominator; + ld a, (0x25, sp) + neg a + ld (0x10, sp), a + clr a + sbc a, (0x24, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x23, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x22, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x21, sp) + ld (0x0c, sp), a + clr a + sbc a, (0x20, sp) + ldw x, (0x1e, sp) + jrnc 00131$ + incw x +00131$: + negw x + ld (0x20, sp), a + ldw (0x1e, sp), x + ldw y, (0x0f, sp) + ldw (0x24, sp), y + ldw y, (0x0d, sp) + ldw (0x22, sp), y + ld a, (0x0c, sp) + ld (0x21, sp), a +00104$: +; ../_modslonglong.c: 47: r = (unsigned long long)numerator % (unsigned long long)denominator; + ldw y, (0x1c, sp) + ldw (0x07, sp), y + ldw y, (0x1a, sp) + ldw (0x05, sp), y + ldw y, (0x18, sp) + ldw (0x03, sp), y + ldw y, (0x16, sp) + ldw (0x01, sp), y + ldw x, (0x24, sp) + ldw (0x0f, sp), x + ldw x, (0x22, sp) + ldw (0x0d, sp), x + ldw x, (0x20, sp) + ldw (0x0b, sp), x + ldw x, (0x1e, sp) + ldw (0x09, sp), x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, sp + addw x, #25 + pushw x + call __modulonglong + addw sp, #18 + ldw y, (0x0f, sp) + ldw (0x07, sp), y + ldw y, (0x0d, sp) + ldw (0x05, sp), y + ldw y, (0x0b, sp) + ldw (0x03, sp), y + ldw y, (0x09, sp) + ldw (0x01, sp), y +; ../_modslonglong.c: 49: return (numeratorneg ? -r : r); + tnz (0x11, sp) + jreq 00107$ + ld a, (0x08, sp) + neg a + ld (0x11, sp), a + clr a + sbc a, (0x07, sp) + ld (0x10, sp), a + clr a + sbc a, (0x06, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x05, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x04, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x03, sp) + ld (0x0c, sp), a + clr a + sbc a, (0x02, sp) + ld (0x0b, sp), a + clr a + sbc a, (0x01, sp) + ld (0x0a, sp), a + jra 00108$ +00107$: + ldw y, (0x07, sp) + ldw (0x10, sp), y + ldw y, (0x05, sp) + ldw (0x0e, sp), y + ldw y, (0x03, sp) + ldw (0x0c, sp), y + ldw y, (0x01, sp) + ldw (0x0a, sp), y +00108$: + ldw x, (0x14, sp) + ldw y, (0x10, sp) + ldw (#6, x), y + ldw y, (0x0e, sp) + ldw (#4, x), y + ldw y, (0x0c, sp) + ldw (#2, x), y + ldw y, (0x0a, sp) + ldw (x), y +; ../_modslonglong.c: 50: } + addw sp, #17 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_modslonglong.lst b/device/lib/stm8/_modslonglong.lst new file mode 100644 index 0000000..734d1b9 --- /dev/null +++ b/device/lib/stm8/_modslonglong.lst @@ -0,0 +1,243 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _modslonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __modslonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_modslonglong.c: 36: _modslonglong (long long numerator, long long denominator) + 50 ; ----------------------------------------- + 51 ; function _modslonglong + 52 ; ----------------------------------------- + 000000 53 __modslonglong: + 000000 52 11 [ 2] 54 sub sp, #17 + 55 ; ../_modslonglong.c: 38: bool numeratorneg = (numerator < 0); + 000002 0D 16 [ 1] 56 tnz (0x16, sp) + 000004 2B 04 [ 1] 57 jrmi 00124$ + 000006 0F 11 [ 1] 58 clr (0x11, sp) + 000008 20 04 [ 2] 59 jra 00125$ + 00000A 60 00124$: + 00000A A6 01 [ 1] 61 ld a, #0x01 + 00000C 6B 11 [ 1] 62 ld (0x11, sp), a + 00000E 63 00125$: + 64 ; ../_modslonglong.c: 39: bool denominatorneg = (denominator < 0); + 00000E 0D 1E [ 1] 65 tnz (0x1e, sp) + 000010 2B 02 [ 1] 66 jrmi 00126$ + 000012 4F [ 1] 67 clr a + 000013 C5 68 .byte 0xc5 + 000014 69 00126$: + 000014 A6 01 [ 1] 70 ld a, #0x01 + 000016 71 00127$: + 72 ; ../_modslonglong.c: 42: if (numeratorneg) + 000016 0D 11 [ 1] 73 tnz (0x11, sp) + 000018 27 34 [ 1] 74 jreq 00102$ + 75 ; ../_modslonglong.c: 43: numerator = -numerator; + 00001A 88 [ 1] 76 push a + 00001B 7B 1E [ 1] 77 ld a, (0x1e, sp) + 00001D 40 [ 1] 78 neg a + 00001E 6B 11 [ 1] 79 ld (0x11, sp), a + 000020 4F [ 1] 80 clr a + 000021 12 1D [ 1] 81 sbc a, (0x1d, sp) + 000023 6B 10 [ 1] 82 ld (0x10, sp), a + 000025 4F [ 1] 83 clr a + 000026 12 1C [ 1] 84 sbc a, (0x1c, sp) + 000028 6B 0F [ 1] 85 ld (0x0f, sp), a + 00002A 4F [ 1] 86 clr a + 00002B 12 1B [ 1] 87 sbc a, (0x1b, sp) + 00002D 6B 0E [ 1] 88 ld (0x0e, sp), a + 00002F 4F [ 1] 89 clr a + 000030 12 1A [ 1] 90 sbc a, (0x1a, sp) + 000032 6B 0D [ 1] 91 ld (0x0d, sp), a + 000034 4F [ 1] 92 clr a + 000035 12 19 [ 1] 93 sbc a, (0x19, sp) + 000037 6B 0C [ 1] 94 ld (0x0c, sp), a + 000039 1E 17 [ 2] 95 ldw x, (0x17, sp) + 00003B 24 01 [ 1] 96 jrnc 00129$ + 00003D 5C [ 1] 97 incw x + 00003E 98 00129$: + 00003E 50 [ 2] 99 negw x + 00003F 84 [ 1] 100 pop a + 000040 1F 16 [ 2] 101 ldw (0x16, sp), x + 000042 16 0F [ 2] 102 ldw y, (0x0f, sp) + 000044 17 1C [ 2] 103 ldw (0x1c, sp), y + 000046 16 0D [ 2] 104 ldw y, (0x0d, sp) + 000048 17 1A [ 2] 105 ldw (0x1a, sp), y + 00004A 16 0B [ 2] 106 ldw y, (0x0b, sp) + 00004C 17 18 [ 2] 107 ldw (0x18, sp), y + 00004E 108 00102$: + 109 ; ../_modslonglong.c: 44: if (denominatorneg) + 00004E 4D [ 1] 110 tnz a + 00004F 27 32 [ 1] 111 jreq 00104$ + 112 ; ../_modslonglong.c: 45: denominator = -denominator; + 000051 7B 25 [ 1] 113 ld a, (0x25, sp) + 000053 40 [ 1] 114 neg a + 000054 6B 10 [ 1] 115 ld (0x10, sp), a + 000056 4F [ 1] 116 clr a + 000057 12 24 [ 1] 117 sbc a, (0x24, sp) + 000059 6B 0F [ 1] 118 ld (0x0f, sp), a + 00005B 4F [ 1] 119 clr a + 00005C 12 23 [ 1] 120 sbc a, (0x23, sp) + 00005E 6B 0E [ 1] 121 ld (0x0e, sp), a + 000060 4F [ 1] 122 clr a + 000061 12 22 [ 1] 123 sbc a, (0x22, sp) + 000063 6B 0D [ 1] 124 ld (0x0d, sp), a + 000065 4F [ 1] 125 clr a + 000066 12 21 [ 1] 126 sbc a, (0x21, sp) + 000068 6B 0C [ 1] 127 ld (0x0c, sp), a + 00006A 4F [ 1] 128 clr a + 00006B 12 20 [ 1] 129 sbc a, (0x20, sp) + 00006D 1E 1E [ 2] 130 ldw x, (0x1e, sp) + 00006F 24 01 [ 1] 131 jrnc 00131$ + 000071 5C [ 1] 132 incw x + 000072 133 00131$: + 000072 50 [ 2] 134 negw x + 000073 6B 20 [ 1] 135 ld (0x20, sp), a + 000075 1F 1E [ 2] 136 ldw (0x1e, sp), x + 000077 16 0F [ 2] 137 ldw y, (0x0f, sp) + 000079 17 24 [ 2] 138 ldw (0x24, sp), y + 00007B 16 0D [ 2] 139 ldw y, (0x0d, sp) + 00007D 17 22 [ 2] 140 ldw (0x22, sp), y + 00007F 7B 0C [ 1] 141 ld a, (0x0c, sp) + 000081 6B 21 [ 1] 142 ld (0x21, sp), a + 000083 143 00104$: + 144 ; ../_modslonglong.c: 47: r = (unsigned long long)numerator % (unsigned long long)denominator; + 000083 16 1C [ 2] 145 ldw y, (0x1c, sp) + 000085 17 07 [ 2] 146 ldw (0x07, sp), y + 000087 16 1A [ 2] 147 ldw y, (0x1a, sp) + 000089 17 05 [ 2] 148 ldw (0x05, sp), y + 00008B 16 18 [ 2] 149 ldw y, (0x18, sp) + 00008D 17 03 [ 2] 150 ldw (0x03, sp), y + 00008F 16 16 [ 2] 151 ldw y, (0x16, sp) + 000091 17 01 [ 2] 152 ldw (0x01, sp), y + 000093 1E 24 [ 2] 153 ldw x, (0x24, sp) + 000095 1F 0F [ 2] 154 ldw (0x0f, sp), x + 000097 1E 22 [ 2] 155 ldw x, (0x22, sp) + 000099 1F 0D [ 2] 156 ldw (0x0d, sp), x + 00009B 1E 20 [ 2] 157 ldw x, (0x20, sp) + 00009D 1F 0B [ 2] 158 ldw (0x0b, sp), x + 00009F 1E 1E [ 2] 159 ldw x, (0x1e, sp) + 0000A1 1F 09 [ 2] 160 ldw (0x09, sp), x + 0000A3 1E 0F [ 2] 161 ldw x, (0x0f, sp) + 0000A5 89 [ 2] 162 pushw x + 0000A6 1E 0F [ 2] 163 ldw x, (0x0f, sp) + 0000A8 89 [ 2] 164 pushw x + 0000A9 1E 0F [ 2] 165 ldw x, (0x0f, sp) + 0000AB 89 [ 2] 166 pushw x + 0000AC 1E 0F [ 2] 167 ldw x, (0x0f, sp) + 0000AE 89 [ 2] 168 pushw x + 0000AF 1E 0F [ 2] 169 ldw x, (0x0f, sp) + 0000B1 89 [ 2] 170 pushw x + 0000B2 1E 0F [ 2] 171 ldw x, (0x0f, sp) + 0000B4 89 [ 2] 172 pushw x + 0000B5 1E 0F [ 2] 173 ldw x, (0x0f, sp) + 0000B7 89 [ 2] 174 pushw x + 0000B8 1E 0F [ 2] 175 ldw x, (0x0f, sp) + 0000BA 89 [ 2] 176 pushw x + 0000BB 96 [ 1] 177 ldw x, sp + 0000BC 1C 00 19 [ 2] 178 addw x, #25 + 0000BF 89 [ 2] 179 pushw x + 0000C0 CDr00r00 [ 4] 180 call __modulonglong + 0000C3 5B 12 [ 2] 181 addw sp, #18 + 0000C5 16 0F [ 2] 182 ldw y, (0x0f, sp) + 0000C7 17 07 [ 2] 183 ldw (0x07, sp), y + 0000C9 16 0D [ 2] 184 ldw y, (0x0d, sp) + 0000CB 17 05 [ 2] 185 ldw (0x05, sp), y + 0000CD 16 0B [ 2] 186 ldw y, (0x0b, sp) + 0000CF 17 03 [ 2] 187 ldw (0x03, sp), y + 0000D1 16 09 [ 2] 188 ldw y, (0x09, sp) + 0000D3 17 01 [ 2] 189 ldw (0x01, sp), y + 190 ; ../_modslonglong.c: 49: return (numeratorneg ? -r : r); + 0000D5 0D 11 [ 1] 191 tnz (0x11, sp) + 0000D7 27 2A [ 1] 192 jreq 00107$ + 0000D9 7B 08 [ 1] 193 ld a, (0x08, sp) + 0000DB 40 [ 1] 194 neg a + 0000DC 6B 11 [ 1] 195 ld (0x11, sp), a + 0000DE 4F [ 1] 196 clr a + 0000DF 12 07 [ 1] 197 sbc a, (0x07, sp) + 0000E1 6B 10 [ 1] 198 ld (0x10, sp), a + 0000E3 4F [ 1] 199 clr a + 0000E4 12 06 [ 1] 200 sbc a, (0x06, sp) + 0000E6 6B 0F [ 1] 201 ld (0x0f, sp), a + 0000E8 4F [ 1] 202 clr a + 0000E9 12 05 [ 1] 203 sbc a, (0x05, sp) + 0000EB 6B 0E [ 1] 204 ld (0x0e, sp), a + 0000ED 4F [ 1] 205 clr a + 0000EE 12 04 [ 1] 206 sbc a, (0x04, sp) + 0000F0 6B 0D [ 1] 207 ld (0x0d, sp), a + 0000F2 4F [ 1] 208 clr a + 0000F3 12 03 [ 1] 209 sbc a, (0x03, sp) + 0000F5 6B 0C [ 1] 210 ld (0x0c, sp), a + 0000F7 4F [ 1] 211 clr a + 0000F8 12 02 [ 1] 212 sbc a, (0x02, sp) + 0000FA 6B 0B [ 1] 213 ld (0x0b, sp), a + 0000FC 4F [ 1] 214 clr a + 0000FD 12 01 [ 1] 215 sbc a, (0x01, sp) + 0000FF 6B 0A [ 1] 216 ld (0x0a, sp), a + 000101 20 10 [ 2] 217 jra 00108$ + 000103 218 00107$: + 000103 16 07 [ 2] 219 ldw y, (0x07, sp) + 000105 17 10 [ 2] 220 ldw (0x10, sp), y + 000107 16 05 [ 2] 221 ldw y, (0x05, sp) + 000109 17 0E [ 2] 222 ldw (0x0e, sp), y + 00010B 16 03 [ 2] 223 ldw y, (0x03, sp) + 00010D 17 0C [ 2] 224 ldw (0x0c, sp), y + 00010F 16 01 [ 2] 225 ldw y, (0x01, sp) + 000111 17 0A [ 2] 226 ldw (0x0a, sp), y + 000113 227 00108$: + 000113 1E 14 [ 2] 228 ldw x, (0x14, sp) + 000115 16 10 [ 2] 229 ldw y, (0x10, sp) + 000117 EF 06 [ 2] 230 ldw (#6, x), y + 000119 16 0E [ 2] 231 ldw y, (0x0e, sp) + 00011B EF 04 [ 2] 232 ldw (#4, x), y + 00011D 16 0C [ 2] 233 ldw y, (0x0c, sp) + 00011F EF 02 [ 2] 234 ldw (#2, x), y + 000121 16 0A [ 2] 235 ldw y, (0x0a, sp) + 000123 FF [ 2] 236 ldw (x), y + 237 ; ../_modslonglong.c: 50: } + 000124 5B 11 [ 2] 238 addw sp, #17 + 000126 81 [ 4] 239 ret + 240 .area CODE + 241 .area CONST + 242 .area INITIALIZER + 243 .area CABS (ABS) diff --git a/device/lib/stm8/_modslonglong.rel b/device/lib/stm8/_modslonglong.rel new file mode 100644 index 0000000..b5b6c85 --- /dev/null +++ b/device/lib/stm8/_modslonglong.rel @@ -0,0 +1,98 @@ +XH3 +H B areas 3 global symbols +M _modslonglong +O -mstm8 +S __modulonglong Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 127 flags 0 addr 0 +S __modslonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 11 0D 16 2B 04 0F 11 20 04 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A A6 01 6B 11 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 0D 1E 2B 02 4F C5 +R 00 00 00 09 +T 00 00 14 +R 00 00 00 09 +T 00 00 14 A6 01 +R 00 00 00 09 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 0D 11 27 34 88 7B 1E 40 6B 11 4F 12 1D +R 00 00 00 09 +T 00 00 23 6B 10 4F 12 1C 6B 0F 4F 12 1B 6B 0E 4F +R 00 00 00 09 +T 00 00 30 12 1A 6B 0D 4F 12 19 6B 0C 1E 17 24 01 +R 00 00 00 09 +T 00 00 3D 5C +R 00 00 00 09 +T 00 00 3E +R 00 00 00 09 +T 00 00 3E 50 84 1F 16 16 0F 17 1C 16 0D 17 1A 16 +R 00 00 00 09 +T 00 00 4B 0B 17 18 +R 00 00 00 09 +T 00 00 4E +R 00 00 00 09 +T 00 00 4E 4D 27 32 7B 25 40 6B 10 4F 12 24 6B 0F +R 00 00 00 09 +T 00 00 5B 4F 12 23 6B 0E 4F 12 22 6B 0D 4F 12 21 +R 00 00 00 09 +T 00 00 68 6B 0C 4F 12 20 1E 1E 24 01 5C +R 00 00 00 09 +T 00 00 72 +R 00 00 00 09 +T 00 00 72 50 6B 20 1F 1E 16 0F 17 24 16 0D 17 22 +R 00 00 00 09 +T 00 00 7F 7B 0C 6B 21 +R 00 00 00 09 +T 00 00 83 +R 00 00 00 09 +T 00 00 83 16 1C 17 07 16 1A 17 05 16 18 17 03 16 +R 00 00 00 09 +T 00 00 90 16 17 01 1E 24 1F 0F 1E 22 1F 0D 1E 20 +R 00 00 00 09 +T 00 00 9D 1F 0B 1E 1E 1F 09 1E 0F 89 1E 0F 89 1E +R 00 00 00 09 +T 00 00 AA 0F 89 1E 0F 89 1E 0F 89 1E 0F 89 1E 0F +R 00 00 00 09 +T 00 00 B7 89 1E 0F 89 96 1C 00 19 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 00 +T 00 00 C4 12 16 0F 17 07 16 0D 17 05 16 0B 17 03 +R 00 00 00 09 +T 00 00 D1 16 09 17 01 0D 11 27 2A 7B 08 40 6B 11 +R 00 00 00 09 +T 00 00 DE 4F 12 07 6B 10 4F 12 06 6B 0F 4F 12 05 +R 00 00 00 09 +T 00 00 EB 6B 0E 4F 12 04 6B 0D 4F 12 03 6B 0C 4F +R 00 00 00 09 +T 00 00 F8 12 02 6B 0B 4F 12 01 6B 0A 20 10 +R 00 00 00 09 +T 00 01 03 +R 00 00 00 09 +T 00 01 03 16 07 17 10 16 05 17 0E 16 03 17 0C 16 +R 00 00 00 09 +T 00 01 10 01 17 0A +R 00 00 00 09 +T 00 01 13 +R 00 00 00 09 +T 00 01 13 1E 14 16 10 EF 06 16 0E EF 04 16 0C EF +R 00 00 00 09 +T 00 01 20 02 16 0A FF 5B 11 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_modslonglong.sym b/device/lib/stm8/_modslonglong.sym new file mode 100644 index 0000000..f237a0b --- /dev/null +++ b/device/lib/stm8/_modslonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __modslonglong 000000 GR + __modulonglong ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 127 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_modulong.lst b/device/lib/stm8/_modulong.lst new file mode 100644 index 0000000..30e20f2 --- /dev/null +++ b/device/lib/stm8/_modulong.lst @@ -0,0 +1,110 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _modulong.s + 3 ; + 4 ; Copyright (C) 2014, Ben Shi + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __modulong + 30 + 31 .area CODE + 000000 32 __modulong: + 000000 52 03 [ 2] 33 sub sp, #3 + 34 ; device/lib/_modulong.c: 342: unsigned char count = 0; + 000002 0F 03 [ 1] 35 clr (0x03, sp) + 36 ; device/lib/_modulong.c: 344: while (!MSB_SET(b)) + 000004 0F 01 [ 1] 37 clr (0x01, sp) + 000006 38 __modulong_00103: + 000006 7B 0A [ 1] 39 ld a, (0x0a, sp) + 000008 48 [ 1] 40 sll a + 000009 4F [ 1] 41 clr a + 00000A 49 [ 1] 42 rlc a + 00000B 4D [ 1] 43 tnz a + 00000C 26 2E [ 1] 44 jrne __modulong_00117 + 45 ; device/lib/_modulong.c: 346: b <<= 1; + 00000E 16 0C [ 2] 46 ldw y, (0x0c, sp) + 000010 1E 0A [ 2] 47 ldw x, (0x0a, sp) + 000012 90 58 [ 2] 48 sllw y + 000014 59 [ 2] 49 rlcw x + 000015 17 0C [ 2] 50 ldw (0x0c, sp), y + 000017 1F 0A [ 2] 51 ldw (0x0a, sp), x + 52 ; device/lib/_modulong.c: 347: if (b > a) + 000019 1E 08 [ 2] 53 ldw x, (0x08, sp) + 00001B 13 0C [ 2] 54 cpw x, (0x0c, sp) + 00001D 7B 07 [ 1] 55 ld a, (0x07, sp) + 00001F 12 0B [ 1] 56 sbc a, (0x0b, sp) + 000021 7B 06 [ 1] 57 ld a, (0x06, sp) + 000023 12 0A [ 1] 58 sbc a, (0x0a, sp) + 000025 24 0D [ 1] 59 jrnc __modulong_00102 + 60 ; device/lib/_modulong.c: 349: b >>=1; + 000027 16 0C [ 2] 61 ldw y, (0x0c, sp) + 000029 1E 0A [ 2] 62 ldw x, (0x0a, sp) + 00002B 54 [ 2] 63 srlw x + 00002C 90 56 [ 2] 64 rrcw y + 00002E 17 0C [ 2] 65 ldw (0x0c, sp), y + 000030 1F 0A [ 2] 66 ldw (0x0a, sp), x + 67 ; device/lib/_modulong.c: 350: break; + 000032 20 08 [ 2] 68 jra __modulong_00117 + 000034 69 __modulong_00102: + 70 ; device/lib/_modulong.c: 352: count++; + 000034 0C 01 [ 1] 71 inc (0x01, sp) + 000036 7B 01 [ 1] 72 ld a, (0x01, sp) + 000038 6B 03 [ 1] 73 ld (0x03, sp), a + 00003A 20 CA [ 2] 74 jra __modulong_00103 + 75 ; device/lib/_modulong.c: 354: do + 00003C 76 __modulong_00117: + 00003C 7B 03 [ 1] 77 ld a, (0x03, sp) + 00003E 6B 02 [ 1] 78 ld (0x02, sp), a + 000040 79 __modulong_00108: + 80 ; device/lib/_modulong.c: 356: if (a >= b) + 000040 1E 08 [ 2] 81 ldw x, (0x08, sp) + 000042 72 F0 0C [ 2] 82 subw x, (0x0c, sp) + 000045 7B 07 [ 1] 83 ld a, (0x07, sp) + 000047 12 0B [ 1] 84 sbc a, (0x0b, sp) + 000049 90 97 [ 1] 85 ld yl, a + 00004B 7B 06 [ 1] 86 ld a, (0x06, sp) + 00004D 12 0A [ 1] 87 sbc a, (0x0a, sp) + 00004F 25 06 [ 1] 88 jrc __modulong_00107 + 89 ; device/lib/_modulong.c: 357: a -= b; + 000051 1F 08 [ 2] 90 ldw (0x08, sp), x + 000053 90 95 [ 1] 91 ld yh, a + 000055 17 06 [ 2] 92 ldw (0x06, sp), y + 000057 93 __modulong_00107: + 94 ; device/lib/_modulong.c: 358: b >>= 1; + 000057 16 0C [ 2] 95 ldw y, (0x0c, sp) + 000059 1E 0A [ 2] 96 ldw x, (0x0a, sp) + 00005B 54 [ 2] 97 srlw x + 00005C 90 56 [ 2] 98 rrcw y + 00005E 17 0C [ 2] 99 ldw (0x0c, sp), y + 000060 1F 0A [ 2] 100 ldw (0x0a, sp), x + 101 ; device/lib/_modulong.c: 360: while (count--); + 000062 7B 02 [ 1] 102 ld a, (0x02, sp) + 000064 0A 02 [ 1] 103 dec (0x02, sp) + 000066 4D [ 1] 104 tnz a + 000067 26 D7 [ 1] 105 jrne __modulong_00108 + 106 ; device/lib/_modulong.c: 362: return a; + 000069 1E 08 [ 2] 107 ldw x, (0x08, sp) + 00006B 16 06 [ 2] 108 ldw y, (0x06, sp) + 00006D 5B 03 [ 2] 109 addw sp, #3 + 00006F 81 [ 4] 110 ret diff --git a/device/lib/stm8/_modulong.rel b/device/lib/stm8/_modulong.rel new file mode 100644 index 0000000..2f7a30b --- /dev/null +++ b/device/lib/stm8/_modulong.rel @@ -0,0 +1,40 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 70 flags 0 addr 0 +S __modulong Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 52 03 0F 03 0F 01 +R 00 00 00 01 +T 00 00 06 +R 00 00 00 01 +T 00 00 06 7B 0A 48 4F 49 4D 26 2E 16 0C 1E 0A 90 +R 00 00 00 01 +T 00 00 13 58 59 17 0C 1F 0A 1E 08 13 0C 7B 07 12 +R 00 00 00 01 +T 00 00 20 0B 7B 06 12 0A 24 0D 16 0C 1E 0A 54 90 +R 00 00 00 01 +T 00 00 2D 56 17 0C 1F 0A 20 08 +R 00 00 00 01 +T 00 00 34 +R 00 00 00 01 +T 00 00 34 0C 01 7B 01 6B 03 20 CA +R 00 00 00 01 +T 00 00 3C +R 00 00 00 01 +T 00 00 3C 7B 03 6B 02 +R 00 00 00 01 +T 00 00 40 +R 00 00 00 01 +T 00 00 40 1E 08 72 F0 0C 7B 07 12 0B 90 97 7B 06 +R 00 00 00 01 +T 00 00 4D 12 0A 25 06 1F 08 90 95 17 06 +R 00 00 00 01 +T 00 00 57 +R 00 00 00 01 +T 00 00 57 16 0C 1E 0A 54 90 56 17 0C 1F 0A 7B 02 +R 00 00 00 01 +T 00 00 64 0A 02 4D 26 D7 1E 08 16 06 5B 03 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_modulong.s b/device/lib/stm8/_modulong.s new file mode 100644 index 0000000..8339077 --- /dev/null +++ b/device/lib/stm8/_modulong.s @@ -0,0 +1,110 @@ +;-------------------------------------------------------------------------- +; _modulong.s +; +; Copyright (C) 2014, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl __modulong + + .area CODE +__modulong: + sub sp, #3 +; device/lib/_modulong.c: 342: unsigned char count = 0; + clr (0x03, sp) +; device/lib/_modulong.c: 344: while (!MSB_SET(b)) + clr (0x01, sp) +__modulong_00103: + ld a, (0x0a, sp) + sll a + clr a + rlc a + tnz a + jrne __modulong_00117 +; device/lib/_modulong.c: 346: b <<= 1; + ldw y, (0x0c, sp) + ldw x, (0x0a, sp) + sllw y + rlcw x + ldw (0x0c, sp), y + ldw (0x0a, sp), x +; device/lib/_modulong.c: 347: if (b > a) + ldw x, (0x08, sp) + cpw x, (0x0c, sp) + ld a, (0x07, sp) + sbc a, (0x0b, sp) + ld a, (0x06, sp) + sbc a, (0x0a, sp) + jrnc __modulong_00102 +; device/lib/_modulong.c: 349: b >>=1; + ldw y, (0x0c, sp) + ldw x, (0x0a, sp) + srlw x + rrcw y + ldw (0x0c, sp), y + ldw (0x0a, sp), x +; device/lib/_modulong.c: 350: break; + jra __modulong_00117 +__modulong_00102: +; device/lib/_modulong.c: 352: count++; + inc (0x01, sp) + ld a, (0x01, sp) + ld (0x03, sp), a + jra __modulong_00103 +; device/lib/_modulong.c: 354: do +__modulong_00117: + ld a, (0x03, sp) + ld (0x02, sp), a +__modulong_00108: +; device/lib/_modulong.c: 356: if (a >= b) + ldw x, (0x08, sp) + subw x, (0x0c, sp) + ld a, (0x07, sp) + sbc a, (0x0b, sp) + ld yl, a + ld a, (0x06, sp) + sbc a, (0x0a, sp) + jrc __modulong_00107 +; device/lib/_modulong.c: 357: a -= b; + ldw (0x08, sp), x + ld yh, a + ldw (0x06, sp), y +__modulong_00107: +; device/lib/_modulong.c: 358: b >>= 1; + ldw y, (0x0c, sp) + ldw x, (0x0a, sp) + srlw x + rrcw y + ldw (0x0c, sp), y + ldw (0x0a, sp), x +; device/lib/_modulong.c: 360: while (count--); + ld a, (0x02, sp) + dec (0x02, sp) + tnz a + jrne __modulong_00108 +; device/lib/_modulong.c: 362: return a; + ldw x, (0x08, sp) + ldw y, (0x06, sp) + addw sp, #3 + ret diff --git a/device/lib/stm8/_modulong.sym b/device/lib/stm8/_modulong.sym new file mode 100644 index 0000000..86c9c99 --- /dev/null +++ b/device/lib/stm8/_modulong.sym @@ -0,0 +1,18 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 __modulo 000000 GR | 1 __modulo 000034 R + 1 __modulo 000006 R | 1 __modulo 000057 R | 1 __modulo 000040 R + 1 __modulo 00003C R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 70 flags 0 + diff --git a/device/lib/stm8/_modulonglong.asm b/device/lib/stm8/_modulonglong.asm new file mode 100644 index 0000000..a94b48e --- /dev/null +++ b/device/lib/stm8/_modulonglong.asm @@ -0,0 +1,186 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _modulonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __modulonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_modulonglong.c: 38: _modulonglong (unsigned long long a, unsigned long long b) +; ----------------------------------------- +; function _modulonglong +; ----------------------------------------- +__modulonglong: + sub sp, #9 +; ../_modulonglong.c: 40: unsigned char count = 0; + clr a +; ../_modulonglong.c: 42: while (!MSB_SET(b)) + clr (0x09, sp) +00103$: + tnz (0x16, sp) + jrmi 00117$ +; ../_modulonglong.c: 44: b <<= 1; + sll (0x1d, sp) + rlc (0x1c, sp) + rlc (0x1b, sp) + rlc (0x1a, sp) + rlc (0x19, sp) + rlc (0x18, sp) + rlc (0x17, sp) + rlc (0x16, sp) +; ../_modulonglong.c: 45: if (b > a) + ldw x, (0x14, sp) + cpw x, (0x1c, sp) + push a + ld a, (0x14, sp) + sbc a, (0x1c, sp) + ld a, (0x13, sp) + sbc a, (0x1b, sp) + ld a, (0x12, sp) + sbc a, (0x1a, sp) + ld a, (0x11, sp) + sbc a, (0x19, sp) + ld a, (0x10, sp) + sbc a, (0x18, sp) + ld a, (0x0f, sp) + sbc a, (0x17, sp) + pop a + jrnc 00102$ +; ../_modulonglong.c: 47: b >>=1; + srl (0x16, sp) + rrc (0x17, sp) + rrc (0x18, sp) + rrc (0x19, sp) + rrc (0x1a, sp) + rrc (0x1b, sp) + rrc (0x1c, sp) + rrc (0x1d, sp) +; ../_modulonglong.c: 48: break; + jra 00117$ +00102$: +; ../_modulonglong.c: 50: count++; + inc (0x09, sp) + ld a, (0x09, sp) + jra 00103$ +; ../_modulonglong.c: 52: do +00117$: + ld (0x09, sp), a +00108$: +; ../_modulonglong.c: 54: if (a >= b) + ldw x, (0x14, sp) + cpw x, (0x1c, sp) + ld a, (0x13, sp) + sbc a, (0x1b, sp) + ld a, (0x12, sp) + sbc a, (0x1a, sp) + ld a, (0x11, sp) + sbc a, (0x19, sp) + ld a, (0x10, sp) + sbc a, (0x18, sp) + ld a, (0x0f, sp) + sbc a, (0x17, sp) + ld a, (0x0e, sp) + sbc a, (0x16, sp) + jrc 00107$ +; ../_modulonglong.c: 55: a -= b; + ldw x, (0x14, sp) + subw x, (0x1c, sp) + ldw (0x07, sp), x + ld a, (0x13, sp) + sbc a, (0x1b, sp) + ld (0x06, sp), a + ld a, (0x12, sp) + sbc a, (0x1a, sp) + ld (0x05, sp), a + ld a, (0x11, sp) + sbc a, (0x19, sp) + ld (0x04, sp), a + ld a, (0x10, sp) + sbc a, (0x18, sp) + ld (0x03, sp), a + ld a, (0x0f, sp) + sbc a, (0x17, sp) + ld (0x02, sp), a + ld a, (0x0e, sp) + sbc a, (0x16, sp) + ld (0x01, sp), a + ldw y, (0x07, sp) + ldw (0x14, sp), y + ldw y, (0x05, sp) + ldw (0x12, sp), y + ldw y, (0x03, sp) + ldw (0x10, sp), y + ldw y, (0x01, sp) + ldw (0x0e, sp), y +00107$: +; ../_modulonglong.c: 56: b >>= 1; + srl (0x16, sp) + rrc (0x17, sp) + rrc (0x18, sp) + rrc (0x19, sp) + rrc (0x1a, sp) + rrc (0x1b, sp) + rrc (0x1c, sp) + rrc (0x1d, sp) +; ../_modulonglong.c: 58: while (count--); + ld a, (0x09, sp) + dec (0x09, sp) + tnz a + jrne 00108$ +; ../_modulonglong.c: 60: return a; + ldw x, (0x0c, sp) + ldw y, (0x14, sp) + ldw (#6, x), y + ldw y, (0x12, sp) + ldw (#4, x), y + ldw y, (0x10, sp) + ldw (#2, x), y + ldw y, (0x0e, sp) + ldw (x), y +; ../_modulonglong.c: 61: } + addw sp, #9 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_modulonglong.lst b/device/lib/stm8/_modulonglong.lst new file mode 100644 index 0000000..5a9987f --- /dev/null +++ b/device/lib/stm8/_modulonglong.lst @@ -0,0 +1,186 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _modulonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __modulonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_modulonglong.c: 38: _modulonglong (unsigned long long a, unsigned long long b) + 50 ; ----------------------------------------- + 51 ; function _modulonglong + 52 ; ----------------------------------------- + 000000 53 __modulonglong: + 000000 52 09 [ 2] 54 sub sp, #9 + 55 ; ../_modulonglong.c: 40: unsigned char count = 0; + 000002 4F [ 1] 56 clr a + 57 ; ../_modulonglong.c: 42: while (!MSB_SET(b)) + 000003 0F 09 [ 1] 58 clr (0x09, sp) + 000005 59 00103$: + 000005 0D 16 [ 1] 60 tnz (0x16, sp) + 000007 2B 48 [ 1] 61 jrmi 00117$ + 62 ; ../_modulonglong.c: 44: b <<= 1; + 000009 08 1D [ 1] 63 sll (0x1d, sp) + 00000B 09 1C [ 1] 64 rlc (0x1c, sp) + 00000D 09 1B [ 1] 65 rlc (0x1b, sp) + 00000F 09 1A [ 1] 66 rlc (0x1a, sp) + 000011 09 19 [ 1] 67 rlc (0x19, sp) + 000013 09 18 [ 1] 68 rlc (0x18, sp) + 000015 09 17 [ 1] 69 rlc (0x17, sp) + 000017 09 16 [ 1] 70 rlc (0x16, sp) + 71 ; ../_modulonglong.c: 45: if (b > a) + 000019 1E 14 [ 2] 72 ldw x, (0x14, sp) + 00001B 13 1C [ 2] 73 cpw x, (0x1c, sp) + 00001D 88 [ 1] 74 push a + 00001E 7B 14 [ 1] 75 ld a, (0x14, sp) + 000020 12 1C [ 1] 76 sbc a, (0x1c, sp) + 000022 7B 13 [ 1] 77 ld a, (0x13, sp) + 000024 12 1B [ 1] 78 sbc a, (0x1b, sp) + 000026 7B 12 [ 1] 79 ld a, (0x12, sp) + 000028 12 1A [ 1] 80 sbc a, (0x1a, sp) + 00002A 7B 11 [ 1] 81 ld a, (0x11, sp) + 00002C 12 19 [ 1] 82 sbc a, (0x19, sp) + 00002E 7B 10 [ 1] 83 ld a, (0x10, sp) + 000030 12 18 [ 1] 84 sbc a, (0x18, sp) + 000032 7B 0F [ 1] 85 ld a, (0x0f, sp) + 000034 12 17 [ 1] 86 sbc a, (0x17, sp) + 000036 84 [ 1] 87 pop a + 000037 24 12 [ 1] 88 jrnc 00102$ + 89 ; ../_modulonglong.c: 47: b >>=1; + 000039 04 16 [ 1] 90 srl (0x16, sp) + 00003B 06 17 [ 1] 91 rrc (0x17, sp) + 00003D 06 18 [ 1] 92 rrc (0x18, sp) + 00003F 06 19 [ 1] 93 rrc (0x19, sp) + 000041 06 1A [ 1] 94 rrc (0x1a, sp) + 000043 06 1B [ 1] 95 rrc (0x1b, sp) + 000045 06 1C [ 1] 96 rrc (0x1c, sp) + 000047 06 1D [ 1] 97 rrc (0x1d, sp) + 98 ; ../_modulonglong.c: 48: break; + 000049 20 06 [ 2] 99 jra 00117$ + 00004B 100 00102$: + 101 ; ../_modulonglong.c: 50: count++; + 00004B 0C 09 [ 1] 102 inc (0x09, sp) + 00004D 7B 09 [ 1] 103 ld a, (0x09, sp) + 00004F 20 B4 [ 2] 104 jra 00103$ + 105 ; ../_modulonglong.c: 52: do + 000051 106 00117$: + 000051 6B 09 [ 1] 107 ld (0x09, sp), a + 000053 108 00108$: + 109 ; ../_modulonglong.c: 54: if (a >= b) + 000053 1E 14 [ 2] 110 ldw x, (0x14, sp) + 000055 13 1C [ 2] 111 cpw x, (0x1c, sp) + 000057 7B 13 [ 1] 112 ld a, (0x13, sp) + 000059 12 1B [ 1] 113 sbc a, (0x1b, sp) + 00005B 7B 12 [ 1] 114 ld a, (0x12, sp) + 00005D 12 1A [ 1] 115 sbc a, (0x1a, sp) + 00005F 7B 11 [ 1] 116 ld a, (0x11, sp) + 000061 12 19 [ 1] 117 sbc a, (0x19, sp) + 000063 7B 10 [ 1] 118 ld a, (0x10, sp) + 000065 12 18 [ 1] 119 sbc a, (0x18, sp) + 000067 7B 0F [ 1] 120 ld a, (0x0f, sp) + 000069 12 17 [ 1] 121 sbc a, (0x17, sp) + 00006B 7B 0E [ 1] 122 ld a, (0x0e, sp) + 00006D 12 16 [ 1] 123 sbc a, (0x16, sp) + 00006F 25 3B [ 1] 124 jrc 00107$ + 125 ; ../_modulonglong.c: 55: a -= b; + 000071 1E 14 [ 2] 126 ldw x, (0x14, sp) + 000073 72 F0 1C [ 2] 127 subw x, (0x1c, sp) + 000076 1F 07 [ 2] 128 ldw (0x07, sp), x + 000078 7B 13 [ 1] 129 ld a, (0x13, sp) + 00007A 12 1B [ 1] 130 sbc a, (0x1b, sp) + 00007C 6B 06 [ 1] 131 ld (0x06, sp), a + 00007E 7B 12 [ 1] 132 ld a, (0x12, sp) + 000080 12 1A [ 1] 133 sbc a, (0x1a, sp) + 000082 6B 05 [ 1] 134 ld (0x05, sp), a + 000084 7B 11 [ 1] 135 ld a, (0x11, sp) + 000086 12 19 [ 1] 136 sbc a, (0x19, sp) + 000088 6B 04 [ 1] 137 ld (0x04, sp), a + 00008A 7B 10 [ 1] 138 ld a, (0x10, sp) + 00008C 12 18 [ 1] 139 sbc a, (0x18, sp) + 00008E 6B 03 [ 1] 140 ld (0x03, sp), a + 000090 7B 0F [ 1] 141 ld a, (0x0f, sp) + 000092 12 17 [ 1] 142 sbc a, (0x17, sp) + 000094 6B 02 [ 1] 143 ld (0x02, sp), a + 000096 7B 0E [ 1] 144 ld a, (0x0e, sp) + 000098 12 16 [ 1] 145 sbc a, (0x16, sp) + 00009A 6B 01 [ 1] 146 ld (0x01, sp), a + 00009C 16 07 [ 2] 147 ldw y, (0x07, sp) + 00009E 17 14 [ 2] 148 ldw (0x14, sp), y + 0000A0 16 05 [ 2] 149 ldw y, (0x05, sp) + 0000A2 17 12 [ 2] 150 ldw (0x12, sp), y + 0000A4 16 03 [ 2] 151 ldw y, (0x03, sp) + 0000A6 17 10 [ 2] 152 ldw (0x10, sp), y + 0000A8 16 01 [ 2] 153 ldw y, (0x01, sp) + 0000AA 17 0E [ 2] 154 ldw (0x0e, sp), y + 0000AC 155 00107$: + 156 ; ../_modulonglong.c: 56: b >>= 1; + 0000AC 04 16 [ 1] 157 srl (0x16, sp) + 0000AE 06 17 [ 1] 158 rrc (0x17, sp) + 0000B0 06 18 [ 1] 159 rrc (0x18, sp) + 0000B2 06 19 [ 1] 160 rrc (0x19, sp) + 0000B4 06 1A [ 1] 161 rrc (0x1a, sp) + 0000B6 06 1B [ 1] 162 rrc (0x1b, sp) + 0000B8 06 1C [ 1] 163 rrc (0x1c, sp) + 0000BA 06 1D [ 1] 164 rrc (0x1d, sp) + 165 ; ../_modulonglong.c: 58: while (count--); + 0000BC 7B 09 [ 1] 166 ld a, (0x09, sp) + 0000BE 0A 09 [ 1] 167 dec (0x09, sp) + 0000C0 4D [ 1] 168 tnz a + 0000C1 26 90 [ 1] 169 jrne 00108$ + 170 ; ../_modulonglong.c: 60: return a; + 0000C3 1E 0C [ 2] 171 ldw x, (0x0c, sp) + 0000C5 16 14 [ 2] 172 ldw y, (0x14, sp) + 0000C7 EF 06 [ 2] 173 ldw (#6, x), y + 0000C9 16 12 [ 2] 174 ldw y, (0x12, sp) + 0000CB EF 04 [ 2] 175 ldw (#4, x), y + 0000CD 16 10 [ 2] 176 ldw y, (0x10, sp) + 0000CF EF 02 [ 2] 177 ldw (#2, x), y + 0000D1 16 0E [ 2] 178 ldw y, (0x0e, sp) + 0000D3 FF [ 2] 179 ldw (x), y + 180 ; ../_modulonglong.c: 61: } + 0000D4 5B 09 [ 2] 181 addw sp, #9 + 0000D6 81 [ 4] 182 ret + 183 .area CODE + 184 .area CONST + 185 .area INITIALIZER + 186 .area CABS (ABS) diff --git a/device/lib/stm8/_modulonglong.rel b/device/lib/stm8/_modulonglong.rel new file mode 100644 index 0000000..09d2b7b --- /dev/null +++ b/device/lib/stm8/_modulonglong.rel @@ -0,0 +1,69 @@ +XH3 +H B areas 2 global symbols +M _modulonglong +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size D7 flags 0 addr 0 +S __modulonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 09 4F 0F 09 +R 00 00 00 09 +T 00 00 05 +R 00 00 00 09 +T 00 00 05 0D 16 2B 48 08 1D 09 1C 09 1B 09 1A 09 +R 00 00 00 09 +T 00 00 12 19 09 18 09 17 09 16 1E 14 13 1C 88 7B +R 00 00 00 09 +T 00 00 1F 14 12 1C 7B 13 12 1B 7B 12 12 1A 7B 11 +R 00 00 00 09 +T 00 00 2C 12 19 7B 10 12 18 7B 0F 12 17 84 24 12 +R 00 00 00 09 +T 00 00 39 04 16 06 17 06 18 06 19 06 1A 06 1B 06 +R 00 00 00 09 +T 00 00 46 1C 06 1D 20 06 +R 00 00 00 09 +T 00 00 4B +R 00 00 00 09 +T 00 00 4B 0C 09 7B 09 20 B4 +R 00 00 00 09 +T 00 00 51 +R 00 00 00 09 +T 00 00 51 6B 09 +R 00 00 00 09 +T 00 00 53 +R 00 00 00 09 +T 00 00 53 1E 14 13 1C 7B 13 12 1B 7B 12 12 1A 7B +R 00 00 00 09 +T 00 00 60 11 12 19 7B 10 12 18 7B 0F 12 17 7B 0E +R 00 00 00 09 +T 00 00 6D 12 16 25 3B 1E 14 72 F0 1C 1F 07 7B 13 +R 00 00 00 09 +T 00 00 7A 12 1B 6B 06 7B 12 12 1A 6B 05 7B 11 12 +R 00 00 00 09 +T 00 00 87 19 6B 04 7B 10 12 18 6B 03 7B 0F 12 17 +R 00 00 00 09 +T 00 00 94 6B 02 7B 0E 12 16 6B 01 16 07 17 14 16 +R 00 00 00 09 +T 00 00 A1 05 17 12 16 03 17 10 16 01 17 0E +R 00 00 00 09 +T 00 00 AC +R 00 00 00 09 +T 00 00 AC 04 16 06 17 06 18 06 19 06 1A 06 1B 06 +R 00 00 00 09 +T 00 00 B9 1C 06 1D 7B 09 0A 09 4D 26 90 1E 0C 16 +R 00 00 00 09 +T 00 00 C6 14 EF 06 16 12 EF 04 16 10 EF 02 16 0E +R 00 00 00 09 +T 00 00 D3 FF 5B 09 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_modulonglong.sym b/device/lib/stm8/_modulonglong.sym new file mode 100644 index 0000000..cfaa4d3 --- /dev/null +++ b/device/lib/stm8/_modulonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __modulonglong 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size D7 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_mulint.lst b/device/lib/stm8/_mulint.lst new file mode 100644 index 0000000..9552df6 --- /dev/null +++ b/device/lib/stm8/_mulint.lst @@ -0,0 +1,55 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _mulint.s + 3 ; + 4 ; Copyright (C) 2014-2015, Krzysztof Nikiel, Ben Shi, Philipp Klaus Krause + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __mulint + 30 + 31 .area CODE + 32 + 000000 33 __mulint: + 34 + 000000 1E 03 [ 2] 35 ldw x, (#3, sp) + 000002 7B 06 [ 1] 36 ld a, (#6, sp) + 000004 42 [ 4] 37 mul x, a + 000005 89 [ 2] 38 pushw x + 39 + 000006 1E 04 [ 2] 40 ldw x, (#4, sp) + 000008 42 [ 4] 41 mul x, a + 000009 9F [ 1] 42 ld a, xl + 00000A 1B 01 [ 1] 43 add a, (#1, sp) + 00000C 6B 01 [ 1] 44 ld (#1, sp), a + 45 + 00000E 1E 05 [ 2] 46 ldw x, (#5, sp) + 000010 7B 07 [ 1] 47 ld a, (#7, sp) + 000012 42 [ 4] 48 mul x, a + 000013 9F [ 1] 49 ld a, xl + 000014 1B 01 [ 1] 50 add a, (#1, sp) + 000016 85 [ 2] 51 popw x + 000017 95 [ 1] 52 ld xh, a + 53 + 000018 81 [ 4] 54 ret + 55 diff --git a/device/lib/stm8/_mulint.rel b/device/lib/stm8/_mulint.rel new file mode 100644 index 0000000..26db01d --- /dev/null +++ b/device/lib/stm8/_mulint.rel @@ -0,0 +1,12 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 19 flags 0 addr 0 +S __mulint Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 1E 03 7B 06 42 89 1E 04 42 9F 1B 01 6B +R 00 00 00 01 +T 00 00 0D 01 1E 05 7B 07 42 9F 1B 01 85 95 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_mulint.s b/device/lib/stm8/_mulint.s new file mode 100644 index 0000000..964ecce --- /dev/null +++ b/device/lib/stm8/_mulint.s @@ -0,0 +1,55 @@ +;-------------------------------------------------------------------------- +; _mulint.s +; +; Copyright (C) 2014-2015, Krzysztof Nikiel, Ben Shi, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + +.globl __mulint + +.area CODE + +__mulint: + + ldw x, (#3, sp) + ld a, (#6, sp) + mul x, a + pushw x + + ldw x, (#4, sp) + mul x, a + ld a, xl + add a, (#1, sp) + ld (#1, sp), a + + ldw x, (#5, sp) + ld a, (#7, sp) + mul x, a + ld a, xl + add a, (#1, sp) + popw x + ld xh, a + + ret + diff --git a/device/lib/stm8/_mulint.sym b/device/lib/stm8/_mulint.sym new file mode 100644 index 0000000..5a95a70 --- /dev/null +++ b/device/lib/stm8/_mulint.sym @@ -0,0 +1,16 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 __mulint 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 19 flags 0 + diff --git a/device/lib/stm8/_mullong.lst b/device/lib/stm8/_mullong.lst new file mode 100644 index 0000000..af5923c --- /dev/null +++ b/device/lib/stm8/_mullong.lst @@ -0,0 +1,118 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; _mullong.s + 3 ; + 4 ; Copyright (C) 2014, Ben Shi + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl __mullong + 30 + 31 .area CODE + 000000 32 __mullong: + 000000 5F [ 1] 33 clrw x + 000001 89 [ 2] 34 pushw x + 000002 89 [ 2] 35 pushw x + 000003 36 __mullong_0: + 000003 7B 0A [ 1] 37 ld a, (#10, sp) + 000005 97 [ 1] 38 ld xl, a + 000006 7B 0E [ 1] 39 ld a, (#14, sp) + 000008 42 [ 4] 40 mul x, a + 000009 1F 03 [ 2] 41 ldw (#3, sp), x + 00000B 42 __mullong_1: + 00000B 7B 09 [ 1] 43 ld a, (#9, sp) + 00000D 97 [ 1] 44 ld xl, a + 00000E 7B 0E [ 1] 45 ld a, (#14, sp) + 000010 42 [ 4] 46 mul x, a + 000011 72 FB 02 [ 2] 47 addw x, (#2, sp) + 000014 1F 02 [ 2] 48 ldw (#2, sp), x + 000016 4F [ 1] 49 clr a + 000017 A9 00 [ 1] 50 adc a, #0 + 000019 6B 01 [ 1] 51 ld (#1, sp), a + 52 + 00001B 7B 0A [ 1] 53 ld a, (#10, sp) + 00001D 97 [ 1] 54 ld xl, a + 00001E 7B 0D [ 1] 55 ld a, (#13, sp) + 000020 42 [ 4] 56 mul x, a + 000021 72 FB 02 [ 2] 57 addw x, (#2, sp) + 000024 1F 02 [ 2] 58 ldw (#2, sp), x + 000026 4F [ 1] 59 clr a + 000027 19 01 [ 1] 60 adc a, (#1, sp) + 000029 6B 01 [ 1] 61 ld (#1, sp), a + 00002B 62 __mullong_2: + 00002B 7B 0A [ 1] 63 ld a, (#10, sp) + 00002D 97 [ 1] 64 ld xl, a + 00002E 7B 0C [ 1] 65 ld a, (#12, sp) + 000030 42 [ 4] 66 mul x, a + 000031 72 FB 01 [ 2] 67 addw x, (#1, sp) + 000034 1F 01 [ 2] 68 ldw (#1, sp), x + 69 + 000036 7B 09 [ 1] 70 ld a, (#9, sp) + 000038 97 [ 1] 71 ld xl, a + 000039 7B 0D [ 1] 72 ld a, (#13, sp) + 00003B 42 [ 4] 73 mul x, a + 00003C 72 FB 01 [ 2] 74 addw x, (#1, sp) + 00003F 1F 01 [ 2] 75 ldw (#1, sp), x + 76 + 000041 7B 08 [ 1] 77 ld a, (#8, sp) + 000043 97 [ 1] 78 ld xl, a + 000044 7B 0E [ 1] 79 ld a, (#14, sp) + 000046 42 [ 4] 80 mul x, a + 000047 72 FB 01 [ 2] 81 addw x, (#1, sp) + 00004A 1F 01 [ 2] 82 ldw (#1, sp), x + 00004C 83 __mullong_3: + 00004C 7B 07 [ 1] 84 ld a, (#7, sp) + 00004E 97 [ 1] 85 ld xl, a + 00004F 7B 0E [ 1] 86 ld a, (#14, sp) + 000051 42 [ 4] 87 mul x, a + 000052 9F [ 1] 88 ld a, xl + 000053 1B 01 [ 1] 89 add a, (#1, sp) + 000055 6B 01 [ 1] 90 ld (#1, sp), a + 91 + 000057 7B 0A [ 1] 92 ld a, (#10, sp) + 000059 97 [ 1] 93 ld xl, a + 00005A 7B 0B [ 1] 94 ld a, (#11, sp) + 00005C 42 [ 4] 95 mul x, a + 00005D 9F [ 1] 96 ld a, xl + 00005E 1B 01 [ 1] 97 add a, (#1, sp) + 000060 6B 01 [ 1] 98 ld (#1, sp), a + 99 + 000062 7B 09 [ 1] 100 ld a, (#9, sp) + 000064 97 [ 1] 101 ld xl, a + 000065 7B 0C [ 1] 102 ld a, (#12, sp) + 000067 42 [ 4] 103 mul x, a + 000068 9F [ 1] 104 ld a, xl + 000069 1B 01 [ 1] 105 add a, (#1, sp) + 00006B 6B 01 [ 1] 106 ld (#1, sp), a + 107 + 00006D 7B 08 [ 1] 108 ld a, (#8, sp) + 00006F 97 [ 1] 109 ld xl, a + 000070 7B 0D [ 1] 110 ld a, (#13, sp) + 000072 42 [ 4] 111 mul x, a + 000073 9F [ 1] 112 ld a, xl + 000074 1B 01 [ 1] 113 add a, (#1, sp) + 000076 6B 01 [ 1] 114 ld (#1, sp), a + 000078 115 __mullong_4: + 000078 90 85 [ 2] 116 popw y + 00007A 85 [ 2] 117 popw x + 00007B 81 [ 4] 118 ret diff --git a/device/lib/stm8/_mullong.rel b/device/lib/stm8/_mullong.rel new file mode 100644 index 0000000..e33d08d --- /dev/null +++ b/device/lib/stm8/_mullong.rel @@ -0,0 +1,44 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 7C flags 0 addr 0 +S __mullong Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 5F 89 89 +R 00 00 00 01 +T 00 00 03 +R 00 00 00 01 +T 00 00 03 7B 0A 97 7B 0E 42 1F 03 +R 00 00 00 01 +T 00 00 0B +R 00 00 00 01 +T 00 00 0B 7B 09 97 7B 0E 42 72 FB 02 1F 02 4F A9 +R 00 00 00 01 +T 00 00 18 00 6B 01 7B 0A 97 7B 0D 42 72 FB 02 1F +R 00 00 00 01 +T 00 00 25 02 4F 19 01 6B 01 +R 00 00 00 01 +T 00 00 2B +R 00 00 00 01 +T 00 00 2B 7B 0A 97 7B 0C 42 72 FB 01 1F 01 7B 09 +R 00 00 00 01 +T 00 00 38 97 7B 0D 42 72 FB 01 1F 01 7B 08 97 7B +R 00 00 00 01 +T 00 00 45 0E 42 72 FB 01 1F 01 +R 00 00 00 01 +T 00 00 4C +R 00 00 00 01 +T 00 00 4C 7B 07 97 7B 0E 42 9F 1B 01 6B 01 7B 0A +R 00 00 00 01 +T 00 00 59 97 7B 0B 42 9F 1B 01 6B 01 7B 09 97 7B +R 00 00 00 01 +T 00 00 66 0C 42 9F 1B 01 6B 01 7B 08 97 7B 0D 42 +R 00 00 00 01 +T 00 00 73 9F 1B 01 6B 01 +R 00 00 00 01 +T 00 00 78 +R 00 00 00 01 +T 00 00 78 90 85 85 81 +R 00 00 00 01 diff --git a/device/lib/stm8/_mullong.s b/device/lib/stm8/_mullong.s new file mode 100644 index 0000000..5d13e8c --- /dev/null +++ b/device/lib/stm8/_mullong.s @@ -0,0 +1,118 @@ +;-------------------------------------------------------------------------- +; _mullong.s +; +; Copyright (C) 2014, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl __mullong + + .area CODE +__mullong: + clrw x + pushw x + pushw x +__mullong_0: + ld a, (#10, sp) + ld xl, a + ld a, (#14, sp) + mul x, a + ldw (#3, sp), x +__mullong_1: + ld a, (#9, sp) + ld xl, a + ld a, (#14, sp) + mul x, a + addw x, (#2, sp) + ldw (#2, sp), x + clr a + adc a, #0 + ld (#1, sp), a + + ld a, (#10, sp) + ld xl, a + ld a, (#13, sp) + mul x, a + addw x, (#2, sp) + ldw (#2, sp), x + clr a + adc a, (#1, sp) + ld (#1, sp), a +__mullong_2: + ld a, (#10, sp) + ld xl, a + ld a, (#12, sp) + mul x, a + addw x, (#1, sp) + ldw (#1, sp), x + + ld a, (#9, sp) + ld xl, a + ld a, (#13, sp) + mul x, a + addw x, (#1, sp) + ldw (#1, sp), x + + ld a, (#8, sp) + ld xl, a + ld a, (#14, sp) + mul x, a + addw x, (#1, sp) + ldw (#1, sp), x +__mullong_3: + ld a, (#7, sp) + ld xl, a + ld a, (#14, sp) + mul x, a + ld a, xl + add a, (#1, sp) + ld (#1, sp), a + + ld a, (#10, sp) + ld xl, a + ld a, (#11, sp) + mul x, a + ld a, xl + add a, (#1, sp) + ld (#1, sp), a + + ld a, (#9, sp) + ld xl, a + ld a, (#12, sp) + mul x, a + ld a, xl + add a, (#1, sp) + ld (#1, sp), a + + ld a, (#8, sp) + ld xl, a + ld a, (#13, sp) + mul x, a + ld a, xl + add a, (#1, sp) + ld (#1, sp), a +__mullong_4: + popw y + popw x + ret diff --git a/device/lib/stm8/_mullong.sym b/device/lib/stm8/_mullong.sym new file mode 100644 index 0000000..b02427b --- /dev/null +++ b/device/lib/stm8/_mullong.sym @@ -0,0 +1,18 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 __mullon 000000 GR | 1 __mullon 000003 R + 1 __mullon 00000B R | 1 __mullon 00002B R | 1 __mullon 00004C R + 1 __mullon 000078 R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 7C flags 0 + diff --git a/device/lib/stm8/_mullonglong.asm b/device/lib/stm8/_mullonglong.asm new file mode 100644 index 0000000..2df3227 --- /dev/null +++ b/device/lib/stm8/_mullonglong.asm @@ -0,0 +1,226 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _mullonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __mullonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_mullonglong.c: 35: long long _mullonglong(long long ll, long long lr) +; ----------------------------------------- +; function _mullonglong +; ----------------------------------------- +__mullonglong: + sub sp, #27 +; ../_mullonglong.c: 37: unsigned long long ret = 0ull; + clrw x + ldw (0x07, sp), x + ldw (0x05, sp), x + ldw (0x03, sp), x + ldw (0x01, sp), x +; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++) + clr (0x1a, sp) +00106$: +; ../_mullonglong.c: 42: unsigned char l = ll >> (i * 8); + ld a, (0x1a, sp) + sll a + sll a + sll a + ld (0x1b, sp), a + ldw y, (0x24, sp) + ldw (0x16, sp), y + ldw y, (0x22, sp) + ldw (0x14, sp), y + ldw y, (0x20, sp) + ldw (0x12, sp), y + ldw x, (0x26, sp) + ld a, (0x1b, sp) + jreq 00133$ +00132$: + sra (0x12, sp) + rrc (0x13, sp) + rrc (0x14, sp) + rrc (0x15, sp) + rrc (0x16, sp) + rrc (0x17, sp) + rrcw x + dec a + jrne 00132$ +00133$: + ldw (0x18, sp), x + ld a, (0x19, sp) + ld (0x11, sp), a +; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++) + clr (0x1b, sp) +00104$: + clrw x + ld a, (0x1a, sp) + ld xl, a + ld a, (0x1b, sp) + ld (0x19, sp), a + clr (0x18, sp) + addw x, (0x18, sp) + cpw x, #0x0008 + jrslt 00134$ + jp 00107$ +00134$: +; ../_mullonglong.c: 45: unsigned char r = lr >> (j * 8); + ld a, (0x1b, sp) + sll a + sll a + sll a + ld (0x19, sp), a + ldw y, (0x2c, sp) + ldw (0x16, sp), y + ldw y, (0x2a, sp) + ldw (0x14, sp), y + ldw y, (0x28, sp) + ldw (0x12, sp), y + ldw x, (0x2e, sp) + ld a, (0x19, sp) + jreq 00136$ +00135$: + sra (0x12, sp) + rrc (0x13, sp) + rrc (0x14, sp) + rrc (0x15, sp) + rrc (0x16, sp) + rrc (0x17, sp) + rrcw x + dec a + jrne 00135$ +00136$: + ldw (0x18, sp), x + ld a, (0x19, sp) + ld xl, a +; ../_mullonglong.c: 46: ret += (unsigned long long)((unsigned short)(l * r)) << ((i + j) * 8); + ld a, (0x11, sp) + mul x, a + ldw (0x0f, sp), x + clr (0x0e, sp) + clr (0x0d, sp) + clr (0x0c, sp) + clr (0x0b, sp) + clr (0x0a, sp) + clr (0x09, sp) + ld a, (0x1a, sp) + add a, (0x1b, sp) + sll a + sll a + sll a + ld (0x19, sp), a + ldw y, (0x0d, sp) + ldw (0x16, sp), y + ldw y, (0x0b, sp) + ldw (0x14, sp), y + ldw y, (0x09, sp) + ldw (0x12, sp), y + ldw x, (0x0f, sp) + ld a, (0x19, sp) + jreq 00138$ +00137$: + sllw x + rlc (0x17, sp) + rlc (0x16, sp) + rlc (0x15, sp) + rlc (0x14, sp) + rlc (0x13, sp) + rlc (0x12, sp) + dec a + jrne 00137$ +00138$: + ldw (0x18, sp), x + addw x, (0x07, sp) + ldw (0x0f, sp), x + ld a, (0x06, sp) + adc a, (0x17, sp) + ld (0x0e, sp), a + ld a, (0x05, sp) + adc a, (0x16, sp) + ld (0x0d, sp), a + ld a, (0x04, sp) + adc a, (0x15, sp) + ld (0x0c, sp), a + ld a, (0x03, sp) + adc a, (0x14, sp) + ldw y, (0x01, sp) + jrnc 00139$ + incw y +00139$: + addw y, (0x12, sp) + ld (0x03, sp), a + ldw (0x01, sp), y + ldw y, (0x0f, sp) + ldw (0x07, sp), y + ldw y, (0x0d, sp) + ldw (0x05, sp), y + ld a, (0x0c, sp) + ld (0x04, sp), a +; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++) + inc (0x1b, sp) + jp 00104$ +00107$: +; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++) + inc (0x1a, sp) + ld a, (0x1a, sp) + cp a, #0x08 + jrnc 00140$ + jp 00106$ +00140$: +; ../_mullonglong.c: 50: return(ret); + ldw x, (0x1e, sp) + ldw y, (0x07, sp) + ldw (#6, x), y + ldw y, (0x05, sp) + ldw (#4, x), y + ldw y, (0x03, sp) + ldw (#2, x), y + ldw y, (0x01, sp) + ldw (x), y +; ../_mullonglong.c: 51: } + addw sp, #27 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_mullonglong.lst b/device/lib/stm8/_mullonglong.lst new file mode 100644 index 0000000..0e2fb51 --- /dev/null +++ b/device/lib/stm8/_mullonglong.lst @@ -0,0 +1,226 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _mullonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __mullonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_mullonglong.c: 35: long long _mullonglong(long long ll, long long lr) + 50 ; ----------------------------------------- + 51 ; function _mullonglong + 52 ; ----------------------------------------- + 000000 53 __mullonglong: + 000000 52 1B [ 2] 54 sub sp, #27 + 55 ; ../_mullonglong.c: 37: unsigned long long ret = 0ull; + 000002 5F [ 1] 56 clrw x + 000003 1F 07 [ 2] 57 ldw (0x07, sp), x + 000005 1F 05 [ 2] 58 ldw (0x05, sp), x + 000007 1F 03 [ 2] 59 ldw (0x03, sp), x + 000009 1F 01 [ 2] 60 ldw (0x01, sp), x + 61 ; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++) + 00000B 0F 1A [ 1] 62 clr (0x1a, sp) + 00000D 63 00106$: + 64 ; ../_mullonglong.c: 42: unsigned char l = ll >> (i * 8); + 00000D 7B 1A [ 1] 65 ld a, (0x1a, sp) + 00000F 48 [ 1] 66 sll a + 000010 48 [ 1] 67 sll a + 000011 48 [ 1] 68 sll a + 000012 6B 1B [ 1] 69 ld (0x1b, sp), a + 000014 16 24 [ 2] 70 ldw y, (0x24, sp) + 000016 17 16 [ 2] 71 ldw (0x16, sp), y + 000018 16 22 [ 2] 72 ldw y, (0x22, sp) + 00001A 17 14 [ 2] 73 ldw (0x14, sp), y + 00001C 16 20 [ 2] 74 ldw y, (0x20, sp) + 00001E 17 12 [ 2] 75 ldw (0x12, sp), y + 000020 1E 26 [ 2] 76 ldw x, (0x26, sp) + 000022 7B 1B [ 1] 77 ld a, (0x1b, sp) + 000024 27 10 [ 1] 78 jreq 00133$ + 000026 79 00132$: + 000026 07 12 [ 1] 80 sra (0x12, sp) + 000028 06 13 [ 1] 81 rrc (0x13, sp) + 00002A 06 14 [ 1] 82 rrc (0x14, sp) + 00002C 06 15 [ 1] 83 rrc (0x15, sp) + 00002E 06 16 [ 1] 84 rrc (0x16, sp) + 000030 06 17 [ 1] 85 rrc (0x17, sp) + 000032 56 [ 2] 86 rrcw x + 000033 4A [ 1] 87 dec a + 000034 26 F0 [ 1] 88 jrne 00132$ + 000036 89 00133$: + 000036 1F 18 [ 2] 90 ldw (0x18, sp), x + 000038 7B 19 [ 1] 91 ld a, (0x19, sp) + 00003A 6B 11 [ 1] 92 ld (0x11, sp), a + 93 ; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++) + 00003C 0F 1B [ 1] 94 clr (0x1b, sp) + 00003E 95 00104$: + 00003E 5F [ 1] 96 clrw x + 00003F 7B 1A [ 1] 97 ld a, (0x1a, sp) + 000041 97 [ 1] 98 ld xl, a + 000042 7B 1B [ 1] 99 ld a, (0x1b, sp) + 000044 6B 19 [ 1] 100 ld (0x19, sp), a + 000046 0F 18 [ 1] 101 clr (0x18, sp) + 000048 72 FB 18 [ 2] 102 addw x, (0x18, sp) + 00004B A3 00 08 [ 2] 103 cpw x, #0x0008 + 00004E 2F 03 [ 1] 104 jrslt 00134$ + 000050 CCr00rF8 [ 2] 105 jp 00107$ + 000053 106 00134$: + 107 ; ../_mullonglong.c: 45: unsigned char r = lr >> (j * 8); + 000053 7B 1B [ 1] 108 ld a, (0x1b, sp) + 000055 48 [ 1] 109 sll a + 000056 48 [ 1] 110 sll a + 000057 48 [ 1] 111 sll a + 000058 6B 19 [ 1] 112 ld (0x19, sp), a + 00005A 16 2C [ 2] 113 ldw y, (0x2c, sp) + 00005C 17 16 [ 2] 114 ldw (0x16, sp), y + 00005E 16 2A [ 2] 115 ldw y, (0x2a, sp) + 000060 17 14 [ 2] 116 ldw (0x14, sp), y + 000062 16 28 [ 2] 117 ldw y, (0x28, sp) + 000064 17 12 [ 2] 118 ldw (0x12, sp), y + 000066 1E 2E [ 2] 119 ldw x, (0x2e, sp) + 000068 7B 19 [ 1] 120 ld a, (0x19, sp) + 00006A 27 10 [ 1] 121 jreq 00136$ + 00006C 122 00135$: + 00006C 07 12 [ 1] 123 sra (0x12, sp) + 00006E 06 13 [ 1] 124 rrc (0x13, sp) + 000070 06 14 [ 1] 125 rrc (0x14, sp) + 000072 06 15 [ 1] 126 rrc (0x15, sp) + 000074 06 16 [ 1] 127 rrc (0x16, sp) + 000076 06 17 [ 1] 128 rrc (0x17, sp) + 000078 56 [ 2] 129 rrcw x + 000079 4A [ 1] 130 dec a + 00007A 26 F0 [ 1] 131 jrne 00135$ + 00007C 132 00136$: + 00007C 1F 18 [ 2] 133 ldw (0x18, sp), x + 00007E 7B 19 [ 1] 134 ld a, (0x19, sp) + 000080 97 [ 1] 135 ld xl, a + 136 ; ../_mullonglong.c: 46: ret += (unsigned long long)((unsigned short)(l * r)) << ((i + j) * 8); + 000081 7B 11 [ 1] 137 ld a, (0x11, sp) + 000083 42 [ 4] 138 mul x, a + 000084 1F 0F [ 2] 139 ldw (0x0f, sp), x + 000086 0F 0E [ 1] 140 clr (0x0e, sp) + 000088 0F 0D [ 1] 141 clr (0x0d, sp) + 00008A 0F 0C [ 1] 142 clr (0x0c, sp) + 00008C 0F 0B [ 1] 143 clr (0x0b, sp) + 00008E 0F 0A [ 1] 144 clr (0x0a, sp) + 000090 0F 09 [ 1] 145 clr (0x09, sp) + 000092 7B 1A [ 1] 146 ld a, (0x1a, sp) + 000094 1B 1B [ 1] 147 add a, (0x1b, sp) + 000096 48 [ 1] 148 sll a + 000097 48 [ 1] 149 sll a + 000098 48 [ 1] 150 sll a + 000099 6B 19 [ 1] 151 ld (0x19, sp), a + 00009B 16 0D [ 2] 152 ldw y, (0x0d, sp) + 00009D 17 16 [ 2] 153 ldw (0x16, sp), y + 00009F 16 0B [ 2] 154 ldw y, (0x0b, sp) + 0000A1 17 14 [ 2] 155 ldw (0x14, sp), y + 0000A3 16 09 [ 2] 156 ldw y, (0x09, sp) + 0000A5 17 12 [ 2] 157 ldw (0x12, sp), y + 0000A7 1E 0F [ 2] 158 ldw x, (0x0f, sp) + 0000A9 7B 19 [ 1] 159 ld a, (0x19, sp) + 0000AB 27 10 [ 1] 160 jreq 00138$ + 0000AD 161 00137$: + 0000AD 58 [ 2] 162 sllw x + 0000AE 09 17 [ 1] 163 rlc (0x17, sp) + 0000B0 09 16 [ 1] 164 rlc (0x16, sp) + 0000B2 09 15 [ 1] 165 rlc (0x15, sp) + 0000B4 09 14 [ 1] 166 rlc (0x14, sp) + 0000B6 09 13 [ 1] 167 rlc (0x13, sp) + 0000B8 09 12 [ 1] 168 rlc (0x12, sp) + 0000BA 4A [ 1] 169 dec a + 0000BB 26 F0 [ 1] 170 jrne 00137$ + 0000BD 171 00138$: + 0000BD 1F 18 [ 2] 172 ldw (0x18, sp), x + 0000BF 72 FB 07 [ 2] 173 addw x, (0x07, sp) + 0000C2 1F 0F [ 2] 174 ldw (0x0f, sp), x + 0000C4 7B 06 [ 1] 175 ld a, (0x06, sp) + 0000C6 19 17 [ 1] 176 adc a, (0x17, sp) + 0000C8 6B 0E [ 1] 177 ld (0x0e, sp), a + 0000CA 7B 05 [ 1] 178 ld a, (0x05, sp) + 0000CC 19 16 [ 1] 179 adc a, (0x16, sp) + 0000CE 6B 0D [ 1] 180 ld (0x0d, sp), a + 0000D0 7B 04 [ 1] 181 ld a, (0x04, sp) + 0000D2 19 15 [ 1] 182 adc a, (0x15, sp) + 0000D4 6B 0C [ 1] 183 ld (0x0c, sp), a + 0000D6 7B 03 [ 1] 184 ld a, (0x03, sp) + 0000D8 19 14 [ 1] 185 adc a, (0x14, sp) + 0000DA 16 01 [ 2] 186 ldw y, (0x01, sp) + 0000DC 24 02 [ 1] 187 jrnc 00139$ + 0000DE 90 5C [ 1] 188 incw y + 0000E0 189 00139$: + 0000E0 72 F9 12 [ 2] 190 addw y, (0x12, sp) + 0000E3 6B 03 [ 1] 191 ld (0x03, sp), a + 0000E5 17 01 [ 2] 192 ldw (0x01, sp), y + 0000E7 16 0F [ 2] 193 ldw y, (0x0f, sp) + 0000E9 17 07 [ 2] 194 ldw (0x07, sp), y + 0000EB 16 0D [ 2] 195 ldw y, (0x0d, sp) + 0000ED 17 05 [ 2] 196 ldw (0x05, sp), y + 0000EF 7B 0C [ 1] 197 ld a, (0x0c, sp) + 0000F1 6B 04 [ 1] 198 ld (0x04, sp), a + 199 ; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++) + 0000F3 0C 1B [ 1] 200 inc (0x1b, sp) + 0000F5 CCr00r3E [ 2] 201 jp 00104$ + 0000F8 202 00107$: + 203 ; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++) + 0000F8 0C 1A [ 1] 204 inc (0x1a, sp) + 0000FA 7B 1A [ 1] 205 ld a, (0x1a, sp) + 0000FC A1 08 [ 1] 206 cp a, #0x08 + 0000FE 24 03 [ 1] 207 jrnc 00140$ + 000100 CCr00r0D [ 2] 208 jp 00106$ + 000103 209 00140$: + 210 ; ../_mullonglong.c: 50: return(ret); + 000103 1E 1E [ 2] 211 ldw x, (0x1e, sp) + 000105 16 07 [ 2] 212 ldw y, (0x07, sp) + 000107 EF 06 [ 2] 213 ldw (#6, x), y + 000109 16 05 [ 2] 214 ldw y, (0x05, sp) + 00010B EF 04 [ 2] 215 ldw (#4, x), y + 00010D 16 03 [ 2] 216 ldw y, (0x03, sp) + 00010F EF 02 [ 2] 217 ldw (#2, x), y + 000111 16 01 [ 2] 218 ldw y, (0x01, sp) + 000113 FF [ 2] 219 ldw (x), y + 220 ; ../_mullonglong.c: 51: } + 000114 5B 1B [ 2] 221 addw sp, #27 + 000116 81 [ 4] 222 ret + 223 .area CODE + 224 .area CONST + 225 .area INITIALIZER + 226 .area CABS (ABS) diff --git a/device/lib/stm8/_mullonglong.rel b/device/lib/stm8/_mullonglong.rel new file mode 100644 index 0000000..3d16e5b --- /dev/null +++ b/device/lib/stm8/_mullonglong.rel @@ -0,0 +1,95 @@ +XH3 +H B areas 2 global symbols +M _mullonglong +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 117 flags 0 addr 0 +S __mullonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 1B 5F 1F 07 1F 05 1F 03 1F 01 0F 1A +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 7B 1A 48 48 48 6B 1B 16 24 17 16 16 22 +R 00 00 00 09 +T 00 00 1A 17 14 16 20 17 12 1E 26 7B 1B 27 10 +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 07 12 06 13 06 14 06 15 06 16 06 17 56 +R 00 00 00 09 +T 00 00 33 4A 26 F0 +R 00 00 00 09 +T 00 00 36 +R 00 00 00 09 +T 00 00 36 1F 18 7B 19 6B 11 0F 1B +R 00 00 00 09 +T 00 00 3E +R 00 00 00 09 +T 00 00 3E 5F 7B 1A 97 7B 1B 6B 19 0F 18 72 FB 18 +R 00 00 00 09 +T 00 00 4B A3 00 08 2F 03 CC 00 F8 +R 00 00 00 09 00 09 00 09 +T 00 00 53 +R 00 00 00 09 +T 00 00 53 7B 1B 48 48 48 6B 19 16 2C 17 16 16 2A +R 00 00 00 09 +T 00 00 60 17 14 16 28 17 12 1E 2E 7B 19 27 10 +R 00 00 00 09 +T 00 00 6C +R 00 00 00 09 +T 00 00 6C 07 12 06 13 06 14 06 15 06 16 06 17 56 +R 00 00 00 09 +T 00 00 79 4A 26 F0 +R 00 00 00 09 +T 00 00 7C +R 00 00 00 09 +T 00 00 7C 1F 18 7B 19 97 7B 11 42 1F 0F 0F 0E 0F +R 00 00 00 09 +T 00 00 89 0D 0F 0C 0F 0B 0F 0A 0F 09 7B 1A 1B 1B +R 00 00 00 09 +T 00 00 96 48 48 48 6B 19 16 0D 17 16 16 0B 17 14 +R 00 00 00 09 +T 00 00 A3 16 09 17 12 1E 0F 7B 19 27 10 +R 00 00 00 09 +T 00 00 AD +R 00 00 00 09 +T 00 00 AD 58 09 17 09 16 09 15 09 14 09 13 09 12 +R 00 00 00 09 +T 00 00 BA 4A 26 F0 +R 00 00 00 09 +T 00 00 BD +R 00 00 00 09 +T 00 00 BD 1F 18 72 FB 07 1F 0F 7B 06 19 17 6B 0E +R 00 00 00 09 +T 00 00 CA 7B 05 19 16 6B 0D 7B 04 19 15 6B 0C 7B +R 00 00 00 09 +T 00 00 D7 03 19 14 16 01 24 02 90 5C +R 00 00 00 09 +T 00 00 E0 +R 00 00 00 09 +T 00 00 E0 72 F9 12 6B 03 17 01 16 0F 17 07 16 0D +R 00 00 00 09 +T 00 00 ED 17 05 7B 0C 6B 04 0C 1B CC 00 3E +R 00 00 00 09 00 0C 00 09 +T 00 00 F8 +R 00 00 00 09 +T 00 00 F8 0C 1A 7B 1A A1 08 24 03 CC 00 0D +R 00 00 00 09 00 0C 00 09 +T 00 01 03 +R 00 00 00 09 +T 00 01 03 1E 1E 16 07 EF 06 16 05 EF 04 16 03 EF +R 00 00 00 09 +T 00 01 10 02 16 01 FF 5B 1B 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_mullonglong.sym b/device/lib/stm8/_mullonglong.sym new file mode 100644 index 0000000..e4dc0bf --- /dev/null +++ b/device/lib/stm8/_mullonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __mullonglong 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 117 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_mulschar.asm b/device/lib/stm8/_mulschar.asm new file mode 100644 index 0000000..3d90076 --- /dev/null +++ b/device/lib/stm8/_mulschar.asm @@ -0,0 +1,122 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _mulschar + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __mulschar + .globl __muluschar + .globl __mulsuchar +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_mulschar.c: 31: _mulschar (signed char x, signed char y) +; ----------------------------------------- +; function _mulschar +; ----------------------------------------- +__mulschar: +; ../_mulschar.c: 33: return ((int)x * (int)y); + ld a, (0x03, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x04, sp) + ld yl, a + rlc a + clr a + sbc a, #0x00 + ld yh, a + pushw y + pushw x + call __mulint + addw sp, #4 +; ../_mulschar.c: 34: } + ret +; ../_mulschar.c: 37: _muluschar (unsigned char x, unsigned char y) +; ----------------------------------------- +; function _muluschar +; ----------------------------------------- +__muluschar: + sub sp, #2 +; ../_mulschar.c: 39: return ((int)((signed char)x) * (int)y); + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x06, sp) + ld (0x02, sp), a + clr (0x01, sp) + ldw y, (0x01, sp) + pushw y + pushw x + call __mulint +; ../_mulschar.c: 40: } + addw sp, #6 + ret +; ../_mulschar.c: 43: _mulsuchar (signed char x, signed char y) +; ----------------------------------------- +; function _mulsuchar +; ----------------------------------------- +__mulsuchar: +; ../_mulschar.c: 45: return ((int)((unsigned char)x) * (int)y); + ld a, (0x03, sp) + clrw y + ld yl, a + ld a, (0x04, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + pushw x + pushw y + call __mulint + addw sp, #4 +; ../_mulschar.c: 46: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_mulschar.lst b/device/lib/stm8/_mulschar.lst new file mode 100644 index 0000000..264fa5d --- /dev/null +++ b/device/lib/stm8/_mulschar.lst @@ -0,0 +1,122 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _mulschar + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __mulschar + 12 .globl __muluschar + 13 .globl __mulsuchar + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../_mulschar.c: 31: _mulschar (signed char x, signed char y) + 52 ; ----------------------------------------- + 53 ; function _mulschar + 54 ; ----------------------------------------- + 000000 55 __mulschar: + 56 ; ../_mulschar.c: 33: return ((int)x * (int)y); + 000000 7B 03 [ 1] 57 ld a, (0x03, sp) + 000002 97 [ 1] 58 ld xl, a + 000003 49 [ 1] 59 rlc a + 000004 4F [ 1] 60 clr a + 000005 A2 00 [ 1] 61 sbc a, #0x00 + 000007 95 [ 1] 62 ld xh, a + 000008 7B 04 [ 1] 63 ld a, (0x04, sp) + 00000A 90 97 [ 1] 64 ld yl, a + 00000C 49 [ 1] 65 rlc a + 00000D 4F [ 1] 66 clr a + 00000E A2 00 [ 1] 67 sbc a, #0x00 + 000010 90 95 [ 1] 68 ld yh, a + 000012 90 89 [ 2] 69 pushw y + 000014 89 [ 2] 70 pushw x + 000015 CDr00r00 [ 4] 71 call __mulint + 000018 5B 04 [ 2] 72 addw sp, #4 + 73 ; ../_mulschar.c: 34: } + 00001A 81 [ 4] 74 ret + 75 ; ../_mulschar.c: 37: _muluschar (unsigned char x, unsigned char y) + 76 ; ----------------------------------------- + 77 ; function _muluschar + 78 ; ----------------------------------------- + 00001B 79 __muluschar: + 00001B 52 02 [ 2] 80 sub sp, #2 + 81 ; ../_mulschar.c: 39: return ((int)((signed char)x) * (int)y); + 00001D 7B 05 [ 1] 82 ld a, (0x05, sp) + 00001F 97 [ 1] 83 ld xl, a + 000020 49 [ 1] 84 rlc a + 000021 4F [ 1] 85 clr a + 000022 A2 00 [ 1] 86 sbc a, #0x00 + 000024 95 [ 1] 87 ld xh, a + 000025 7B 06 [ 1] 88 ld a, (0x06, sp) + 000027 6B 02 [ 1] 89 ld (0x02, sp), a + 000029 0F 01 [ 1] 90 clr (0x01, sp) + 00002B 16 01 [ 2] 91 ldw y, (0x01, sp) + 00002D 90 89 [ 2] 92 pushw y + 00002F 89 [ 2] 93 pushw x + 000030 CDr00r00 [ 4] 94 call __mulint + 95 ; ../_mulschar.c: 40: } + 000033 5B 06 [ 2] 96 addw sp, #6 + 000035 81 [ 4] 97 ret + 98 ; ../_mulschar.c: 43: _mulsuchar (signed char x, signed char y) + 99 ; ----------------------------------------- + 100 ; function _mulsuchar + 101 ; ----------------------------------------- + 000036 102 __mulsuchar: + 103 ; ../_mulschar.c: 45: return ((int)((unsigned char)x) * (int)y); + 000036 7B 03 [ 1] 104 ld a, (0x03, sp) + 000038 90 5F [ 1] 105 clrw y + 00003A 90 97 [ 1] 106 ld yl, a + 00003C 7B 04 [ 1] 107 ld a, (0x04, sp) + 00003E 97 [ 1] 108 ld xl, a + 00003F 49 [ 1] 109 rlc a + 000040 4F [ 1] 110 clr a + 000041 A2 00 [ 1] 111 sbc a, #0x00 + 000043 95 [ 1] 112 ld xh, a + 000044 89 [ 2] 113 pushw x + 000045 90 89 [ 2] 114 pushw y + 000047 CDr00r00 [ 4] 115 call __mulint + 00004A 5B 04 [ 2] 116 addw sp, #4 + 117 ; ../_mulschar.c: 46: } + 00004C 81 [ 4] 118 ret + 119 .area CODE + 120 .area CONST + 121 .area INITIALIZER + 122 .area CABS (ABS) diff --git a/device/lib/stm8/_mulschar.rel b/device/lib/stm8/_mulschar.rel new file mode 100644 index 0000000..4cf0045 --- /dev/null +++ b/device/lib/stm8/_mulschar.rel @@ -0,0 +1,42 @@ +XH3 +H B areas 5 global symbols +M _mulschar +O -mstm8 +S __mulint Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 4D flags 0 addr 0 +S __mulsuchar Def000036 +S __muluschar Def00001B +S __mulschar Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 03 97 49 4F A2 00 95 7B 04 90 97 49 +R 00 00 00 09 +T 00 00 0D 4F A2 00 90 95 90 89 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 00 +T 00 00 1A 81 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 52 02 7B 05 97 49 4F A2 00 95 7B 06 6B +R 00 00 00 09 +T 00 00 28 02 0F 01 16 01 90 89 89 CD 00 00 5B 06 +R 00 00 00 09 02 0C 00 00 +T 00 00 35 81 +R 00 00 00 09 +T 00 00 36 +R 00 00 00 09 +T 00 00 36 7B 03 90 5F 90 97 7B 04 97 49 4F A2 00 +R 00 00 00 09 +T 00 00 43 95 89 90 89 CD 00 00 5B 04 81 +R 00 00 00 09 02 08 00 00 diff --git a/device/lib/stm8/_mulschar.sym b/device/lib/stm8/_mulschar.sym new file mode 100644 index 0000000..ca22009 --- /dev/null +++ b/device/lib/stm8/_mulschar.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + __mulint ****** GX + 9 __mulschar 000000 GR + 9 __mulsuchar 000036 GR + 9 __muluschar 00001B GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 4D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_rlslonglong.asm b/device/lib/stm8/_rlslonglong.asm new file mode 100644 index 0000000..62fcb4b --- /dev/null +++ b/device/lib/stm8/_rlslonglong.asm @@ -0,0 +1,102 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _rlslonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __rlslonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_rlslonglong.c: 35: long long _rlslonglong(long long l, char s) +; ----------------------------------------- +; function _rlslonglong +; ----------------------------------------- +__rlslonglong: + sub sp, #17 +; ../_rlslonglong.c: 37: return((unsigned long long)(l) << s); + ldw y, (0x1c, sp) + ldw (0x07, sp), y + ldw y, (0x1a, sp) + ldw (0x05, sp), y + ldw y, (0x18, sp) + ldw (0x03, sp), y + ldw y, (0x16, sp) + ldw (0x01, sp), y + ld a, (0x1e, sp) + ld (0x11, sp), a + ldw y, (0x05, sp) + ldw (0x0e, sp), y + ldw y, (0x03, sp) + ldw (0x0c, sp), y + ldw y, (0x01, sp) + ldw (0x0a, sp), y + ldw x, (0x07, sp) + ld a, (0x11, sp) + jreq 00104$ +00103$: + sllw x + rlc (0x0f, sp) + rlc (0x0e, sp) + rlc (0x0d, sp) + rlc (0x0c, sp) + rlc (0x0b, sp) + rlc (0x0a, sp) + dec a + jrne 00103$ +00104$: + ldw (0x10, sp), x + ldw x, (0x14, sp) + ldw y, (0x10, sp) + ldw (#6, x), y + ldw y, (0x0e, sp) + ldw (#4, x), y + ldw y, (0x0c, sp) + ldw (#2, x), y + ldw y, (0x0a, sp) + ldw (x), y +; ../_rlslonglong.c: 38: } + addw sp, #17 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_rlslonglong.lst b/device/lib/stm8/_rlslonglong.lst new file mode 100644 index 0000000..eb1e60c --- /dev/null +++ b/device/lib/stm8/_rlslonglong.lst @@ -0,0 +1,102 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _rlslonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __rlslonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_rlslonglong.c: 35: long long _rlslonglong(long long l, char s) + 50 ; ----------------------------------------- + 51 ; function _rlslonglong + 52 ; ----------------------------------------- + 000000 53 __rlslonglong: + 000000 52 11 [ 2] 54 sub sp, #17 + 55 ; ../_rlslonglong.c: 37: return((unsigned long long)(l) << s); + 000002 16 1C [ 2] 56 ldw y, (0x1c, sp) + 000004 17 07 [ 2] 57 ldw (0x07, sp), y + 000006 16 1A [ 2] 58 ldw y, (0x1a, sp) + 000008 17 05 [ 2] 59 ldw (0x05, sp), y + 00000A 16 18 [ 2] 60 ldw y, (0x18, sp) + 00000C 17 03 [ 2] 61 ldw (0x03, sp), y + 00000E 16 16 [ 2] 62 ldw y, (0x16, sp) + 000010 17 01 [ 2] 63 ldw (0x01, sp), y + 000012 7B 1E [ 1] 64 ld a, (0x1e, sp) + 000014 6B 11 [ 1] 65 ld (0x11, sp), a + 000016 16 05 [ 2] 66 ldw y, (0x05, sp) + 000018 17 0E [ 2] 67 ldw (0x0e, sp), y + 00001A 16 03 [ 2] 68 ldw y, (0x03, sp) + 00001C 17 0C [ 2] 69 ldw (0x0c, sp), y + 00001E 16 01 [ 2] 70 ldw y, (0x01, sp) + 000020 17 0A [ 2] 71 ldw (0x0a, sp), y + 000022 1E 07 [ 2] 72 ldw x, (0x07, sp) + 000024 7B 11 [ 1] 73 ld a, (0x11, sp) + 000026 27 10 [ 1] 74 jreq 00104$ + 000028 75 00103$: + 000028 58 [ 2] 76 sllw x + 000029 09 0F [ 1] 77 rlc (0x0f, sp) + 00002B 09 0E [ 1] 78 rlc (0x0e, sp) + 00002D 09 0D [ 1] 79 rlc (0x0d, sp) + 00002F 09 0C [ 1] 80 rlc (0x0c, sp) + 000031 09 0B [ 1] 81 rlc (0x0b, sp) + 000033 09 0A [ 1] 82 rlc (0x0a, sp) + 000035 4A [ 1] 83 dec a + 000036 26 F0 [ 1] 84 jrne 00103$ + 000038 85 00104$: + 000038 1F 10 [ 2] 86 ldw (0x10, sp), x + 00003A 1E 14 [ 2] 87 ldw x, (0x14, sp) + 00003C 16 10 [ 2] 88 ldw y, (0x10, sp) + 00003E EF 06 [ 2] 89 ldw (#6, x), y + 000040 16 0E [ 2] 90 ldw y, (0x0e, sp) + 000042 EF 04 [ 2] 91 ldw (#4, x), y + 000044 16 0C [ 2] 92 ldw y, (0x0c, sp) + 000046 EF 02 [ 2] 93 ldw (#2, x), y + 000048 16 0A [ 2] 94 ldw y, (0x0a, sp) + 00004A FF [ 2] 95 ldw (x), y + 96 ; ../_rlslonglong.c: 38: } + 00004B 5B 11 [ 2] 97 addw sp, #17 + 00004D 81 [ 4] 98 ret + 99 .area CODE + 100 .area CONST + 101 .area INITIALIZER + 102 .area CABS (ABS) diff --git a/device/lib/stm8/_rlslonglong.rel b/device/lib/stm8/_rlslonglong.rel new file mode 100644 index 0000000..f9460ce --- /dev/null +++ b/device/lib/stm8/_rlslonglong.rel @@ -0,0 +1,39 @@ +XH3 +H B areas 2 global symbols +M _rlslonglong +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 4E flags 0 addr 0 +S __rlslonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 11 16 1C 17 07 16 1A 17 05 16 18 17 +R 00 00 00 09 +T 00 00 0D 03 16 16 17 01 7B 1E 6B 11 16 05 17 0E +R 00 00 00 09 +T 00 00 1A 16 03 17 0C 16 01 17 0A 1E 07 7B 11 27 +R 00 00 00 09 +T 00 00 27 10 +R 00 00 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 58 09 0F 09 0E 09 0D 09 0C 09 0B 09 0A +R 00 00 00 09 +T 00 00 35 4A 26 F0 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1F 10 1E 14 16 10 EF 06 16 0E EF 04 16 +R 00 00 00 09 +T 00 00 45 0C EF 02 16 0A FF 5B 11 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_rlslonglong.sym b/device/lib/stm8/_rlslonglong.sym new file mode 100644 index 0000000..95120a9 --- /dev/null +++ b/device/lib/stm8/_rlslonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __rlslonglong 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 4E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_rlulonglong.asm b/device/lib/stm8/_rlulonglong.asm new file mode 100644 index 0000000..67e33b0 --- /dev/null +++ b/device/lib/stm8/_rlulonglong.asm @@ -0,0 +1,199 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _rlulonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __rlulonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_rlulonglong.c: 37: unsigned long long _rlulonglong(unsigned long long l, char s) +; ----------------------------------------- +; function _rlulonglong +; ----------------------------------------- +__rlulonglong: + sub sp, #16 +; ../_rlulonglong.c: 39: uint32_t *const top = (uint32_t *)((char *)(&l) + 0); + ldw y, sp + addw y, #19 + ldw x, y + ldw (0x05, sp), x +; ../_rlulonglong.c: 40: uint16_t *const middle = (uint16_t *)((char *)(&l) + 4); + ldw x, y + addw x, #0x0004 + ldw (0x07, sp), x +; ../_rlulonglong.c: 41: uint32_t *const bottom = (uint32_t *)((char *)(&l) + 4); + ldw x, y + addw x, #0x0004 + ldw (0x09, sp), x +; ../_rlulonglong.c: 42: uint16_t *const b = (uint16_t *)(&l); + ldw (0x0b, sp), y +; ../_rlulonglong.c: 52: (*top) <<= s; +00103$: +; ../_rlulonglong.c: 44: for(;s >= 16; s-= 16) + ld a, (0x1d, sp) + cp a, #0x10 + jrc 00101$ +; ../_rlulonglong.c: 46: b[0] = b[1]; + ldw x, (0x0b, sp) + incw x + incw x + ldw (0x0f, sp), x + ldw x, (x) + ldw y, (0x0b, sp) + ldw (y), x +; ../_rlulonglong.c: 47: b[1] = b[2]; + ldw x, (0x0b, sp) + addw x, #0x0004 + ldw (0x0d, sp), x + ldw x, (x) + ldw y, (0x0f, sp) + ldw (y), x +; ../_rlulonglong.c: 48: b[2] = b[3]; + ldw x, (0x0b, sp) + addw x, #0x0006 + ldw (0x0f, sp), x + ldw x, (x) + ldw y, (0x0d, sp) + ldw (y), x +; ../_rlulonglong.c: 49: b[3] = 0; + ldw x, (0x0f, sp) + clr (0x1, x) + clr (x) +; ../_rlulonglong.c: 44: for(;s >= 16; s-= 16) + ld a, (0x1d, sp) + sub a, #0x10 + ld (0x1d, sp), a + jra 00103$ +00101$: +; ../_rlulonglong.c: 52: (*top) <<= s; + ldw x, (0x05, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ld a, (0x1d, sp) + ld (0x0c, sp), a + jreq 00119$ +00118$: + sllw y + rlcw x + dec a + jrne 00118$ +00119$: + ldw (0x0f, sp), y + ldw (0x0d, sp), x + ldw x, (0x05, sp) + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +; ../_rlulonglong.c: 53: (*top) |= (((uint32_t)((*middle) & 0xffffu) << s) >> 16); + ldw x, (0x07, sp) + ldw x, (x) + exgw x, y + clrw x + ldw (0x03, sp), y + ld a, (0x0c, sp) + jreq 00121$ +00120$: + sll (0x04, sp) + rlc (0x03, sp) + rlcw x + dec a + jrne 00120$ +00121$: + ldw y, x + ld a, xl + clrw x + or a, (0x10, sp) + ld (0x04, sp), a + ld a, yh + or a, (0x0f, sp) + ld (0x03, sp), a + ld a, xl + or a, (0x0e, sp) + ld (0x02, sp), a + ld a, xh + or a, (0x0d, sp) + ld (0x01, sp), a + ldw x, (0x05, sp) + ldw y, (0x03, sp) + ldw (0x2, x), y + ldw y, (0x01, sp) + ldw (x), y +; ../_rlulonglong.c: 54: (*bottom) <<= s; + ldw x, (0x09, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ld a, (0x0c, sp) + jreq 00123$ +00122$: + sllw y + rlcw x + dec a + jrne 00122$ +00123$: + ldw (0x0f, sp), y + ldw (0x0d, sp), x + ldw x, (0x09, sp) + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +; ../_rlulonglong.c: 56: return(l); + ldw x, (0x13, sp) + ldw y, (0x1b, sp) + ldw (#6, x), y + ldw y, (0x19, sp) + ldw (#4, x), y + ldw y, (0x17, sp) + ldw (#2, x), y + ldw y, (0x15, sp) + ldw (x), y +; ../_rlulonglong.c: 57: } + addw sp, #16 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_rlulonglong.lst b/device/lib/stm8/_rlulonglong.lst new file mode 100644 index 0000000..f347c84 --- /dev/null +++ b/device/lib/stm8/_rlulonglong.lst @@ -0,0 +1,199 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _rlulonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __rlulonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_rlulonglong.c: 37: unsigned long long _rlulonglong(unsigned long long l, char s) + 50 ; ----------------------------------------- + 51 ; function _rlulonglong + 52 ; ----------------------------------------- + 000000 53 __rlulonglong: + 000000 52 10 [ 2] 54 sub sp, #16 + 55 ; ../_rlulonglong.c: 39: uint32_t *const top = (uint32_t *)((char *)(&l) + 0); + 000002 90 96 [ 1] 56 ldw y, sp + 000004 72 A9 00 13 [ 2] 57 addw y, #19 + 000008 93 [ 1] 58 ldw x, y + 000009 1F 05 [ 2] 59 ldw (0x05, sp), x + 60 ; ../_rlulonglong.c: 40: uint16_t *const middle = (uint16_t *)((char *)(&l) + 4); + 00000B 93 [ 1] 61 ldw x, y + 00000C 1C 00 04 [ 2] 62 addw x, #0x0004 + 00000F 1F 07 [ 2] 63 ldw (0x07, sp), x + 64 ; ../_rlulonglong.c: 41: uint32_t *const bottom = (uint32_t *)((char *)(&l) + 4); + 000011 93 [ 1] 65 ldw x, y + 000012 1C 00 04 [ 2] 66 addw x, #0x0004 + 000015 1F 09 [ 2] 67 ldw (0x09, sp), x + 68 ; ../_rlulonglong.c: 42: uint16_t *const b = (uint16_t *)(&l); + 000017 17 0B [ 2] 69 ldw (0x0b, sp), y + 70 ; ../_rlulonglong.c: 52: (*top) <<= s; + 000019 71 00103$: + 72 ; ../_rlulonglong.c: 44: for(;s >= 16; s-= 16) + 000019 7B 1D [ 1] 73 ld a, (0x1d, sp) + 00001B A1 10 [ 1] 74 cp a, #0x10 + 00001D 25 30 [ 1] 75 jrc 00101$ + 76 ; ../_rlulonglong.c: 46: b[0] = b[1]; + 00001F 1E 0B [ 2] 77 ldw x, (0x0b, sp) + 000021 5C [ 1] 78 incw x + 000022 5C [ 1] 79 incw x + 000023 1F 0F [ 2] 80 ldw (0x0f, sp), x + 000025 FE [ 2] 81 ldw x, (x) + 000026 16 0B [ 2] 82 ldw y, (0x0b, sp) + 000028 90 FF [ 2] 83 ldw (y), x + 84 ; ../_rlulonglong.c: 47: b[1] = b[2]; + 00002A 1E 0B [ 2] 85 ldw x, (0x0b, sp) + 00002C 1C 00 04 [ 2] 86 addw x, #0x0004 + 00002F 1F 0D [ 2] 87 ldw (0x0d, sp), x + 000031 FE [ 2] 88 ldw x, (x) + 000032 16 0F [ 2] 89 ldw y, (0x0f, sp) + 000034 90 FF [ 2] 90 ldw (y), x + 91 ; ../_rlulonglong.c: 48: b[2] = b[3]; + 000036 1E 0B [ 2] 92 ldw x, (0x0b, sp) + 000038 1C 00 06 [ 2] 93 addw x, #0x0006 + 00003B 1F 0F [ 2] 94 ldw (0x0f, sp), x + 00003D FE [ 2] 95 ldw x, (x) + 00003E 16 0D [ 2] 96 ldw y, (0x0d, sp) + 000040 90 FF [ 2] 97 ldw (y), x + 98 ; ../_rlulonglong.c: 49: b[3] = 0; + 000042 1E 0F [ 2] 99 ldw x, (0x0f, sp) + 000044 6F 01 [ 1] 100 clr (0x1, x) + 000046 7F [ 1] 101 clr (x) + 102 ; ../_rlulonglong.c: 44: for(;s >= 16; s-= 16) + 000047 7B 1D [ 1] 103 ld a, (0x1d, sp) + 000049 A0 10 [ 1] 104 sub a, #0x10 + 00004B 6B 1D [ 1] 105 ld (0x1d, sp), a + 00004D 20 CA [ 2] 106 jra 00103$ + 00004F 107 00101$: + 108 ; ../_rlulonglong.c: 52: (*top) <<= s; + 00004F 1E 05 [ 2] 109 ldw x, (0x05, sp) + 000051 90 93 [ 1] 110 ldw y, x + 000053 90 EE 02 [ 2] 111 ldw y, (0x2, y) + 000056 FE [ 2] 112 ldw x, (x) + 000057 7B 1D [ 1] 113 ld a, (0x1d, sp) + 000059 6B 0C [ 1] 114 ld (0x0c, sp), a + 00005B 27 06 [ 1] 115 jreq 00119$ + 00005D 116 00118$: + 00005D 90 58 [ 2] 117 sllw y + 00005F 59 [ 2] 118 rlcw x + 000060 4A [ 1] 119 dec a + 000061 26 FA [ 1] 120 jrne 00118$ + 000063 121 00119$: + 000063 17 0F [ 2] 122 ldw (0x0f, sp), y + 000065 1F 0D [ 2] 123 ldw (0x0d, sp), x + 000067 1E 05 [ 2] 124 ldw x, (0x05, sp) + 000069 16 0F [ 2] 125 ldw y, (0x0f, sp) + 00006B EF 02 [ 2] 126 ldw (0x2, x), y + 00006D 16 0D [ 2] 127 ldw y, (0x0d, sp) + 00006F FF [ 2] 128 ldw (x), y + 129 ; ../_rlulonglong.c: 53: (*top) |= (((uint32_t)((*middle) & 0xffffu) << s) >> 16); + 000070 1E 07 [ 2] 130 ldw x, (0x07, sp) + 000072 FE [ 2] 131 ldw x, (x) + 000073 51 [ 1] 132 exgw x, y + 000074 5F [ 1] 133 clrw x + 000075 17 03 [ 2] 134 ldw (0x03, sp), y + 000077 7B 0C [ 1] 135 ld a, (0x0c, sp) + 000079 27 08 [ 1] 136 jreq 00121$ + 00007B 137 00120$: + 00007B 08 04 [ 1] 138 sll (0x04, sp) + 00007D 09 03 [ 1] 139 rlc (0x03, sp) + 00007F 59 [ 2] 140 rlcw x + 000080 4A [ 1] 141 dec a + 000081 26 F8 [ 1] 142 jrne 00120$ + 000083 143 00121$: + 000083 90 93 [ 1] 144 ldw y, x + 000085 9F [ 1] 145 ld a, xl + 000086 5F [ 1] 146 clrw x + 000087 1A 10 [ 1] 147 or a, (0x10, sp) + 000089 6B 04 [ 1] 148 ld (0x04, sp), a + 00008B 90 9E [ 1] 149 ld a, yh + 00008D 1A 0F [ 1] 150 or a, (0x0f, sp) + 00008F 6B 03 [ 1] 151 ld (0x03, sp), a + 000091 9F [ 1] 152 ld a, xl + 000092 1A 0E [ 1] 153 or a, (0x0e, sp) + 000094 6B 02 [ 1] 154 ld (0x02, sp), a + 000096 9E [ 1] 155 ld a, xh + 000097 1A 0D [ 1] 156 or a, (0x0d, sp) + 000099 6B 01 [ 1] 157 ld (0x01, sp), a + 00009B 1E 05 [ 2] 158 ldw x, (0x05, sp) + 00009D 16 03 [ 2] 159 ldw y, (0x03, sp) + 00009F EF 02 [ 2] 160 ldw (0x2, x), y + 0000A1 16 01 [ 2] 161 ldw y, (0x01, sp) + 0000A3 FF [ 2] 162 ldw (x), y + 163 ; ../_rlulonglong.c: 54: (*bottom) <<= s; + 0000A4 1E 09 [ 2] 164 ldw x, (0x09, sp) + 0000A6 90 93 [ 1] 165 ldw y, x + 0000A8 90 EE 02 [ 2] 166 ldw y, (0x2, y) + 0000AB FE [ 2] 167 ldw x, (x) + 0000AC 7B 0C [ 1] 168 ld a, (0x0c, sp) + 0000AE 27 06 [ 1] 169 jreq 00123$ + 0000B0 170 00122$: + 0000B0 90 58 [ 2] 171 sllw y + 0000B2 59 [ 2] 172 rlcw x + 0000B3 4A [ 1] 173 dec a + 0000B4 26 FA [ 1] 174 jrne 00122$ + 0000B6 175 00123$: + 0000B6 17 0F [ 2] 176 ldw (0x0f, sp), y + 0000B8 1F 0D [ 2] 177 ldw (0x0d, sp), x + 0000BA 1E 09 [ 2] 178 ldw x, (0x09, sp) + 0000BC 16 0F [ 2] 179 ldw y, (0x0f, sp) + 0000BE EF 02 [ 2] 180 ldw (0x2, x), y + 0000C0 16 0D [ 2] 181 ldw y, (0x0d, sp) + 0000C2 FF [ 2] 182 ldw (x), y + 183 ; ../_rlulonglong.c: 56: return(l); + 0000C3 1E 13 [ 2] 184 ldw x, (0x13, sp) + 0000C5 16 1B [ 2] 185 ldw y, (0x1b, sp) + 0000C7 EF 06 [ 2] 186 ldw (#6, x), y + 0000C9 16 19 [ 2] 187 ldw y, (0x19, sp) + 0000CB EF 04 [ 2] 188 ldw (#4, x), y + 0000CD 16 17 [ 2] 189 ldw y, (0x17, sp) + 0000CF EF 02 [ 2] 190 ldw (#2, x), y + 0000D1 16 15 [ 2] 191 ldw y, (0x15, sp) + 0000D3 FF [ 2] 192 ldw (x), y + 193 ; ../_rlulonglong.c: 57: } + 0000D4 5B 10 [ 2] 194 addw sp, #16 + 0000D6 81 [ 4] 195 ret + 196 .area CODE + 197 .area CONST + 198 .area INITIALIZER + 199 .area CABS (ABS) diff --git a/device/lib/stm8/_rlulonglong.rel b/device/lib/stm8/_rlulonglong.rel new file mode 100644 index 0000000..025918c --- /dev/null +++ b/device/lib/stm8/_rlulonglong.rel @@ -0,0 +1,77 @@ +XH3 +H B areas 2 global symbols +M _rlulonglong +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size D7 flags 0 addr 0 +S __rlulonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 10 90 96 72 A9 00 13 93 1F 05 93 1C +R 00 00 00 09 +T 00 00 0D 00 04 1F 07 93 1C 00 04 1F 09 17 0B +R 00 00 00 09 +T 00 00 19 +R 00 00 00 09 +T 00 00 19 7B 1D A1 10 25 30 1E 0B 5C 5C 1F 0F FE +R 00 00 00 09 +T 00 00 26 16 0B 90 FF 1E 0B 1C 00 04 1F 0D FE 16 +R 00 00 00 09 +T 00 00 33 0F 90 FF 1E 0B 1C 00 06 1F 0F FE 16 0D +R 00 00 00 09 +T 00 00 40 90 FF 1E 0F 6F 01 7F 7B 1D A0 10 6B 1D +R 00 00 00 09 +T 00 00 4D 20 CA +R 00 00 00 09 +T 00 00 4F +R 00 00 00 09 +T 00 00 4F 1E 05 90 93 90 EE 02 FE 7B 1D 6B 0C 27 +R 00 00 00 09 +T 00 00 5C 06 +R 00 00 00 09 +T 00 00 5D +R 00 00 00 09 +T 00 00 5D 90 58 59 4A 26 FA +R 00 00 00 09 +T 00 00 63 +R 00 00 00 09 +T 00 00 63 17 0F 1F 0D 1E 05 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 70 1E 07 FE 51 5F 17 03 7B 0C 27 08 +R 00 00 00 09 +T 00 00 7B +R 00 00 00 09 +T 00 00 7B 08 04 09 03 59 4A 26 F8 +R 00 00 00 09 +T 00 00 83 +R 00 00 00 09 +T 00 00 83 90 93 9F 5F 1A 10 6B 04 90 9E 1A 0F 6B +R 00 00 00 09 +T 00 00 90 03 9F 1A 0E 6B 02 9E 1A 0D 6B 01 1E 05 +R 00 00 00 09 +T 00 00 9D 16 03 EF 02 16 01 FF 1E 09 90 93 90 EE +R 00 00 00 09 +T 00 00 AA 02 FE 7B 0C 27 06 +R 00 00 00 09 +T 00 00 B0 +R 00 00 00 09 +T 00 00 B0 90 58 59 4A 26 FA +R 00 00 00 09 +T 00 00 B6 +R 00 00 00 09 +T 00 00 B6 17 0F 1F 0D 1E 09 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 C3 1E 13 16 1B EF 06 16 19 EF 04 16 17 EF +R 00 00 00 09 +T 00 00 D0 02 16 15 FF 5B 10 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_rlulonglong.sym b/device/lib/stm8/_rlulonglong.sym new file mode 100644 index 0000000..ad9513c --- /dev/null +++ b/device/lib/stm8/_rlulonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __rlulonglong 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size D7 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_rrslonglong.asm b/device/lib/stm8/_rrslonglong.asm new file mode 100644 index 0000000..d5cadd2 --- /dev/null +++ b/device/lib/stm8/_rrslonglong.asm @@ -0,0 +1,211 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _rrslonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __rrslonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_rrslonglong.c: 38: long long _rrslonglong(long long l, char s) +; ----------------------------------------- +; function _rrslonglong +; ----------------------------------------- +__rrslonglong: + sub sp, #16 +; ../_rrslonglong.c: 40: int32_t *top = (uint32_t *)((char *)(&l) + 0); + ldw y, sp + addw y, #19 + ldw x, y + ldw (0x05, sp), x +; ../_rrslonglong.c: 41: uint32_t *middle = (uint16_t *)((char *)(&l) + 2); + ldw x, y + incw x + incw x + ldw (0x07, sp), x +; ../_rrslonglong.c: 42: uint32_t *bottom = (uint32_t *)((char *)(&l) + 4); + ldw x, y + addw x, #0x0004 + ldw (0x09, sp), x +; ../_rrslonglong.c: 43: uint16_t *b = (uint16_t *)(&l); + ldw (0x0b, sp), y +; ../_rrslonglong.c: 53: (*bottom) >>= s; +00103$: +; ../_rrslonglong.c: 45: for(;s >= 16; s-= 16) + ld a, (0x1d, sp) + cp a, #0x10 + jrc 00101$ +; ../_rrslonglong.c: 47: b[3] = b[2]; + ldw x, (0x0b, sp) + addw x, #0x0006 + ldw y, (0x0b, sp) + addw y, #0x0004 + ldw (0x0d, sp), y + ldw y, (y) + ldw (x), y +; ../_rrslonglong.c: 48: b[2] = b[1]; + ldw x, (0x0b, sp) + incw x + incw x + ldw (0x0f, sp), x + ldw x, (x) + ldw y, (0x0d, sp) + ldw (y), x +; ../_rrslonglong.c: 49: b[1] = b[0]; + ldw x, (0x0b, sp) + ldw x, (x) + ldw y, (0x0f, sp) + ldw (y), x +; ../_rrslonglong.c: 50: b[0] = (b[0] & 0x8000) ? 0xffff : 0x000000; + ldw y, (0x0b, sp) + ldw (0x0f, sp), y + ldw x, (0x0b, sp) + ldw x, (x) + jrpl 00107$ + clrw x + decw x + .byte 0x21 +00107$: + clrw x +00108$: + ldw y, (0x0f, sp) + ldw (y), x +; ../_rrslonglong.c: 45: for(;s >= 16; s-= 16) + ld a, (0x1d, sp) + sub a, #0x10 + ld (0x1d, sp), a + jra 00103$ +00101$: +; ../_rrslonglong.c: 53: (*bottom) >>= s; + ldw x, (0x09, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ld a, (0x1d, sp) + jreq 00127$ +00126$: + srlw x + rrcw y + dec a + jrne 00126$ +00127$: + ldw (0x0f, sp), y + ldw (0x0d, sp), x + ldw x, (0x09, sp) + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +; ../_rrslonglong.c: 54: (*middle) |= (((*middle & 0xffff0000ul) >> s) & 0x0000fffful); + ldw x, (0x07, sp) + ldw y, x + ldw y, (0x2, y) + ldw (0x03, sp), y + ldw x, (x) + ldw (0x01, sp), x + clrw x + ldw y, (0x01, sp) + ld a, (0x1d, sp) + jreq 00129$ +00128$: + srlw y + rrcw x + dec a + jrne 00128$ +00129$: + ldw (0x0b, sp), x + clr (0x0a, sp) + clr (0x09, sp) + ld a, (0x04, sp) + or a, (0x0c, sp) + ld (0x10, sp), a + ld a, (0x03, sp) + or a, (0x0b, sp) + ld (0x0f, sp), a + ld a, (0x02, sp) + or a, (0x0a, sp) + ld (0x0e, sp), a + ld a, (0x01, sp) + or a, (0x09, sp) + ld (0x0d, sp), a + ldw x, (0x07, sp) + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +; ../_rrslonglong.c: 55: (*top) >>= s; + ldw x, (0x05, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ld a, (0x1d, sp) + jreq 00131$ +00130$: + sraw x + rrcw y + dec a + jrne 00130$ +00131$: + ldw (0x0f, sp), y + ldw (0x0d, sp), x + ldw x, (0x05, sp) + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +; ../_rrslonglong.c: 57: return(l); + ldw x, (0x13, sp) + ldw y, (0x1b, sp) + ldw (#6, x), y + ldw y, (0x19, sp) + ldw (#4, x), y + ldw y, (0x17, sp) + ldw (#2, x), y + ldw y, (0x15, sp) + ldw (x), y +; ../_rrslonglong.c: 58: } + addw sp, #16 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_rrslonglong.lst b/device/lib/stm8/_rrslonglong.lst new file mode 100644 index 0000000..d7902c2 --- /dev/null +++ b/device/lib/stm8/_rrslonglong.lst @@ -0,0 +1,211 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _rrslonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __rrslonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_rrslonglong.c: 38: long long _rrslonglong(long long l, char s) + 50 ; ----------------------------------------- + 51 ; function _rrslonglong + 52 ; ----------------------------------------- + 000000 53 __rrslonglong: + 000000 52 10 [ 2] 54 sub sp, #16 + 55 ; ../_rrslonglong.c: 40: int32_t *top = (uint32_t *)((char *)(&l) + 0); + 000002 90 96 [ 1] 56 ldw y, sp + 000004 72 A9 00 13 [ 2] 57 addw y, #19 + 000008 93 [ 1] 58 ldw x, y + 000009 1F 05 [ 2] 59 ldw (0x05, sp), x + 60 ; ../_rrslonglong.c: 41: uint32_t *middle = (uint16_t *)((char *)(&l) + 2); + 00000B 93 [ 1] 61 ldw x, y + 00000C 5C [ 1] 62 incw x + 00000D 5C [ 1] 63 incw x + 00000E 1F 07 [ 2] 64 ldw (0x07, sp), x + 65 ; ../_rrslonglong.c: 42: uint32_t *bottom = (uint32_t *)((char *)(&l) + 4); + 000010 93 [ 1] 66 ldw x, y + 000011 1C 00 04 [ 2] 67 addw x, #0x0004 + 000014 1F 09 [ 2] 68 ldw (0x09, sp), x + 69 ; ../_rrslonglong.c: 43: uint16_t *b = (uint16_t *)(&l); + 000016 17 0B [ 2] 70 ldw (0x0b, sp), y + 71 ; ../_rrslonglong.c: 53: (*bottom) >>= s; + 000018 72 00103$: + 73 ; ../_rrslonglong.c: 45: for(;s >= 16; s-= 16) + 000018 7B 1D [ 1] 74 ld a, (0x1d, sp) + 00001A A1 10 [ 1] 75 cp a, #0x10 + 00001C 25 3B [ 1] 76 jrc 00101$ + 77 ; ../_rrslonglong.c: 47: b[3] = b[2]; + 00001E 1E 0B [ 2] 78 ldw x, (0x0b, sp) + 000020 1C 00 06 [ 2] 79 addw x, #0x0006 + 000023 16 0B [ 2] 80 ldw y, (0x0b, sp) + 000025 72 A9 00 04 [ 2] 81 addw y, #0x0004 + 000029 17 0D [ 2] 82 ldw (0x0d, sp), y + 00002B 90 FE [ 2] 83 ldw y, (y) + 00002D FF [ 2] 84 ldw (x), y + 85 ; ../_rrslonglong.c: 48: b[2] = b[1]; + 00002E 1E 0B [ 2] 86 ldw x, (0x0b, sp) + 000030 5C [ 1] 87 incw x + 000031 5C [ 1] 88 incw x + 000032 1F 0F [ 2] 89 ldw (0x0f, sp), x + 000034 FE [ 2] 90 ldw x, (x) + 000035 16 0D [ 2] 91 ldw y, (0x0d, sp) + 000037 90 FF [ 2] 92 ldw (y), x + 93 ; ../_rrslonglong.c: 49: b[1] = b[0]; + 000039 1E 0B [ 2] 94 ldw x, (0x0b, sp) + 00003B FE [ 2] 95 ldw x, (x) + 00003C 16 0F [ 2] 96 ldw y, (0x0f, sp) + 00003E 90 FF [ 2] 97 ldw (y), x + 98 ; ../_rrslonglong.c: 50: b[0] = (b[0] & 0x8000) ? 0xffff : 0x000000; + 000040 16 0B [ 2] 99 ldw y, (0x0b, sp) + 000042 17 0F [ 2] 100 ldw (0x0f, sp), y + 000044 1E 0B [ 2] 101 ldw x, (0x0b, sp) + 000046 FE [ 2] 102 ldw x, (x) + 000047 2A 03 [ 1] 103 jrpl 00107$ + 000049 5F [ 1] 104 clrw x + 00004A 5A [ 2] 105 decw x + 00004B 21 106 .byte 0x21 + 00004C 107 00107$: + 00004C 5F [ 1] 108 clrw x + 00004D 109 00108$: + 00004D 16 0F [ 2] 110 ldw y, (0x0f, sp) + 00004F 90 FF [ 2] 111 ldw (y), x + 112 ; ../_rrslonglong.c: 45: for(;s >= 16; s-= 16) + 000051 7B 1D [ 1] 113 ld a, (0x1d, sp) + 000053 A0 10 [ 1] 114 sub a, #0x10 + 000055 6B 1D [ 1] 115 ld (0x1d, sp), a + 000057 20 BF [ 2] 116 jra 00103$ + 000059 117 00101$: + 118 ; ../_rrslonglong.c: 53: (*bottom) >>= s; + 000059 1E 09 [ 2] 119 ldw x, (0x09, sp) + 00005B 90 93 [ 1] 120 ldw y, x + 00005D 90 EE 02 [ 2] 121 ldw y, (0x2, y) + 000060 FE [ 2] 122 ldw x, (x) + 000061 7B 1D [ 1] 123 ld a, (0x1d, sp) + 000063 27 06 [ 1] 124 jreq 00127$ + 000065 125 00126$: + 000065 54 [ 2] 126 srlw x + 000066 90 56 [ 2] 127 rrcw y + 000068 4A [ 1] 128 dec a + 000069 26 FA [ 1] 129 jrne 00126$ + 00006B 130 00127$: + 00006B 17 0F [ 2] 131 ldw (0x0f, sp), y + 00006D 1F 0D [ 2] 132 ldw (0x0d, sp), x + 00006F 1E 09 [ 2] 133 ldw x, (0x09, sp) + 000071 16 0F [ 2] 134 ldw y, (0x0f, sp) + 000073 EF 02 [ 2] 135 ldw (0x2, x), y + 000075 16 0D [ 2] 136 ldw y, (0x0d, sp) + 000077 FF [ 2] 137 ldw (x), y + 138 ; ../_rrslonglong.c: 54: (*middle) |= (((*middle & 0xffff0000ul) >> s) & 0x0000fffful); + 000078 1E 07 [ 2] 139 ldw x, (0x07, sp) + 00007A 90 93 [ 1] 140 ldw y, x + 00007C 90 EE 02 [ 2] 141 ldw y, (0x2, y) + 00007F 17 03 [ 2] 142 ldw (0x03, sp), y + 000081 FE [ 2] 143 ldw x, (x) + 000082 1F 01 [ 2] 144 ldw (0x01, sp), x + 000084 5F [ 1] 145 clrw x + 000085 16 01 [ 2] 146 ldw y, (0x01, sp) + 000087 7B 1D [ 1] 147 ld a, (0x1d, sp) + 000089 27 06 [ 1] 148 jreq 00129$ + 00008B 149 00128$: + 00008B 90 54 [ 2] 150 srlw y + 00008D 56 [ 2] 151 rrcw x + 00008E 4A [ 1] 152 dec a + 00008F 26 FA [ 1] 153 jrne 00128$ + 000091 154 00129$: + 000091 1F 0B [ 2] 155 ldw (0x0b, sp), x + 000093 0F 0A [ 1] 156 clr (0x0a, sp) + 000095 0F 09 [ 1] 157 clr (0x09, sp) + 000097 7B 04 [ 1] 158 ld a, (0x04, sp) + 000099 1A 0C [ 1] 159 or a, (0x0c, sp) + 00009B 6B 10 [ 1] 160 ld (0x10, sp), a + 00009D 7B 03 [ 1] 161 ld a, (0x03, sp) + 00009F 1A 0B [ 1] 162 or a, (0x0b, sp) + 0000A1 6B 0F [ 1] 163 ld (0x0f, sp), a + 0000A3 7B 02 [ 1] 164 ld a, (0x02, sp) + 0000A5 1A 0A [ 1] 165 or a, (0x0a, sp) + 0000A7 6B 0E [ 1] 166 ld (0x0e, sp), a + 0000A9 7B 01 [ 1] 167 ld a, (0x01, sp) + 0000AB 1A 09 [ 1] 168 or a, (0x09, sp) + 0000AD 6B 0D [ 1] 169 ld (0x0d, sp), a + 0000AF 1E 07 [ 2] 170 ldw x, (0x07, sp) + 0000B1 16 0F [ 2] 171 ldw y, (0x0f, sp) + 0000B3 EF 02 [ 2] 172 ldw (0x2, x), y + 0000B5 16 0D [ 2] 173 ldw y, (0x0d, sp) + 0000B7 FF [ 2] 174 ldw (x), y + 175 ; ../_rrslonglong.c: 55: (*top) >>= s; + 0000B8 1E 05 [ 2] 176 ldw x, (0x05, sp) + 0000BA 90 93 [ 1] 177 ldw y, x + 0000BC 90 EE 02 [ 2] 178 ldw y, (0x2, y) + 0000BF FE [ 2] 179 ldw x, (x) + 0000C0 7B 1D [ 1] 180 ld a, (0x1d, sp) + 0000C2 27 06 [ 1] 181 jreq 00131$ + 0000C4 182 00130$: + 0000C4 57 [ 2] 183 sraw x + 0000C5 90 56 [ 2] 184 rrcw y + 0000C7 4A [ 1] 185 dec a + 0000C8 26 FA [ 1] 186 jrne 00130$ + 0000CA 187 00131$: + 0000CA 17 0F [ 2] 188 ldw (0x0f, sp), y + 0000CC 1F 0D [ 2] 189 ldw (0x0d, sp), x + 0000CE 1E 05 [ 2] 190 ldw x, (0x05, sp) + 0000D0 16 0F [ 2] 191 ldw y, (0x0f, sp) + 0000D2 EF 02 [ 2] 192 ldw (0x2, x), y + 0000D4 16 0D [ 2] 193 ldw y, (0x0d, sp) + 0000D6 FF [ 2] 194 ldw (x), y + 195 ; ../_rrslonglong.c: 57: return(l); + 0000D7 1E 13 [ 2] 196 ldw x, (0x13, sp) + 0000D9 16 1B [ 2] 197 ldw y, (0x1b, sp) + 0000DB EF 06 [ 2] 198 ldw (#6, x), y + 0000DD 16 19 [ 2] 199 ldw y, (0x19, sp) + 0000DF EF 04 [ 2] 200 ldw (#4, x), y + 0000E1 16 17 [ 2] 201 ldw y, (0x17, sp) + 0000E3 EF 02 [ 2] 202 ldw (#2, x), y + 0000E5 16 15 [ 2] 203 ldw y, (0x15, sp) + 0000E7 FF [ 2] 204 ldw (x), y + 205 ; ../_rrslonglong.c: 58: } + 0000E8 5B 10 [ 2] 206 addw sp, #16 + 0000EA 81 [ 4] 207 ret + 208 .area CODE + 209 .area CONST + 210 .area INITIALIZER + 211 .area CABS (ABS) diff --git a/device/lib/stm8/_rrslonglong.rel b/device/lib/stm8/_rrslonglong.rel new file mode 100644 index 0000000..67e7558 --- /dev/null +++ b/device/lib/stm8/_rrslonglong.rel @@ -0,0 +1,83 @@ +XH3 +H B areas 2 global symbols +M _rrslonglong +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size EB flags 0 addr 0 +S __rrslonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 10 90 96 72 A9 00 13 93 1F 05 93 5C +R 00 00 00 09 +T 00 00 0D 5C 1F 07 93 1C 00 04 1F 09 17 0B +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 7B 1D A1 10 25 3B 1E 0B 1C 00 06 16 0B +R 00 00 00 09 +T 00 00 25 72 A9 00 04 17 0D 90 FE FF 1E 0B 5C 5C +R 00 00 00 09 +T 00 00 32 1F 0F FE 16 0D 90 FF 1E 0B FE 16 0F 90 +R 00 00 00 09 +T 00 00 3F FF 16 0B 17 0F 1E 0B FE 2A 03 5F 5A 21 +R 00 00 00 09 +T 00 00 4C +R 00 00 00 09 +T 00 00 4C 5F +R 00 00 00 09 +T 00 00 4D +R 00 00 00 09 +T 00 00 4D 16 0F 90 FF 7B 1D A0 10 6B 1D 20 BF +R 00 00 00 09 +T 00 00 59 +R 00 00 00 09 +T 00 00 59 1E 09 90 93 90 EE 02 FE 7B 1D 27 06 +R 00 00 00 09 +T 00 00 65 +R 00 00 00 09 +T 00 00 65 54 90 56 4A 26 FA +R 00 00 00 09 +T 00 00 6B +R 00 00 00 09 +T 00 00 6B 17 0F 1F 0D 1E 09 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 78 1E 07 90 93 90 EE 02 17 03 FE 1F 01 5F +R 00 00 00 09 +T 00 00 85 16 01 7B 1D 27 06 +R 00 00 00 09 +T 00 00 8B +R 00 00 00 09 +T 00 00 8B 90 54 56 4A 26 FA +R 00 00 00 09 +T 00 00 91 +R 00 00 00 09 +T 00 00 91 1F 0B 0F 0A 0F 09 7B 04 1A 0C 6B 10 7B +R 00 00 00 09 +T 00 00 9E 03 1A 0B 6B 0F 7B 02 1A 0A 6B 0E 7B 01 +R 00 00 00 09 +T 00 00 AB 1A 09 6B 0D 1E 07 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 B8 1E 05 90 93 90 EE 02 FE 7B 1D 27 06 +R 00 00 00 09 +T 00 00 C4 +R 00 00 00 09 +T 00 00 C4 57 90 56 4A 26 FA +R 00 00 00 09 +T 00 00 CA +R 00 00 00 09 +T 00 00 CA 17 0F 1F 0D 1E 05 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 D7 1E 13 16 1B EF 06 16 19 EF 04 16 17 EF +R 00 00 00 09 +T 00 00 E4 02 16 15 FF 5B 10 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_rrslonglong.sym b/device/lib/stm8/_rrslonglong.sym new file mode 100644 index 0000000..a44e4ec --- /dev/null +++ b/device/lib/stm8/_rrslonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __rrslonglong 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size EB flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_rrulonglong.asm b/device/lib/stm8/_rrulonglong.asm new file mode 100644 index 0000000..b9de727 --- /dev/null +++ b/device/lib/stm8/_rrulonglong.asm @@ -0,0 +1,201 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _rrulonglong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __rrulonglong +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_rrulonglong.c: 38: unsigned long long _rrulonglong(unsigned long long l, char s) +; ----------------------------------------- +; function _rrulonglong +; ----------------------------------------- +__rrulonglong: + sub sp, #16 +; ../_rrulonglong.c: 40: uint32_t *const top = (uint32_t *)((char *)(&l) + 0); + ldw y, sp + addw y, #19 + ldw x, y + ldw (0x05, sp), x +; ../_rrulonglong.c: 41: uint32_t *const middle = (uint16_t *)((char *)(&l) + 2); + ldw x, y + incw x + incw x + ldw (0x07, sp), x +; ../_rrulonglong.c: 42: uint32_t *const bottom = (uint32_t *)((char *)(&l) + 4); + ldw x, y + addw x, #0x0004 + ldw (0x09, sp), x +; ../_rrulonglong.c: 43: uint16_t *const b = (uint16_t *)(&l); + ldw (0x0b, sp), y +; ../_rrulonglong.c: 53: (*bottom) >>= s; +00103$: +; ../_rrulonglong.c: 45: for(;s >= 16; s -= 16) + ld a, (0x1d, sp) + cp a, #0x10 + jrc 00101$ +; ../_rrulonglong.c: 47: b[3] = b[2]; + ldw x, (0x0b, sp) + addw x, #0x0006 + ldw y, (0x0b, sp) + addw y, #0x0004 + ldw (0x0d, sp), y + ldw y, (y) + ldw (x), y +; ../_rrulonglong.c: 48: b[2] = b[1]; + ldw x, (0x0b, sp) + incw x + incw x + ldw (0x0f, sp), x + ldw x, (x) + ldw y, (0x0d, sp) + ldw (y), x +; ../_rrulonglong.c: 49: b[1] = b[0]; + ldw x, (0x0b, sp) + ldw x, (x) + ldw y, (0x0f, sp) + ldw (y), x +; ../_rrulonglong.c: 50: b[0] = 0x000000; + ldw x, (0x0b, sp) + clr (0x1, x) + clr (x) +; ../_rrulonglong.c: 45: for(;s >= 16; s -= 16) + ld a, (0x1d, sp) + sub a, #0x10 + ld (0x1d, sp), a + jra 00103$ +00101$: +; ../_rrulonglong.c: 53: (*bottom) >>= s; + ldw x, (0x09, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ld a, (0x1d, sp) + jreq 00119$ +00118$: + srlw x + rrcw y + dec a + jrne 00118$ +00119$: + ldw (0x0f, sp), y + ldw (0x0d, sp), x + ldw x, (0x09, sp) + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +; ../_rrulonglong.c: 54: (*middle) |= (((*middle & 0xffff0000ul) >> s) & 0x0000fffful); + ldw x, (0x07, sp) + ldw y, x + ldw y, (0x2, y) + ldw (0x03, sp), y + ldw x, (x) + ldw (0x01, sp), x + clrw x + ldw y, (0x01, sp) + ld a, (0x1d, sp) + jreq 00121$ +00120$: + srlw y + rrcw x + dec a + jrne 00120$ +00121$: + ldw (0x0b, sp), x + clr (0x0a, sp) + clr (0x09, sp) + ld a, (0x04, sp) + or a, (0x0c, sp) + ld (0x10, sp), a + ld a, (0x03, sp) + or a, (0x0b, sp) + ld (0x0f, sp), a + ld a, (0x02, sp) + or a, (0x0a, sp) + ld (0x0e, sp), a + ld a, (0x01, sp) + or a, (0x09, sp) + ld (0x0d, sp), a + ldw x, (0x07, sp) + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +; ../_rrulonglong.c: 55: (*top) >>= s; + ldw x, (0x05, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ld a, (0x1d, sp) + jreq 00123$ +00122$: + srlw x + rrcw y + dec a + jrne 00122$ +00123$: + ldw (0x0f, sp), y + ldw (0x0d, sp), x + ldw x, (0x05, sp) + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +; ../_rrulonglong.c: 57: return(l); + ldw x, (0x13, sp) + ldw y, (0x1b, sp) + ldw (#6, x), y + ldw y, (0x19, sp) + ldw (#4, x), y + ldw y, (0x17, sp) + ldw (#2, x), y + ldw y, (0x15, sp) + ldw (x), y +; ../_rrulonglong.c: 58: } + addw sp, #16 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_rrulonglong.lst b/device/lib/stm8/_rrulonglong.lst new file mode 100644 index 0000000..8af8b1d --- /dev/null +++ b/device/lib/stm8/_rrulonglong.lst @@ -0,0 +1,201 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _rrulonglong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __rrulonglong + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_rrulonglong.c: 38: unsigned long long _rrulonglong(unsigned long long l, char s) + 50 ; ----------------------------------------- + 51 ; function _rrulonglong + 52 ; ----------------------------------------- + 000000 53 __rrulonglong: + 000000 52 10 [ 2] 54 sub sp, #16 + 55 ; ../_rrulonglong.c: 40: uint32_t *const top = (uint32_t *)((char *)(&l) + 0); + 000002 90 96 [ 1] 56 ldw y, sp + 000004 72 A9 00 13 [ 2] 57 addw y, #19 + 000008 93 [ 1] 58 ldw x, y + 000009 1F 05 [ 2] 59 ldw (0x05, sp), x + 60 ; ../_rrulonglong.c: 41: uint32_t *const middle = (uint16_t *)((char *)(&l) + 2); + 00000B 93 [ 1] 61 ldw x, y + 00000C 5C [ 1] 62 incw x + 00000D 5C [ 1] 63 incw x + 00000E 1F 07 [ 2] 64 ldw (0x07, sp), x + 65 ; ../_rrulonglong.c: 42: uint32_t *const bottom = (uint32_t *)((char *)(&l) + 4); + 000010 93 [ 1] 66 ldw x, y + 000011 1C 00 04 [ 2] 67 addw x, #0x0004 + 000014 1F 09 [ 2] 68 ldw (0x09, sp), x + 69 ; ../_rrulonglong.c: 43: uint16_t *const b = (uint16_t *)(&l); + 000016 17 0B [ 2] 70 ldw (0x0b, sp), y + 71 ; ../_rrulonglong.c: 53: (*bottom) >>= s; + 000018 72 00103$: + 73 ; ../_rrulonglong.c: 45: for(;s >= 16; s -= 16) + 000018 7B 1D [ 1] 74 ld a, (0x1d, sp) + 00001A A1 10 [ 1] 75 cp a, #0x10 + 00001C 25 2F [ 1] 76 jrc 00101$ + 77 ; ../_rrulonglong.c: 47: b[3] = b[2]; + 00001E 1E 0B [ 2] 78 ldw x, (0x0b, sp) + 000020 1C 00 06 [ 2] 79 addw x, #0x0006 + 000023 16 0B [ 2] 80 ldw y, (0x0b, sp) + 000025 72 A9 00 04 [ 2] 81 addw y, #0x0004 + 000029 17 0D [ 2] 82 ldw (0x0d, sp), y + 00002B 90 FE [ 2] 83 ldw y, (y) + 00002D FF [ 2] 84 ldw (x), y + 85 ; ../_rrulonglong.c: 48: b[2] = b[1]; + 00002E 1E 0B [ 2] 86 ldw x, (0x0b, sp) + 000030 5C [ 1] 87 incw x + 000031 5C [ 1] 88 incw x + 000032 1F 0F [ 2] 89 ldw (0x0f, sp), x + 000034 FE [ 2] 90 ldw x, (x) + 000035 16 0D [ 2] 91 ldw y, (0x0d, sp) + 000037 90 FF [ 2] 92 ldw (y), x + 93 ; ../_rrulonglong.c: 49: b[1] = b[0]; + 000039 1E 0B [ 2] 94 ldw x, (0x0b, sp) + 00003B FE [ 2] 95 ldw x, (x) + 00003C 16 0F [ 2] 96 ldw y, (0x0f, sp) + 00003E 90 FF [ 2] 97 ldw (y), x + 98 ; ../_rrulonglong.c: 50: b[0] = 0x000000; + 000040 1E 0B [ 2] 99 ldw x, (0x0b, sp) + 000042 6F 01 [ 1] 100 clr (0x1, x) + 000044 7F [ 1] 101 clr (x) + 102 ; ../_rrulonglong.c: 45: for(;s >= 16; s -= 16) + 000045 7B 1D [ 1] 103 ld a, (0x1d, sp) + 000047 A0 10 [ 1] 104 sub a, #0x10 + 000049 6B 1D [ 1] 105 ld (0x1d, sp), a + 00004B 20 CB [ 2] 106 jra 00103$ + 00004D 107 00101$: + 108 ; ../_rrulonglong.c: 53: (*bottom) >>= s; + 00004D 1E 09 [ 2] 109 ldw x, (0x09, sp) + 00004F 90 93 [ 1] 110 ldw y, x + 000051 90 EE 02 [ 2] 111 ldw y, (0x2, y) + 000054 FE [ 2] 112 ldw x, (x) + 000055 7B 1D [ 1] 113 ld a, (0x1d, sp) + 000057 27 06 [ 1] 114 jreq 00119$ + 000059 115 00118$: + 000059 54 [ 2] 116 srlw x + 00005A 90 56 [ 2] 117 rrcw y + 00005C 4A [ 1] 118 dec a + 00005D 26 FA [ 1] 119 jrne 00118$ + 00005F 120 00119$: + 00005F 17 0F [ 2] 121 ldw (0x0f, sp), y + 000061 1F 0D [ 2] 122 ldw (0x0d, sp), x + 000063 1E 09 [ 2] 123 ldw x, (0x09, sp) + 000065 16 0F [ 2] 124 ldw y, (0x0f, sp) + 000067 EF 02 [ 2] 125 ldw (0x2, x), y + 000069 16 0D [ 2] 126 ldw y, (0x0d, sp) + 00006B FF [ 2] 127 ldw (x), y + 128 ; ../_rrulonglong.c: 54: (*middle) |= (((*middle & 0xffff0000ul) >> s) & 0x0000fffful); + 00006C 1E 07 [ 2] 129 ldw x, (0x07, sp) + 00006E 90 93 [ 1] 130 ldw y, x + 000070 90 EE 02 [ 2] 131 ldw y, (0x2, y) + 000073 17 03 [ 2] 132 ldw (0x03, sp), y + 000075 FE [ 2] 133 ldw x, (x) + 000076 1F 01 [ 2] 134 ldw (0x01, sp), x + 000078 5F [ 1] 135 clrw x + 000079 16 01 [ 2] 136 ldw y, (0x01, sp) + 00007B 7B 1D [ 1] 137 ld a, (0x1d, sp) + 00007D 27 06 [ 1] 138 jreq 00121$ + 00007F 139 00120$: + 00007F 90 54 [ 2] 140 srlw y + 000081 56 [ 2] 141 rrcw x + 000082 4A [ 1] 142 dec a + 000083 26 FA [ 1] 143 jrne 00120$ + 000085 144 00121$: + 000085 1F 0B [ 2] 145 ldw (0x0b, sp), x + 000087 0F 0A [ 1] 146 clr (0x0a, sp) + 000089 0F 09 [ 1] 147 clr (0x09, sp) + 00008B 7B 04 [ 1] 148 ld a, (0x04, sp) + 00008D 1A 0C [ 1] 149 or a, (0x0c, sp) + 00008F 6B 10 [ 1] 150 ld (0x10, sp), a + 000091 7B 03 [ 1] 151 ld a, (0x03, sp) + 000093 1A 0B [ 1] 152 or a, (0x0b, sp) + 000095 6B 0F [ 1] 153 ld (0x0f, sp), a + 000097 7B 02 [ 1] 154 ld a, (0x02, sp) + 000099 1A 0A [ 1] 155 or a, (0x0a, sp) + 00009B 6B 0E [ 1] 156 ld (0x0e, sp), a + 00009D 7B 01 [ 1] 157 ld a, (0x01, sp) + 00009F 1A 09 [ 1] 158 or a, (0x09, sp) + 0000A1 6B 0D [ 1] 159 ld (0x0d, sp), a + 0000A3 1E 07 [ 2] 160 ldw x, (0x07, sp) + 0000A5 16 0F [ 2] 161 ldw y, (0x0f, sp) + 0000A7 EF 02 [ 2] 162 ldw (0x2, x), y + 0000A9 16 0D [ 2] 163 ldw y, (0x0d, sp) + 0000AB FF [ 2] 164 ldw (x), y + 165 ; ../_rrulonglong.c: 55: (*top) >>= s; + 0000AC 1E 05 [ 2] 166 ldw x, (0x05, sp) + 0000AE 90 93 [ 1] 167 ldw y, x + 0000B0 90 EE 02 [ 2] 168 ldw y, (0x2, y) + 0000B3 FE [ 2] 169 ldw x, (x) + 0000B4 7B 1D [ 1] 170 ld a, (0x1d, sp) + 0000B6 27 06 [ 1] 171 jreq 00123$ + 0000B8 172 00122$: + 0000B8 54 [ 2] 173 srlw x + 0000B9 90 56 [ 2] 174 rrcw y + 0000BB 4A [ 1] 175 dec a + 0000BC 26 FA [ 1] 176 jrne 00122$ + 0000BE 177 00123$: + 0000BE 17 0F [ 2] 178 ldw (0x0f, sp), y + 0000C0 1F 0D [ 2] 179 ldw (0x0d, sp), x + 0000C2 1E 05 [ 2] 180 ldw x, (0x05, sp) + 0000C4 16 0F [ 2] 181 ldw y, (0x0f, sp) + 0000C6 EF 02 [ 2] 182 ldw (0x2, x), y + 0000C8 16 0D [ 2] 183 ldw y, (0x0d, sp) + 0000CA FF [ 2] 184 ldw (x), y + 185 ; ../_rrulonglong.c: 57: return(l); + 0000CB 1E 13 [ 2] 186 ldw x, (0x13, sp) + 0000CD 16 1B [ 2] 187 ldw y, (0x1b, sp) + 0000CF EF 06 [ 2] 188 ldw (#6, x), y + 0000D1 16 19 [ 2] 189 ldw y, (0x19, sp) + 0000D3 EF 04 [ 2] 190 ldw (#4, x), y + 0000D5 16 17 [ 2] 191 ldw y, (0x17, sp) + 0000D7 EF 02 [ 2] 192 ldw (#2, x), y + 0000D9 16 15 [ 2] 193 ldw y, (0x15, sp) + 0000DB FF [ 2] 194 ldw (x), y + 195 ; ../_rrulonglong.c: 58: } + 0000DC 5B 10 [ 2] 196 addw sp, #16 + 0000DE 81 [ 4] 197 ret + 198 .area CODE + 199 .area CONST + 200 .area INITIALIZER + 201 .area CABS (ABS) diff --git a/device/lib/stm8/_rrulonglong.rel b/device/lib/stm8/_rrulonglong.rel new file mode 100644 index 0000000..6f47966 --- /dev/null +++ b/device/lib/stm8/_rrulonglong.rel @@ -0,0 +1,77 @@ +XH3 +H B areas 2 global symbols +M _rrulonglong +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size DF flags 0 addr 0 +S __rrulonglong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 10 90 96 72 A9 00 13 93 1F 05 93 5C +R 00 00 00 09 +T 00 00 0D 5C 1F 07 93 1C 00 04 1F 09 17 0B +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 7B 1D A1 10 25 2F 1E 0B 1C 00 06 16 0B +R 00 00 00 09 +T 00 00 25 72 A9 00 04 17 0D 90 FE FF 1E 0B 5C 5C +R 00 00 00 09 +T 00 00 32 1F 0F FE 16 0D 90 FF 1E 0B FE 16 0F 90 +R 00 00 00 09 +T 00 00 3F FF 1E 0B 6F 01 7F 7B 1D A0 10 6B 1D 20 +R 00 00 00 09 +T 00 00 4C CB +R 00 00 00 09 +T 00 00 4D +R 00 00 00 09 +T 00 00 4D 1E 09 90 93 90 EE 02 FE 7B 1D 27 06 +R 00 00 00 09 +T 00 00 59 +R 00 00 00 09 +T 00 00 59 54 90 56 4A 26 FA +R 00 00 00 09 +T 00 00 5F +R 00 00 00 09 +T 00 00 5F 17 0F 1F 0D 1E 09 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 6C 1E 07 90 93 90 EE 02 17 03 FE 1F 01 5F +R 00 00 00 09 +T 00 00 79 16 01 7B 1D 27 06 +R 00 00 00 09 +T 00 00 7F +R 00 00 00 09 +T 00 00 7F 90 54 56 4A 26 FA +R 00 00 00 09 +T 00 00 85 +R 00 00 00 09 +T 00 00 85 1F 0B 0F 0A 0F 09 7B 04 1A 0C 6B 10 7B +R 00 00 00 09 +T 00 00 92 03 1A 0B 6B 0F 7B 02 1A 0A 6B 0E 7B 01 +R 00 00 00 09 +T 00 00 9F 1A 09 6B 0D 1E 07 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 AC 1E 05 90 93 90 EE 02 FE 7B 1D 27 06 +R 00 00 00 09 +T 00 00 B8 +R 00 00 00 09 +T 00 00 B8 54 90 56 4A 26 FA +R 00 00 00 09 +T 00 00 BE +R 00 00 00 09 +T 00 00 BE 17 0F 1F 0D 1E 05 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 CB 1E 13 16 1B EF 06 16 19 EF 04 16 17 EF +R 00 00 00 09 +T 00 00 D8 02 16 15 FF 5B 10 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_rrulonglong.sym b/device/lib/stm8/_rrulonglong.sym new file mode 100644 index 0000000..6f321f3 --- /dev/null +++ b/device/lib/stm8/_rrulonglong.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __rrulonglong 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size DF flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_schar2fs.asm b/device/lib/stm8/_schar2fs.asm new file mode 100644 index 0000000..b07b0e5 --- /dev/null +++ b/device/lib/stm8/_schar2fs.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _schar2fs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___slong2fs + .globl ___schar2fs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_schar2fs.c: 55: float __schar2fs (signed char sc) { +; ----------------------------------------- +; function __schar2fs +; ----------------------------------------- +___schar2fs: +; ../_schar2fs.c: 56: return __slong2fs(sc); + ld a, (0x03, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld yl, a + ld yh, a + pushw x + pushw y + call ___slong2fs + addw sp, #4 +; ../_schar2fs.c: 57: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_schar2fs.lst b/device/lib/stm8/_schar2fs.lst new file mode 100644 index 0000000..1ddf107 --- /dev/null +++ b/device/lib/stm8/_schar2fs.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _schar2fs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___slong2fs + 12 .globl ___schar2fs + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_schar2fs.c: 55: float __schar2fs (signed char sc) { + 51 ; ----------------------------------------- + 52 ; function __schar2fs + 53 ; ----------------------------------------- + 000000 54 ___schar2fs: + 55 ; ../_schar2fs.c: 56: return __slong2fs(sc); + 000000 7B 03 [ 1] 56 ld a, (0x03, sp) + 000002 97 [ 1] 57 ld xl, a + 000003 49 [ 1] 58 rlc a + 000004 4F [ 1] 59 clr a + 000005 A2 00 [ 1] 60 sbc a, #0x00 + 000007 95 [ 1] 61 ld xh, a + 000008 90 97 [ 1] 62 ld yl, a + 00000A 90 95 [ 1] 63 ld yh, a + 00000C 89 [ 2] 64 pushw x + 00000D 90 89 [ 2] 65 pushw y + 00000F CDr00r00 [ 4] 66 call ___slong2fs + 000012 5B 04 [ 2] 67 addw sp, #4 + 68 ; ../_schar2fs.c: 57: } + 000014 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/_schar2fs.rel b/device/lib/stm8/_schar2fs.rel new file mode 100644 index 0000000..e81478a --- /dev/null +++ b/device/lib/stm8/_schar2fs.rel @@ -0,0 +1,24 @@ +XH3 +H B areas 3 global symbols +M _schar2fs +O -mstm8 +S ___slong2fs Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 15 flags 0 addr 0 +S ___schar2fs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 03 97 49 4F A2 00 95 90 97 90 95 89 +R 00 00 00 09 +T 00 00 0D 90 89 CD 00 00 5B 04 81 +R 00 00 00 09 02 06 00 00 diff --git a/device/lib/stm8/_schar2fs.sym b/device/lib/stm8/_schar2fs.sym new file mode 100644 index 0000000..9ac8656 --- /dev/null +++ b/device/lib/stm8/_schar2fs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___schar2fs 000000 GR + ___slong2fs ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 15 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_sint2fs.asm b/device/lib/stm8/_sint2fs.asm new file mode 100644 index 0000000..093e193 --- /dev/null +++ b/device/lib/stm8/_sint2fs.asm @@ -0,0 +1,71 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _sint2fs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___slong2fs + .globl ___sint2fs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_sint2fs.c: 54: float __sint2fs (signed int si) { +; ----------------------------------------- +; function __sint2fs +; ----------------------------------------- +___sint2fs: +; ../_sint2fs.c: 55: return __slong2fs(si); + ldw y, (0x03, sp) + clrw x + tnzw y + jrpl 00103$ + decw x +00103$: + pushw y + pushw x + call ___slong2fs + addw sp, #4 +; ../_sint2fs.c: 56: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_sint2fs.lst b/device/lib/stm8/_sint2fs.lst new file mode 100644 index 0000000..80d014d --- /dev/null +++ b/device/lib/stm8/_sint2fs.lst @@ -0,0 +1,71 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _sint2fs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___slong2fs + 12 .globl ___sint2fs + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_sint2fs.c: 54: float __sint2fs (signed int si) { + 51 ; ----------------------------------------- + 52 ; function __sint2fs + 53 ; ----------------------------------------- + 000000 54 ___sint2fs: + 55 ; ../_sint2fs.c: 55: return __slong2fs(si); + 000000 16 03 [ 2] 56 ldw y, (0x03, sp) + 000002 5F [ 1] 57 clrw x + 000003 90 5D [ 2] 58 tnzw y + 000005 2A 01 [ 1] 59 jrpl 00103$ + 000007 5A [ 2] 60 decw x + 000008 61 00103$: + 000008 90 89 [ 2] 62 pushw y + 00000A 89 [ 2] 63 pushw x + 00000B CDr00r00 [ 4] 64 call ___slong2fs + 00000E 5B 04 [ 2] 65 addw sp, #4 + 66 ; ../_sint2fs.c: 56: } + 000010 81 [ 4] 67 ret + 68 .area CODE + 69 .area CONST + 70 .area INITIALIZER + 71 .area CABS (ABS) diff --git a/device/lib/stm8/_sint2fs.rel b/device/lib/stm8/_sint2fs.rel new file mode 100644 index 0000000..57ed53c --- /dev/null +++ b/device/lib/stm8/_sint2fs.rel @@ -0,0 +1,26 @@ +XH3 +H B areas 3 global symbols +M _sint2fs +O -mstm8 +S ___slong2fs Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 11 flags 0 addr 0 +S ___sint2fs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 16 03 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 08 +R 00 00 00 09 +T 00 00 08 90 89 89 CD 00 00 5B 04 81 +R 00 00 00 09 02 07 00 00 diff --git a/device/lib/stm8/_sint2fs.sym b/device/lib/stm8/_sint2fs.sym new file mode 100644 index 0000000..631a114 --- /dev/null +++ b/device/lib/stm8/_sint2fs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___sint2fs 000000 GR + ___slong2fs ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 11 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_slong2fs.asm b/device/lib/stm8/_slong2fs.asm new file mode 100644 index 0000000..4a81740 --- /dev/null +++ b/device/lib/stm8/_slong2fs.asm @@ -0,0 +1,87 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _slong2fs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___ulong2fs + .globl ___slong2fs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_slong2fs.c: 79: float __slong2fs (signed long sl) { +; ----------------------------------------- +; function __slong2fs +; ----------------------------------------- +___slong2fs: +; ../_slong2fs.c: 80: if (sl<0) + tnz (0x03, sp) + jrpl 00102$ +; ../_slong2fs.c: 81: return -__ulong2fs(-sl); + ldw y, (0x05, sp) + negw y + ldw x, (0x03, sp) + jrnc 00112$ + incw x +00112$: + negw x + pushw y + pushw x + call ___ulong2fs + addw sp, #4 + sllw y + ccf + rrcw y + ret +00102$: +; ../_slong2fs.c: 83: return __ulong2fs(sl); + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + call ___ulong2fs + addw sp, #4 +; ../_slong2fs.c: 84: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_slong2fs.lst b/device/lib/stm8/_slong2fs.lst new file mode 100644 index 0000000..738d788 --- /dev/null +++ b/device/lib/stm8/_slong2fs.lst @@ -0,0 +1,87 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _slong2fs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___ulong2fs + 12 .globl ___slong2fs + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_slong2fs.c: 79: float __slong2fs (signed long sl) { + 51 ; ----------------------------------------- + 52 ; function __slong2fs + 53 ; ----------------------------------------- + 000000 54 ___slong2fs: + 55 ; ../_slong2fs.c: 80: if (sl<0) + 000000 0D 03 [ 1] 56 tnz (0x03, sp) + 000002 2A 18 [ 1] 57 jrpl 00102$ + 58 ; ../_slong2fs.c: 81: return -__ulong2fs(-sl); + 000004 16 05 [ 2] 59 ldw y, (0x05, sp) + 000006 90 50 [ 2] 60 negw y + 000008 1E 03 [ 2] 61 ldw x, (0x03, sp) + 00000A 24 01 [ 1] 62 jrnc 00112$ + 00000C 5C [ 1] 63 incw x + 00000D 64 00112$: + 00000D 50 [ 2] 65 negw x + 00000E 90 89 [ 2] 66 pushw y + 000010 89 [ 2] 67 pushw x + 000011 CDr00r00 [ 4] 68 call ___ulong2fs + 000014 5B 04 [ 2] 69 addw sp, #4 + 000016 90 58 [ 2] 70 sllw y + 000018 8C [ 1] 71 ccf + 000019 90 56 [ 2] 72 rrcw y + 00001B 81 [ 4] 73 ret + 00001C 74 00102$: + 75 ; ../_slong2fs.c: 83: return __ulong2fs(sl); + 00001C 1E 05 [ 2] 76 ldw x, (0x05, sp) + 00001E 89 [ 2] 77 pushw x + 00001F 1E 05 [ 2] 78 ldw x, (0x05, sp) + 000021 89 [ 2] 79 pushw x + 000022 CDr00r00 [ 4] 80 call ___ulong2fs + 000025 5B 04 [ 2] 81 addw sp, #4 + 82 ; ../_slong2fs.c: 84: } + 000027 81 [ 4] 83 ret + 84 .area CODE + 85 .area CONST + 86 .area INITIALIZER + 87 .area CABS (ABS) diff --git a/device/lib/stm8/_slong2fs.rel b/device/lib/stm8/_slong2fs.rel new file mode 100644 index 0000000..fe4c604 --- /dev/null +++ b/device/lib/stm8/_slong2fs.rel @@ -0,0 +1,32 @@ +XH3 +H B areas 3 global symbols +M _slong2fs +O -mstm8 +S ___ulong2fs Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 28 flags 0 addr 0 +S ___slong2fs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 0D 03 2A 18 16 05 90 50 1E 03 24 01 5C +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 50 90 89 89 CD 00 00 5B 04 90 58 8C 90 +R 00 00 00 09 02 08 00 00 +T 00 00 1A 56 81 +R 00 00 00 09 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 1E 05 89 1E 05 89 CD 00 00 5B 04 81 +R 00 00 00 09 02 0A 00 00 diff --git a/device/lib/stm8/_slong2fs.sym b/device/lib/stm8/_slong2fs.sym new file mode 100644 index 0000000..98aeb62 --- /dev/null +++ b/device/lib/stm8/_slong2fs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___slong2fs 000000 GR + ___ulong2fs ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 28 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_startup.asm b/device/lib/stm8/_startup.asm new file mode 100644 index 0000000..e0437b5 --- /dev/null +++ b/device/lib/stm8/_startup.asm @@ -0,0 +1,61 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _startup + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __sdcc_external_startup +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_startup.c: 52: unsigned char _sdcc_external_startup () +; ----------------------------------------- +; function _sdcc_external_startup +; ----------------------------------------- +__sdcc_external_startup: +; ../_startup.c: 54: return 0; + clr a +; ../_startup.c: 55: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_startup.lst b/device/lib/stm8/_startup.lst new file mode 100644 index 0000000..e609c51 --- /dev/null +++ b/device/lib/stm8/_startup.lst @@ -0,0 +1,61 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _startup + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __sdcc_external_startup + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_startup.c: 52: unsigned char _sdcc_external_startup () + 50 ; ----------------------------------------- + 51 ; function _sdcc_external_startup + 52 ; ----------------------------------------- + 000000 53 __sdcc_external_startup: + 54 ; ../_startup.c: 54: return 0; + 000000 4F [ 1] 55 clr a + 56 ; ../_startup.c: 55: } + 000001 81 [ 4] 57 ret + 58 .area CODE + 59 .area CONST + 60 .area INITIALIZER + 61 .area CABS (ABS) diff --git a/device/lib/stm8/_startup.rel b/device/lib/stm8/_startup.rel new file mode 100644 index 0000000..feb6c5e --- /dev/null +++ b/device/lib/stm8/_startup.rel @@ -0,0 +1,21 @@ +XH3 +H B areas 2 global symbols +M _startup +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 2 flags 0 addr 0 +S __sdcc_external_startup Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 4F 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_startup.sym b/device/lib/stm8/_startup.sym new file mode 100644 index 0000000..fd727c6 --- /dev/null +++ b/device/lib/stm8/_startup.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 __sdcc_external_startup 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 2 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strcat.asm b/device/lib/stm8/_strcat.asm new file mode 100644 index 0000000..3a3434a --- /dev/null +++ b/device/lib/stm8/_strcat.asm @@ -0,0 +1,80 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strcat + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strcat +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strcat.c: 31: char * strcat ( char * dst, const char * src ) +; ----------------------------------------- +; function strcat +; ----------------------------------------- +_strcat: +; ../_strcat.c: 33: char * cp = dst; + ldw x, (0x03, sp) +; ../_strcat.c: 35: while( *cp ) +00101$: + ld a, (x) + jreq 00111$ +; ../_strcat.c: 36: cp++; /* find end of dst */ + incw x + jra 00101$ +; ../_strcat.c: 38: while( *cp++ = *src++ ) ; /* Copy src to end of dst */ +00111$: + ldw y, (0x05, sp) +00104$: + ld a, (y) + incw y + ld (x), a + incw x + tnz a + jrne 00104$ +; ../_strcat.c: 40: return( dst ); /* return dst */ + ldw x, (0x03, sp) +; ../_strcat.c: 41: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strcat.lst b/device/lib/stm8/_strcat.lst new file mode 100644 index 0000000..75b462d --- /dev/null +++ b/device/lib/stm8/_strcat.lst @@ -0,0 +1,80 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strcat + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strcat + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_strcat.c: 31: char * strcat ( char * dst, const char * src ) + 50 ; ----------------------------------------- + 51 ; function strcat + 52 ; ----------------------------------------- + 000000 53 _strcat: + 54 ; ../_strcat.c: 33: char * cp = dst; + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 56 ; ../_strcat.c: 35: while( *cp ) + 000002 57 00101$: + 000002 F6 [ 1] 58 ld a, (x) + 000003 27 03 [ 1] 59 jreq 00111$ + 60 ; ../_strcat.c: 36: cp++; /* find end of dst */ + 000005 5C [ 1] 61 incw x + 000006 20 FA [ 2] 62 jra 00101$ + 63 ; ../_strcat.c: 38: while( *cp++ = *src++ ) ; /* Copy src to end of dst */ + 000008 64 00111$: + 000008 16 05 [ 2] 65 ldw y, (0x05, sp) + 00000A 66 00104$: + 00000A 90 F6 [ 1] 67 ld a, (y) + 00000C 90 5C [ 1] 68 incw y + 00000E F7 [ 1] 69 ld (x), a + 00000F 5C [ 1] 70 incw x + 000010 4D [ 1] 71 tnz a + 000011 26 F7 [ 1] 72 jrne 00104$ + 73 ; ../_strcat.c: 40: return( dst ); /* return dst */ + 000013 1E 03 [ 2] 74 ldw x, (0x03, sp) + 75 ; ../_strcat.c: 41: } + 000015 81 [ 4] 76 ret + 77 .area CODE + 78 .area CONST + 79 .area INITIALIZER + 80 .area CABS (ABS) diff --git a/device/lib/stm8/_strcat.rel b/device/lib/stm8/_strcat.rel new file mode 100644 index 0000000..52d593a --- /dev/null +++ b/device/lib/stm8/_strcat.rel @@ -0,0 +1,33 @@ +XH3 +H B areas 2 global symbols +M _strcat +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 16 flags 0 addr 0 +S _strcat Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 +R 00 00 00 09 +T 00 00 02 +R 00 00 00 09 +T 00 00 02 F6 27 03 5C 20 FA +R 00 00 00 09 +T 00 00 08 +R 00 00 00 09 +T 00 00 08 16 05 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 90 F6 90 5C F7 5C 4D 26 F7 1E 03 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strcat.sym b/device/lib/stm8/_strcat.sym new file mode 100644 index 0000000..f51b52f --- /dev/null +++ b/device/lib/stm8/_strcat.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _strcat 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 16 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strchr.asm b/device/lib/stm8/_strchr.asm new file mode 100644 index 0000000..9f0fd60 --- /dev/null +++ b/device/lib/stm8/_strchr.asm @@ -0,0 +1,93 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strchr + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strchr +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strchr.c: 36: char * strchr ( const char * string, int ch ) +; ----------------------------------------- +; function strchr +; ----------------------------------------- +_strchr: + push a +; ../_strchr.c: 39: while (*string && *string != ch) + ldw x, (0x04, sp) +00102$: + ld a, (x) + ld (0x01, sp), a + clrw y + ld a, (0x01, sp) + ld yl, a + exgw x, y + cpw x, (0x06, sp) + exgw x, y + jrne 00131$ + ld a, #0x01 + .byte 0x21 +00131$: + clr a +00132$: + tnz (0x01, sp) + jreq 00104$ + tnz a + jrne 00104$ +; ../_strchr.c: 40: string++; + incw x + jra 00102$ +00104$: +; ../_strchr.c: 42: if (*string == ch) + tnz a +; ../_strchr.c: 43: return((char *)string); + jrne 00107$ +; ../_strchr.c: 44: return ( NULL ); + clrw x +00107$: +; ../_strchr.c: 45: } + pop a + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strchr.lst b/device/lib/stm8/_strchr.lst new file mode 100644 index 0000000..16933e9 --- /dev/null +++ b/device/lib/stm8/_strchr.lst @@ -0,0 +1,93 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strchr + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strchr + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_strchr.c: 36: char * strchr ( const char * string, int ch ) + 50 ; ----------------------------------------- + 51 ; function strchr + 52 ; ----------------------------------------- + 000000 53 _strchr: + 000000 88 [ 1] 54 push a + 55 ; ../_strchr.c: 39: while (*string && *string != ch) + 000001 1E 04 [ 2] 56 ldw x, (0x04, sp) + 000003 57 00102$: + 000003 F6 [ 1] 58 ld a, (x) + 000004 6B 01 [ 1] 59 ld (0x01, sp), a + 000006 90 5F [ 1] 60 clrw y + 000008 7B 01 [ 1] 61 ld a, (0x01, sp) + 00000A 90 97 [ 1] 62 ld yl, a + 00000C 51 [ 1] 63 exgw x, y + 00000D 13 06 [ 2] 64 cpw x, (0x06, sp) + 00000F 51 [ 1] 65 exgw x, y + 000010 26 03 [ 1] 66 jrne 00131$ + 000012 A6 01 [ 1] 67 ld a, #0x01 + 000014 21 68 .byte 0x21 + 000015 69 00131$: + 000015 4F [ 1] 70 clr a + 000016 71 00132$: + 000016 0D 01 [ 1] 72 tnz (0x01, sp) + 000018 27 06 [ 1] 73 jreq 00104$ + 00001A 4D [ 1] 74 tnz a + 00001B 26 03 [ 1] 75 jrne 00104$ + 76 ; ../_strchr.c: 40: string++; + 00001D 5C [ 1] 77 incw x + 00001E 20 E3 [ 2] 78 jra 00102$ + 000020 79 00104$: + 80 ; ../_strchr.c: 42: if (*string == ch) + 000020 4D [ 1] 81 tnz a + 82 ; ../_strchr.c: 43: return((char *)string); + 000021 26 01 [ 1] 83 jrne 00107$ + 84 ; ../_strchr.c: 44: return ( NULL ); + 000023 5F [ 1] 85 clrw x + 000024 86 00107$: + 87 ; ../_strchr.c: 45: } + 000024 84 [ 1] 88 pop a + 000025 81 [ 4] 89 ret + 90 .area CODE + 91 .area CONST + 92 .area INITIALIZER + 93 .area CABS (ABS) diff --git a/device/lib/stm8/_strchr.rel b/device/lib/stm8/_strchr.rel new file mode 100644 index 0000000..21277f9 --- /dev/null +++ b/device/lib/stm8/_strchr.rel @@ -0,0 +1,43 @@ +XH3 +H B areas 2 global symbols +M _strchr +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 26 flags 0 addr 0 +S _strchr Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 88 1E 04 +R 00 00 00 09 +T 00 00 03 +R 00 00 00 09 +T 00 00 03 F6 6B 01 90 5F 7B 01 90 97 51 13 06 51 +R 00 00 00 09 +T 00 00 10 26 03 A6 01 21 +R 00 00 00 09 +T 00 00 15 +R 00 00 00 09 +T 00 00 15 4F +R 00 00 00 09 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 0D 01 27 06 4D 26 03 5C 20 E3 +R 00 00 00 09 +T 00 00 20 +R 00 00 00 09 +T 00 00 20 4D 26 01 5F +R 00 00 00 09 +T 00 00 24 +R 00 00 00 09 +T 00 00 24 84 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strchr.sym b/device/lib/stm8/_strchr.sym new file mode 100644 index 0000000..7cf507b --- /dev/null +++ b/device/lib/stm8/_strchr.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _strchr 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 26 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strcspn.asm b/device/lib/stm8/_strcspn.asm new file mode 100644 index 0000000..bbaaf0e --- /dev/null +++ b/device/lib/stm8/_strcspn.asm @@ -0,0 +1,93 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strcspn + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strchr + .globl _strcspn +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strcspn.c: 31: size_t strcspn ( const char * string, const char * control ) +; ----------------------------------------- +; function strcspn +; ----------------------------------------- +_strcspn: + sub sp, #2 +; ../_strcspn.c: 36: while (ch = *string) { + clrw x + ldw (0x01, sp), x + ldw y, (0x05, sp) +00104$: + ld a, (y) + ld xl, a + tnz a + jreq 00106$ +; ../_strcspn.c: 37: if (strchr(control,ch)) + clr a + ld xh, a + pushw y + pushw x + ldw x, (0x0b, sp) + pushw x + call _strchr + addw sp, #4 + popw y + tnzw x + jrne 00106$ +; ../_strcspn.c: 40: count++; + ldw x, (0x01, sp) + incw x + ldw (0x01, sp), x +; ../_strcspn.c: 41: string++; + incw y + jra 00104$ +00106$: +; ../_strcspn.c: 44: return count; + ldw x, (0x01, sp) +; ../_strcspn.c: 45: } + addw sp, #2 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strcspn.lst b/device/lib/stm8/_strcspn.lst new file mode 100644 index 0000000..38aa7cf --- /dev/null +++ b/device/lib/stm8/_strcspn.lst @@ -0,0 +1,93 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strcspn + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strchr + 12 .globl _strcspn + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_strcspn.c: 31: size_t strcspn ( const char * string, const char * control ) + 51 ; ----------------------------------------- + 52 ; function strcspn + 53 ; ----------------------------------------- + 000000 54 _strcspn: + 000000 52 02 [ 2] 55 sub sp, #2 + 56 ; ../_strcspn.c: 36: while (ch = *string) { + 000002 5F [ 1] 57 clrw x + 000003 1F 01 [ 2] 58 ldw (0x01, sp), x + 000005 16 05 [ 2] 59 ldw y, (0x05, sp) + 000007 60 00104$: + 000007 90 F6 [ 1] 61 ld a, (y) + 000009 97 [ 1] 62 ld xl, a + 00000A 4D [ 1] 63 tnz a + 00000B 27 1B [ 1] 64 jreq 00106$ + 65 ; ../_strcspn.c: 37: if (strchr(control,ch)) + 00000D 4F [ 1] 66 clr a + 00000E 95 [ 1] 67 ld xh, a + 00000F 90 89 [ 2] 68 pushw y + 000011 89 [ 2] 69 pushw x + 000012 1E 0B [ 2] 70 ldw x, (0x0b, sp) + 000014 89 [ 2] 71 pushw x + 000015 CDr00r00 [ 4] 72 call _strchr + 000018 5B 04 [ 2] 73 addw sp, #4 + 00001A 90 85 [ 2] 74 popw y + 00001C 5D [ 2] 75 tnzw x + 00001D 26 09 [ 1] 76 jrne 00106$ + 77 ; ../_strcspn.c: 40: count++; + 00001F 1E 01 [ 2] 78 ldw x, (0x01, sp) + 000021 5C [ 1] 79 incw x + 000022 1F 01 [ 2] 80 ldw (0x01, sp), x + 81 ; ../_strcspn.c: 41: string++; + 000024 90 5C [ 1] 82 incw y + 000026 20 DF [ 2] 83 jra 00104$ + 000028 84 00106$: + 85 ; ../_strcspn.c: 44: return count; + 000028 1E 01 [ 2] 86 ldw x, (0x01, sp) + 87 ; ../_strcspn.c: 45: } + 00002A 5B 02 [ 2] 88 addw sp, #2 + 00002C 81 [ 4] 89 ret + 90 .area CODE + 91 .area CONST + 92 .area INITIALIZER + 93 .area CABS (ABS) diff --git a/device/lib/stm8/_strcspn.rel b/device/lib/stm8/_strcspn.rel new file mode 100644 index 0000000..1d19898 --- /dev/null +++ b/device/lib/stm8/_strcspn.rel @@ -0,0 +1,34 @@ +XH3 +H B areas 3 global symbols +M _strcspn +O -mstm8 +S .__.ABS. Def000000 +S _strchr Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 2D flags 0 addr 0 +S _strcspn Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 02 5F 1F 01 16 05 +R 00 00 00 09 +T 00 00 07 +R 00 00 00 09 +T 00 00 07 90 F6 97 4D 27 1B 4F 95 90 89 89 1E 0B +R 00 00 00 09 +T 00 00 14 89 CD 00 00 5B 04 90 85 5D 26 09 1E 01 +R 00 00 00 09 02 05 00 01 +T 00 00 21 5C 1F 01 90 5C 20 DF +R 00 00 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 1E 01 5B 02 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strcspn.sym b/device/lib/stm8/_strcspn.sym new file mode 100644 index 0000000..57b1a0f --- /dev/null +++ b/device/lib/stm8/_strcspn.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _strchr ****** GX + 9 _strcspn 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 2D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strlen.asm b/device/lib/stm8/_strlen.asm new file mode 100644 index 0000000..4bca328 --- /dev/null +++ b/device/lib/stm8/_strlen.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strlen + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strlen +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strlen.c: 35: size_t strlen ( const char * str ) +; ----------------------------------------- +; function strlen +; ----------------------------------------- +_strlen: +; ../_strlen.c: 39: while (*str++) + clrw x + ldw y, (0x03, sp) +00101$: + ld a, (y) + incw y + tnz a + jrne 00117$ + ret +00117$: +; ../_strlen.c: 40: i++ ; + incw x + jra 00101$ +; ../_strlen.c: 42: return i; +; ../_strlen.c: 43: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strlen.lst b/device/lib/stm8/_strlen.lst new file mode 100644 index 0000000..c3ab123 --- /dev/null +++ b/device/lib/stm8/_strlen.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strlen + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strlen + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_strlen.c: 35: size_t strlen ( const char * str ) + 50 ; ----------------------------------------- + 51 ; function strlen + 52 ; ----------------------------------------- + 000000 53 _strlen: + 54 ; ../_strlen.c: 39: while (*str++) + 000000 5F [ 1] 55 clrw x + 000001 16 03 [ 2] 56 ldw y, (0x03, sp) + 000003 57 00101$: + 000003 90 F6 [ 1] 58 ld a, (y) + 000005 90 5C [ 1] 59 incw y + 000007 4D [ 1] 60 tnz a + 000008 26 01 [ 1] 61 jrne 00117$ + 00000A 81 [ 4] 62 ret + 00000B 63 00117$: + 64 ; ../_strlen.c: 40: i++ ; + 00000B 5C [ 1] 65 incw x + 00000C 20 F5 [ 2] 66 jra 00101$ + 67 ; ../_strlen.c: 42: return i; + 68 ; ../_strlen.c: 43: } + 00000E 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/_strlen.rel b/device/lib/stm8/_strlen.rel new file mode 100644 index 0000000..1ec12f4 --- /dev/null +++ b/device/lib/stm8/_strlen.rel @@ -0,0 +1,29 @@ +XH3 +H B areas 2 global symbols +M _strlen +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size F flags 0 addr 0 +S _strlen Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 5F 16 03 +R 00 00 00 09 +T 00 00 03 +R 00 00 00 09 +T 00 00 03 90 F6 90 5C 4D 26 01 81 +R 00 00 00 09 +T 00 00 0B +R 00 00 00 09 +T 00 00 0B 5C 20 F5 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strlen.sym b/device/lib/stm8/_strlen.sym new file mode 100644 index 0000000..e4364c0 --- /dev/null +++ b/device/lib/stm8/_strlen.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _strlen 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strncat.asm b/device/lib/stm8/_strncat.asm new file mode 100644 index 0000000..c539a75 --- /dev/null +++ b/device/lib/stm8/_strncat.asm @@ -0,0 +1,115 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strncat + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strncat +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strncat.c: 31: char * strncat ( char * front, const char * back, size_t count ) +; ----------------------------------------- +; function strncat +; ----------------------------------------- +_strncat: + sub sp, #10 +; ../_strncat.c: 33: char *start = front; + ldw y, (0x0d, sp) +; ../_strncat.c: 35: while (*front++); + ldw (0x01, sp), y + ldw x, y +00101$: + ld a, (x) + incw x + tnz a + jrne 00101$ +; ../_strncat.c: 37: front--; + decw x + ldw (0x0d, sp), x +; ../_strncat.c: 39: while (count--) + ldw y, (0x0f, sp) + ldw (0x05, sp), y + ldw y, (0x0d, sp) + ldw (0x07, sp), y + ldw y, (0x11, sp) + ldw (0x09, sp), y +00106$: + ldw y, (0x09, sp) + ldw (0x03, sp), y + ldw x, (0x09, sp) + decw x + ldw (0x09, sp), x + ldw x, (0x03, sp) + jreq 00108$ +; ../_strncat.c: 40: if (!(*front++ = *back++)) + ldw x, (0x05, sp) + ld a, (x) + ldw x, (0x05, sp) + incw x + ldw (0x05, sp), x + ldw x, (0x07, sp) + ld (x), a + ldw x, (0x07, sp) + incw x + ldw (0x07, sp), x + ldw (0x0d, sp), x + tnz a + jrne 00106$ +; ../_strncat.c: 41: return(start); + ldw x, (0x01, sp) + jra 00109$ +00108$: +; ../_strncat.c: 43: *front = '\0'; + ldw y, (0x0d, sp) + ldw (0x09, sp), y + ldw x, y + clr (x) +; ../_strncat.c: 44: return(start); + ldw x, (0x01, sp) +00109$: +; ../_strncat.c: 45: } + addw sp, #10 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strncat.lst b/device/lib/stm8/_strncat.lst new file mode 100644 index 0000000..3129190 --- /dev/null +++ b/device/lib/stm8/_strncat.lst @@ -0,0 +1,115 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strncat + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strncat + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_strncat.c: 31: char * strncat ( char * front, const char * back, size_t count ) + 50 ; ----------------------------------------- + 51 ; function strncat + 52 ; ----------------------------------------- + 000000 53 _strncat: + 000000 52 0A [ 2] 54 sub sp, #10 + 55 ; ../_strncat.c: 33: char *start = front; + 000002 16 0D [ 2] 56 ldw y, (0x0d, sp) + 57 ; ../_strncat.c: 35: while (*front++); + 000004 17 01 [ 2] 58 ldw (0x01, sp), y + 000006 93 [ 1] 59 ldw x, y + 000007 60 00101$: + 000007 F6 [ 1] 61 ld a, (x) + 000008 5C [ 1] 62 incw x + 000009 4D [ 1] 63 tnz a + 00000A 26 FB [ 1] 64 jrne 00101$ + 65 ; ../_strncat.c: 37: front--; + 00000C 5A [ 2] 66 decw x + 00000D 1F 0D [ 2] 67 ldw (0x0d, sp), x + 68 ; ../_strncat.c: 39: while (count--) + 00000F 16 0F [ 2] 69 ldw y, (0x0f, sp) + 000011 17 05 [ 2] 70 ldw (0x05, sp), y + 000013 16 0D [ 2] 71 ldw y, (0x0d, sp) + 000015 17 07 [ 2] 72 ldw (0x07, sp), y + 000017 16 11 [ 2] 73 ldw y, (0x11, sp) + 000019 17 09 [ 2] 74 ldw (0x09, sp), y + 00001B 75 00106$: + 00001B 16 09 [ 2] 76 ldw y, (0x09, sp) + 00001D 17 03 [ 2] 77 ldw (0x03, sp), y + 00001F 1E 09 [ 2] 78 ldw x, (0x09, sp) + 000021 5A [ 2] 79 decw x + 000022 1F 09 [ 2] 80 ldw (0x09, sp), x + 000024 1E 03 [ 2] 81 ldw x, (0x03, sp) + 000026 27 19 [ 1] 82 jreq 00108$ + 83 ; ../_strncat.c: 40: if (!(*front++ = *back++)) + 000028 1E 05 [ 2] 84 ldw x, (0x05, sp) + 00002A F6 [ 1] 85 ld a, (x) + 00002B 1E 05 [ 2] 86 ldw x, (0x05, sp) + 00002D 5C [ 1] 87 incw x + 00002E 1F 05 [ 2] 88 ldw (0x05, sp), x + 000030 1E 07 [ 2] 89 ldw x, (0x07, sp) + 000032 F7 [ 1] 90 ld (x), a + 000033 1E 07 [ 2] 91 ldw x, (0x07, sp) + 000035 5C [ 1] 92 incw x + 000036 1F 07 [ 2] 93 ldw (0x07, sp), x + 000038 1F 0D [ 2] 94 ldw (0x0d, sp), x + 00003A 4D [ 1] 95 tnz a + 00003B 26 DE [ 1] 96 jrne 00106$ + 97 ; ../_strncat.c: 41: return(start); + 00003D 1E 01 [ 2] 98 ldw x, (0x01, sp) + 00003F 20 08 [ 2] 99 jra 00109$ + 000041 100 00108$: + 101 ; ../_strncat.c: 43: *front = '\0'; + 000041 16 0D [ 2] 102 ldw y, (0x0d, sp) + 000043 17 09 [ 2] 103 ldw (0x09, sp), y + 000045 93 [ 1] 104 ldw x, y + 000046 7F [ 1] 105 clr (x) + 106 ; ../_strncat.c: 44: return(start); + 000047 1E 01 [ 2] 107 ldw x, (0x01, sp) + 000049 108 00109$: + 109 ; ../_strncat.c: 45: } + 000049 5B 0A [ 2] 110 addw sp, #10 + 00004B 81 [ 4] 111 ret + 112 .area CODE + 113 .area CONST + 114 .area INITIALIZER + 115 .area CABS (ABS) diff --git a/device/lib/stm8/_strncat.rel b/device/lib/stm8/_strncat.rel new file mode 100644 index 0000000..336df94 --- /dev/null +++ b/device/lib/stm8/_strncat.rel @@ -0,0 +1,43 @@ +XH3 +H B areas 2 global symbols +M _strncat +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 4C flags 0 addr 0 +S _strncat Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 16 0D 17 01 93 +R 00 00 00 09 +T 00 00 07 +R 00 00 00 09 +T 00 00 07 F6 5C 4D 26 FB 5A 1F 0D 16 0F 17 05 16 +R 00 00 00 09 +T 00 00 14 0D 17 07 16 11 17 09 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 16 09 17 03 1E 09 5A 1F 09 1E 03 27 19 +R 00 00 00 09 +T 00 00 28 1E 05 F6 1E 05 5C 1F 05 1E 07 F7 1E 07 +R 00 00 00 09 +T 00 00 35 5C 1F 07 1F 0D 4D 26 DE 1E 01 20 08 +R 00 00 00 09 +T 00 00 41 +R 00 00 00 09 +T 00 00 41 16 0D 17 09 93 7F 1E 01 +R 00 00 00 09 +T 00 00 49 +R 00 00 00 09 +T 00 00 49 5B 0A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strncat.sym b/device/lib/stm8/_strncat.sym new file mode 100644 index 0000000..7690e64 --- /dev/null +++ b/device/lib/stm8/_strncat.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _strncat 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 4C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strncmp.asm b/device/lib/stm8/_strncmp.asm new file mode 100644 index 0000000..faebada --- /dev/null +++ b/device/lib/stm8/_strncmp.asm @@ -0,0 +1,104 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strncmp + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strncmp +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strncmp.c: 31: int strncmp ( const char * first, const char * last, size_t count ) +; ----------------------------------------- +; function strncmp +; ----------------------------------------- +_strncmp: + sub sp, #5 +; ../_strncmp.c: 33: if (!count) +; ../_strncmp.c: 34: return(0); + ldw x, (0x0c, sp) +; ../_strncmp.c: 36: while (--count && *first && *first == *last) { + jreq 00108$ + ldw y, (0x08, sp) + ldw (0x02, sp), y + ldw y, (0x0a, sp) + ldw (0x04, sp), y + ldw y, (0x0c, sp) +00105$: + decw y + ldw x, (0x02, sp) + ld a, (x) + ldw x, (0x04, sp) + push a + ld a, (x) + ld (0x02, sp), a + pop a + tnzw y + jreq 00107$ + tnz a + jreq 00107$ + cp a, (0x01, sp) + jrne 00107$ +; ../_strncmp.c: 37: first++; + ldw x, (0x02, sp) + incw x + ldw (0x02, sp), x +; ../_strncmp.c: 38: last++; + ldw x, (0x04, sp) + incw x + ldw (0x04, sp), x + jra 00105$ +00107$: +; ../_strncmp.c: 41: return( *first - *last ); + clrw x + ld xl, a + ld a, (0x01, sp) + ld (0x05, sp), a + clr (0x04, sp) + subw x, (0x04, sp) +00108$: +; ../_strncmp.c: 42: } + addw sp, #5 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strncmp.lst b/device/lib/stm8/_strncmp.lst new file mode 100644 index 0000000..11d7535 --- /dev/null +++ b/device/lib/stm8/_strncmp.lst @@ -0,0 +1,104 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strncmp + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strncmp + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_strncmp.c: 31: int strncmp ( const char * first, const char * last, size_t count ) + 50 ; ----------------------------------------- + 51 ; function strncmp + 52 ; ----------------------------------------- + 000000 53 _strncmp: + 000000 52 05 [ 2] 54 sub sp, #5 + 55 ; ../_strncmp.c: 33: if (!count) + 56 ; ../_strncmp.c: 34: return(0); + 000002 1E 0C [ 2] 57 ldw x, (0x0c, sp) + 58 ; ../_strncmp.c: 36: while (--count && *first && *first == *last) { + 000004 27 38 [ 1] 59 jreq 00108$ + 000006 16 08 [ 2] 60 ldw y, (0x08, sp) + 000008 17 02 [ 2] 61 ldw (0x02, sp), y + 00000A 16 0A [ 2] 62 ldw y, (0x0a, sp) + 00000C 17 04 [ 2] 63 ldw (0x04, sp), y + 00000E 16 0C [ 2] 64 ldw y, (0x0c, sp) + 000010 65 00105$: + 000010 90 5A [ 2] 66 decw y + 000012 1E 02 [ 2] 67 ldw x, (0x02, sp) + 000014 F6 [ 1] 68 ld a, (x) + 000015 1E 04 [ 2] 69 ldw x, (0x04, sp) + 000017 88 [ 1] 70 push a + 000018 F6 [ 1] 71 ld a, (x) + 000019 6B 02 [ 1] 72 ld (0x02, sp), a + 00001B 84 [ 1] 73 pop a + 00001C 90 5D [ 2] 74 tnzw y + 00001E 27 13 [ 1] 75 jreq 00107$ + 000020 4D [ 1] 76 tnz a + 000021 27 10 [ 1] 77 jreq 00107$ + 000023 11 01 [ 1] 78 cp a, (0x01, sp) + 000025 26 0C [ 1] 79 jrne 00107$ + 80 ; ../_strncmp.c: 37: first++; + 000027 1E 02 [ 2] 81 ldw x, (0x02, sp) + 000029 5C [ 1] 82 incw x + 00002A 1F 02 [ 2] 83 ldw (0x02, sp), x + 84 ; ../_strncmp.c: 38: last++; + 00002C 1E 04 [ 2] 85 ldw x, (0x04, sp) + 00002E 5C [ 1] 86 incw x + 00002F 1F 04 [ 2] 87 ldw (0x04, sp), x + 000031 20 DD [ 2] 88 jra 00105$ + 000033 89 00107$: + 90 ; ../_strncmp.c: 41: return( *first - *last ); + 000033 5F [ 1] 91 clrw x + 000034 97 [ 1] 92 ld xl, a + 000035 7B 01 [ 1] 93 ld a, (0x01, sp) + 000037 6B 05 [ 1] 94 ld (0x05, sp), a + 000039 0F 04 [ 1] 95 clr (0x04, sp) + 00003B 72 F0 04 [ 2] 96 subw x, (0x04, sp) + 00003E 97 00108$: + 98 ; ../_strncmp.c: 42: } + 00003E 5B 05 [ 2] 99 addw sp, #5 + 000040 81 [ 4] 100 ret + 101 .area CODE + 102 .area CONST + 103 .area INITIALIZER + 104 .area CABS (ABS) diff --git a/device/lib/stm8/_strncmp.rel b/device/lib/stm8/_strncmp.rel new file mode 100644 index 0000000..24dd4d2 --- /dev/null +++ b/device/lib/stm8/_strncmp.rel @@ -0,0 +1,39 @@ +XH3 +H B areas 2 global symbols +M _strncmp +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 41 flags 0 addr 0 +S _strncmp Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 05 1E 0C 27 38 16 08 17 02 16 0A 17 +R 00 00 00 09 +T 00 00 0D 04 16 0C +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 90 5A 1E 02 F6 1E 04 88 F6 6B 02 84 90 +R 00 00 00 09 +T 00 00 1D 5D 27 13 4D 27 10 11 01 26 0C 1E 02 5C +R 00 00 00 09 +T 00 00 2A 1F 02 1E 04 5C 1F 04 20 DD +R 00 00 00 09 +T 00 00 33 +R 00 00 00 09 +T 00 00 33 5F 97 7B 01 6B 05 0F 04 72 F0 04 +R 00 00 00 09 +T 00 00 3E +R 00 00 00 09 +T 00 00 3E 5B 05 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strncmp.sym b/device/lib/stm8/_strncmp.sym new file mode 100644 index 0000000..1b00c4a --- /dev/null +++ b/device/lib/stm8/_strncmp.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _strncmp 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 41 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strncpy.asm b/device/lib/stm8/_strncpy.asm new file mode 100644 index 0000000..a7119c1 --- /dev/null +++ b/device/lib/stm8/_strncpy.asm @@ -0,0 +1,104 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strncpy + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strncpy +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strncpy.c: 33: char *strncpy ( char * d, const char * s, size_t n ) +; ----------------------------------------- +; function strncpy +; ----------------------------------------- +_strncpy: + sub sp, #6 +; ../_strncpy.c: 35: register char * d1 = d; + ldw y, (0x09, sp) + ldw (0x01, sp), y +; ../_strncpy.c: 37: while ( n && *s ) + ldw y, (0x0d, sp) + ldw (0x05, sp), y + ldw y, (0x0b, sp) + ldw (0x03, sp), y + ldw x, (0x01, sp) +00102$: + ldw y, (0x05, sp) + jreq 00114$ + ldw y, (0x03, sp) + ld a, (y) + jreq 00114$ +; ../_strncpy.c: 39: n-- ; + ldw y, (0x05, sp) + decw y + ldw (0x05, sp), y +; ../_strncpy.c: 40: *d++ = *s++ ; + ldw y, (0x03, sp) + incw y + ldw (0x03, sp), y + ld (x), a + incw x + jra 00102$ +; ../_strncpy.c: 42: while ( n-- ) +00114$: +00105$: + ldw y, (0x05, sp) + ldw (0x03, sp), y + ldw y, (0x05, sp) + decw y + ldw (0x05, sp), y + ldw y, (0x03, sp) + jreq 00107$ +; ../_strncpy.c: 44: *d++ = '\0' ; + clr (x) + incw x + jra 00105$ +00107$: +; ../_strncpy.c: 46: return d1; + ldw x, (0x01, sp) +; ../_strncpy.c: 47: } + addw sp, #6 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strncpy.lst b/device/lib/stm8/_strncpy.lst new file mode 100644 index 0000000..90f6c72 --- /dev/null +++ b/device/lib/stm8/_strncpy.lst @@ -0,0 +1,104 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strncpy + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strncpy + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_strncpy.c: 33: char *strncpy ( char * d, const char * s, size_t n ) + 50 ; ----------------------------------------- + 51 ; function strncpy + 52 ; ----------------------------------------- + 000000 53 _strncpy: + 000000 52 06 [ 2] 54 sub sp, #6 + 55 ; ../_strncpy.c: 35: register char * d1 = d; + 000002 16 09 [ 2] 56 ldw y, (0x09, sp) + 000004 17 01 [ 2] 57 ldw (0x01, sp), y + 58 ; ../_strncpy.c: 37: while ( n && *s ) + 000006 16 0D [ 2] 59 ldw y, (0x0d, sp) + 000008 17 05 [ 2] 60 ldw (0x05, sp), y + 00000A 16 0B [ 2] 61 ldw y, (0x0b, sp) + 00000C 17 03 [ 2] 62 ldw (0x03, sp), y + 00000E 1E 01 [ 2] 63 ldw x, (0x01, sp) + 000010 64 00102$: + 000010 16 05 [ 2] 65 ldw y, (0x05, sp) + 000012 27 16 [ 1] 66 jreq 00114$ + 000014 16 03 [ 2] 67 ldw y, (0x03, sp) + 000016 90 F6 [ 1] 68 ld a, (y) + 000018 27 10 [ 1] 69 jreq 00114$ + 70 ; ../_strncpy.c: 39: n-- ; + 00001A 16 05 [ 2] 71 ldw y, (0x05, sp) + 00001C 90 5A [ 2] 72 decw y + 00001E 17 05 [ 2] 73 ldw (0x05, sp), y + 74 ; ../_strncpy.c: 40: *d++ = *s++ ; + 000020 16 03 [ 2] 75 ldw y, (0x03, sp) + 000022 90 5C [ 1] 76 incw y + 000024 17 03 [ 2] 77 ldw (0x03, sp), y + 000026 F7 [ 1] 78 ld (x), a + 000027 5C [ 1] 79 incw x + 000028 20 E6 [ 2] 80 jra 00102$ + 81 ; ../_strncpy.c: 42: while ( n-- ) + 00002A 82 00114$: + 00002A 83 00105$: + 00002A 16 05 [ 2] 84 ldw y, (0x05, sp) + 00002C 17 03 [ 2] 85 ldw (0x03, sp), y + 00002E 16 05 [ 2] 86 ldw y, (0x05, sp) + 000030 90 5A [ 2] 87 decw y + 000032 17 05 [ 2] 88 ldw (0x05, sp), y + 000034 16 03 [ 2] 89 ldw y, (0x03, sp) + 000036 27 04 [ 1] 90 jreq 00107$ + 91 ; ../_strncpy.c: 44: *d++ = '\0' ; + 000038 7F [ 1] 92 clr (x) + 000039 5C [ 1] 93 incw x + 00003A 20 EE [ 2] 94 jra 00105$ + 00003C 95 00107$: + 96 ; ../_strncpy.c: 46: return d1; + 00003C 1E 01 [ 2] 97 ldw x, (0x01, sp) + 98 ; ../_strncpy.c: 47: } + 00003E 5B 06 [ 2] 99 addw sp, #6 + 000040 81 [ 4] 100 ret + 101 .area CODE + 102 .area CONST + 103 .area INITIALIZER + 104 .area CABS (ABS) diff --git a/device/lib/stm8/_strncpy.rel b/device/lib/stm8/_strncpy.rel new file mode 100644 index 0000000..ba88c51 --- /dev/null +++ b/device/lib/stm8/_strncpy.rel @@ -0,0 +1,41 @@ +XH3 +H B areas 2 global symbols +M _strncpy +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 41 flags 0 addr 0 +S _strncpy Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 06 16 09 17 01 16 0D 17 05 16 0B 17 +R 00 00 00 09 +T 00 00 0D 03 1E 01 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 16 05 27 16 16 03 90 F6 27 10 16 05 90 +R 00 00 00 09 +T 00 00 1D 5A 17 05 16 03 90 5C 17 03 F7 5C 20 E6 +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 16 05 17 03 16 05 90 5A 17 05 16 03 27 +R 00 00 00 09 +T 00 00 37 04 7F 5C 20 EE +R 00 00 00 09 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 1E 01 5B 06 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strncpy.sym b/device/lib/stm8/_strncpy.sym new file mode 100644 index 0000000..0d065a3 --- /dev/null +++ b/device/lib/stm8/_strncpy.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _strncpy 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 41 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strpbrk.asm b/device/lib/stm8/_strpbrk.asm new file mode 100644 index 0000000..45d4ff4 --- /dev/null +++ b/device/lib/stm8/_strpbrk.asm @@ -0,0 +1,101 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strpbrk + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strchr + .globl _strpbrk +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strpbrk.c: 31: char * strpbrk ( const char * string, const char * control ) +; ----------------------------------------- +; function strpbrk +; ----------------------------------------- +_strpbrk: + sub sp, #4 +; ../_strpbrk.c: 33: char *ret = NULL; + clrw x + ldw (0x01, sp), x +; ../_strpbrk.c: 36: while (ch = *control) { + ldw y, (0x09, sp) + ldw (0x03, sp), y +00105$: + ldw x, (0x03, sp) + ld a, (x) + ld xl, a + tnz a + jreq 00107$ +; ../_strpbrk.c: 37: char * p = strchr(string, ch); + clr a + ld xh, a + pushw x + ldw x, (0x09, sp) + pushw x + call _strchr + addw sp, #4 +; ../_strpbrk.c: 38: if (p != NULL && (ret == NULL || p < ret)) { + tnzw x + jreq 00102$ + ldw y, (0x01, sp) + jreq 00101$ + cpw x, (0x01, sp) + jrnc 00102$ +00101$: +; ../_strpbrk.c: 39: ret = p; + ldw (0x01, sp), x +00102$: +; ../_strpbrk.c: 41: control++; + ldw x, (0x03, sp) + incw x + ldw (0x03, sp), x + jra 00105$ +00107$: +; ../_strpbrk.c: 44: return (ret); + ldw x, (0x01, sp) +; ../_strpbrk.c: 45: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strpbrk.lst b/device/lib/stm8/_strpbrk.lst new file mode 100644 index 0000000..14beeac --- /dev/null +++ b/device/lib/stm8/_strpbrk.lst @@ -0,0 +1,101 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strpbrk + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strchr + 12 .globl _strpbrk + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_strpbrk.c: 31: char * strpbrk ( const char * string, const char * control ) + 51 ; ----------------------------------------- + 52 ; function strpbrk + 53 ; ----------------------------------------- + 000000 54 _strpbrk: + 000000 52 04 [ 2] 55 sub sp, #4 + 56 ; ../_strpbrk.c: 33: char *ret = NULL; + 000002 5F [ 1] 57 clrw x + 000003 1F 01 [ 2] 58 ldw (0x01, sp), x + 59 ; ../_strpbrk.c: 36: while (ch = *control) { + 000005 16 09 [ 2] 60 ldw y, (0x09, sp) + 000007 17 03 [ 2] 61 ldw (0x03, sp), y + 000009 62 00105$: + 000009 1E 03 [ 2] 63 ldw x, (0x03, sp) + 00000B F6 [ 1] 64 ld a, (x) + 00000C 97 [ 1] 65 ld xl, a + 00000D 4D [ 1] 66 tnz a + 00000E 27 1F [ 1] 67 jreq 00107$ + 68 ; ../_strpbrk.c: 37: char * p = strchr(string, ch); + 000010 4F [ 1] 69 clr a + 000011 95 [ 1] 70 ld xh, a + 000012 89 [ 2] 71 pushw x + 000013 1E 09 [ 2] 72 ldw x, (0x09, sp) + 000015 89 [ 2] 73 pushw x + 000016 CDr00r00 [ 4] 74 call _strchr + 000019 5B 04 [ 2] 75 addw sp, #4 + 76 ; ../_strpbrk.c: 38: if (p != NULL && (ret == NULL || p < ret)) { + 00001B 5D [ 2] 77 tnzw x + 00001C 27 0A [ 1] 78 jreq 00102$ + 00001E 16 01 [ 2] 79 ldw y, (0x01, sp) + 000020 27 04 [ 1] 80 jreq 00101$ + 000022 13 01 [ 2] 81 cpw x, (0x01, sp) + 000024 24 02 [ 1] 82 jrnc 00102$ + 000026 83 00101$: + 84 ; ../_strpbrk.c: 39: ret = p; + 000026 1F 01 [ 2] 85 ldw (0x01, sp), x + 000028 86 00102$: + 87 ; ../_strpbrk.c: 41: control++; + 000028 1E 03 [ 2] 88 ldw x, (0x03, sp) + 00002A 5C [ 1] 89 incw x + 00002B 1F 03 [ 2] 90 ldw (0x03, sp), x + 00002D 20 DA [ 2] 91 jra 00105$ + 00002F 92 00107$: + 93 ; ../_strpbrk.c: 44: return (ret); + 00002F 1E 01 [ 2] 94 ldw x, (0x01, sp) + 95 ; ../_strpbrk.c: 45: } + 000031 5B 04 [ 2] 96 addw sp, #4 + 000033 81 [ 4] 97 ret + 98 .area CODE + 99 .area CONST + 100 .area INITIALIZER + 101 .area CABS (ABS) diff --git a/device/lib/stm8/_strpbrk.rel b/device/lib/stm8/_strpbrk.rel new file mode 100644 index 0000000..db459a4 --- /dev/null +++ b/device/lib/stm8/_strpbrk.rel @@ -0,0 +1,42 @@ +XH3 +H B areas 3 global symbols +M _strpbrk +O -mstm8 +S .__.ABS. Def000000 +S _strchr Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 34 flags 0 addr 0 +S _strpbrk Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 5F 1F 01 16 09 17 03 +R 00 00 00 09 +T 00 00 09 +R 00 00 00 09 +T 00 00 09 1E 03 F6 97 4D 27 1F 4F 95 89 1E 09 89 +R 00 00 00 09 +T 00 00 16 CD 00 00 5B 04 5D 27 0A 16 01 27 04 13 +R 00 00 00 09 02 04 00 01 +T 00 00 23 01 24 02 +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 1F 01 +R 00 00 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 1E 03 5C 1F 03 20 DA +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 1E 01 5B 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strpbrk.sym b/device/lib/stm8/_strpbrk.sym new file mode 100644 index 0000000..67bd367 --- /dev/null +++ b/device/lib/stm8/_strpbrk.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _strchr ****** GX + 9 _strpbrk 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 34 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strrchr.asm b/device/lib/stm8/_strrchr.asm new file mode 100644 index 0000000..e13ca42 --- /dev/null +++ b/device/lib/stm8/_strrchr.asm @@ -0,0 +1,102 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strrchr + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strrchr +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strrchr.c: 34: char * strrchr ( const char * string, int ch ) +; ----------------------------------------- +; function strrchr +; ----------------------------------------- +_strrchr: + sub sp, #2 +; ../_strrchr.c: 37: const char * start = string; + ldw y, (0x05, sp) +; ../_strrchr.c: 39: while (*string++) /* find end of string */ + ldw x, y +00101$: + ld a, (x) + incw x + tnz a + jrne 00101$ +; ../_strrchr.c: 42: while (--string != start && *string != ch) + ldw (0x01, sp), x +00105$: + ldw x, (0x01, sp) + decw x + ldw (0x01, sp), x + ld a, (x) + clrw x + ld xl, a + cpw x, (0x07, sp) + jrne 00140$ + ld a, #0x01 + .byte 0x21 +00140$: + clr a +00141$: + ldw x, y + cpw x, (0x01, sp) + jreq 00107$ + tnz a + jreq 00105$ +00107$: +; ../_strrchr.c: 45: if (*string == ch) /* char found ? */ + tnz a + jreq 00109$ +; ../_strrchr.c: 46: return( (char *)string ); + ldw x, (0x01, sp) +; ../_strrchr.c: 48: return (NULL) ; + .byte 0x21 +00109$: + clrw x +00110$: +; ../_strrchr.c: 49: } + addw sp, #2 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strrchr.lst b/device/lib/stm8/_strrchr.lst new file mode 100644 index 0000000..d786c9e --- /dev/null +++ b/device/lib/stm8/_strrchr.lst @@ -0,0 +1,102 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strrchr + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strrchr + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_strrchr.c: 34: char * strrchr ( const char * string, int ch ) + 50 ; ----------------------------------------- + 51 ; function strrchr + 52 ; ----------------------------------------- + 000000 53 _strrchr: + 000000 52 02 [ 2] 54 sub sp, #2 + 55 ; ../_strrchr.c: 37: const char * start = string; + 000002 16 05 [ 2] 56 ldw y, (0x05, sp) + 57 ; ../_strrchr.c: 39: while (*string++) /* find end of string */ + 000004 93 [ 1] 58 ldw x, y + 000005 59 00101$: + 000005 F6 [ 1] 60 ld a, (x) + 000006 5C [ 1] 61 incw x + 000007 4D [ 1] 62 tnz a + 000008 26 FB [ 1] 63 jrne 00101$ + 64 ; ../_strrchr.c: 42: while (--string != start && *string != ch) + 00000A 1F 01 [ 2] 65 ldw (0x01, sp), x + 00000C 66 00105$: + 00000C 1E 01 [ 2] 67 ldw x, (0x01, sp) + 00000E 5A [ 2] 68 decw x + 00000F 1F 01 [ 2] 69 ldw (0x01, sp), x + 000011 F6 [ 1] 70 ld a, (x) + 000012 5F [ 1] 71 clrw x + 000013 97 [ 1] 72 ld xl, a + 000014 13 07 [ 2] 73 cpw x, (0x07, sp) + 000016 26 03 [ 1] 74 jrne 00140$ + 000018 A6 01 [ 1] 75 ld a, #0x01 + 00001A 21 76 .byte 0x21 + 00001B 77 00140$: + 00001B 4F [ 1] 78 clr a + 00001C 79 00141$: + 00001C 93 [ 1] 80 ldw x, y + 00001D 13 01 [ 2] 81 cpw x, (0x01, sp) + 00001F 27 03 [ 1] 82 jreq 00107$ + 000021 4D [ 1] 83 tnz a + 000022 27 E8 [ 1] 84 jreq 00105$ + 000024 85 00107$: + 86 ; ../_strrchr.c: 45: if (*string == ch) /* char found ? */ + 000024 4D [ 1] 87 tnz a + 000025 27 03 [ 1] 88 jreq 00109$ + 89 ; ../_strrchr.c: 46: return( (char *)string ); + 000027 1E 01 [ 2] 90 ldw x, (0x01, sp) + 91 ; ../_strrchr.c: 48: return (NULL) ; + 000029 21 92 .byte 0x21 + 00002A 93 00109$: + 00002A 5F [ 1] 94 clrw x + 00002B 95 00110$: + 96 ; ../_strrchr.c: 49: } + 00002B 5B 02 [ 2] 97 addw sp, #2 + 00002D 81 [ 4] 98 ret + 99 .area CODE + 100 .area CONST + 101 .area INITIALIZER + 102 .area CABS (ABS) diff --git a/device/lib/stm8/_strrchr.rel b/device/lib/stm8/_strrchr.rel new file mode 100644 index 0000000..1ff6626 --- /dev/null +++ b/device/lib/stm8/_strrchr.rel @@ -0,0 +1,51 @@ +XH3 +H B areas 2 global symbols +M _strrchr +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 2E flags 0 addr 0 +S _strrchr Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 02 16 05 93 +R 00 00 00 09 +T 00 00 05 +R 00 00 00 09 +T 00 00 05 F6 5C 4D 26 FB 1F 01 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C 1E 01 5A 1F 01 F6 5F 97 13 07 26 03 A6 +R 00 00 00 09 +T 00 00 19 01 21 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 4F +R 00 00 00 09 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 93 13 01 27 03 4D 27 E8 +R 00 00 00 09 +T 00 00 24 +R 00 00 00 09 +T 00 00 24 4D 27 03 1E 01 21 +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 5F +R 00 00 00 09 +T 00 00 2B +R 00 00 00 09 +T 00 00 2B 5B 02 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strrchr.sym b/device/lib/stm8/_strrchr.sym new file mode 100644 index 0000000..051cded --- /dev/null +++ b/device/lib/stm8/_strrchr.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _strrchr 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 2E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strspn.asm b/device/lib/stm8/_strspn.asm new file mode 100644 index 0000000..addf0de --- /dev/null +++ b/device/lib/stm8/_strspn.asm @@ -0,0 +1,93 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strspn + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strchr + .globl _strspn +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strspn.c: 31: size_t strspn ( const char * string, const char * control ) +; ----------------------------------------- +; function strspn +; ----------------------------------------- +_strspn: + sub sp, #2 +; ../_strspn.c: 36: while (ch = *string) { + clrw x + ldw (0x01, sp), x + ldw y, (0x05, sp) +00104$: + ld a, (y) + ld xl, a + tnz a + jreq 00106$ +; ../_strspn.c: 37: if ( strchr(control,ch) ) + clr a + ld xh, a + pushw y + pushw x + ldw x, (0x0b, sp) + pushw x + call _strchr + addw sp, #4 + popw y + tnzw x + jreq 00106$ +; ../_strspn.c: 38: count++ ; + ldw x, (0x01, sp) + incw x + ldw (0x01, sp), x +; ../_strspn.c: 41: string++ ; + incw y + jra 00104$ +00106$: +; ../_strspn.c: 44: return count ; + ldw x, (0x01, sp) +; ../_strspn.c: 45: } + addw sp, #2 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strspn.lst b/device/lib/stm8/_strspn.lst new file mode 100644 index 0000000..26d0643 --- /dev/null +++ b/device/lib/stm8/_strspn.lst @@ -0,0 +1,93 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strspn + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strchr + 12 .globl _strspn + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_strspn.c: 31: size_t strspn ( const char * string, const char * control ) + 51 ; ----------------------------------------- + 52 ; function strspn + 53 ; ----------------------------------------- + 000000 54 _strspn: + 000000 52 02 [ 2] 55 sub sp, #2 + 56 ; ../_strspn.c: 36: while (ch = *string) { + 000002 5F [ 1] 57 clrw x + 000003 1F 01 [ 2] 58 ldw (0x01, sp), x + 000005 16 05 [ 2] 59 ldw y, (0x05, sp) + 000007 60 00104$: + 000007 90 F6 [ 1] 61 ld a, (y) + 000009 97 [ 1] 62 ld xl, a + 00000A 4D [ 1] 63 tnz a + 00000B 27 1B [ 1] 64 jreq 00106$ + 65 ; ../_strspn.c: 37: if ( strchr(control,ch) ) + 00000D 4F [ 1] 66 clr a + 00000E 95 [ 1] 67 ld xh, a + 00000F 90 89 [ 2] 68 pushw y + 000011 89 [ 2] 69 pushw x + 000012 1E 0B [ 2] 70 ldw x, (0x0b, sp) + 000014 89 [ 2] 71 pushw x + 000015 CDr00r00 [ 4] 72 call _strchr + 000018 5B 04 [ 2] 73 addw sp, #4 + 00001A 90 85 [ 2] 74 popw y + 00001C 5D [ 2] 75 tnzw x + 00001D 27 09 [ 1] 76 jreq 00106$ + 77 ; ../_strspn.c: 38: count++ ; + 00001F 1E 01 [ 2] 78 ldw x, (0x01, sp) + 000021 5C [ 1] 79 incw x + 000022 1F 01 [ 2] 80 ldw (0x01, sp), x + 81 ; ../_strspn.c: 41: string++ ; + 000024 90 5C [ 1] 82 incw y + 000026 20 DF [ 2] 83 jra 00104$ + 000028 84 00106$: + 85 ; ../_strspn.c: 44: return count ; + 000028 1E 01 [ 2] 86 ldw x, (0x01, sp) + 87 ; ../_strspn.c: 45: } + 00002A 5B 02 [ 2] 88 addw sp, #2 + 00002C 81 [ 4] 89 ret + 90 .area CODE + 91 .area CONST + 92 .area INITIALIZER + 93 .area CABS (ABS) diff --git a/device/lib/stm8/_strspn.rel b/device/lib/stm8/_strspn.rel new file mode 100644 index 0000000..7fb6bf5 --- /dev/null +++ b/device/lib/stm8/_strspn.rel @@ -0,0 +1,34 @@ +XH3 +H B areas 3 global symbols +M _strspn +O -mstm8 +S .__.ABS. Def000000 +S _strchr Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 2D flags 0 addr 0 +S _strspn Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 02 5F 1F 01 16 05 +R 00 00 00 09 +T 00 00 07 +R 00 00 00 09 +T 00 00 07 90 F6 97 4D 27 1B 4F 95 90 89 89 1E 0B +R 00 00 00 09 +T 00 00 14 89 CD 00 00 5B 04 90 85 5D 27 09 1E 01 +R 00 00 00 09 02 05 00 01 +T 00 00 21 5C 1F 01 90 5C 20 DF +R 00 00 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 1E 01 5B 02 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strspn.sym b/device/lib/stm8/_strspn.sym new file mode 100644 index 0000000..a95ae30 --- /dev/null +++ b/device/lib/stm8/_strspn.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _strchr ****** GX + 9 _strspn 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 2D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strstr.asm b/device/lib/stm8/_strstr.asm new file mode 100644 index 0000000..294de64 --- /dev/null +++ b/device/lib/stm8/_strstr.asm @@ -0,0 +1,134 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strstr + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strstr +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strstr.c: 31: char *strstr ( const char *str1, const char *str2 ) +; ----------------------------------------- +; function strstr +; ----------------------------------------- +_strstr: + sub sp, #13 +; ../_strstr.c: 33: const char *cp = str1; + ldw y, (0x10, sp) + ldw (0x01, sp), y +; ../_strstr.c: 37: if (!*str2) + ldw y, (0x12, sp) + ldw (0x03, sp), y + ldw x, y + ld a, (x) + ld (0x0d, sp), a + jrne 00122$ +; ../_strstr.c: 38: return ((char*)str1); + ldw x, (0x01, sp) + jra 00113$ +; ../_strstr.c: 40: while (*cp) +00122$: + ldw y, (0x01, sp) + ldw (0x08, sp), y +00110$: + ldw x, (0x08, sp) + ld a, (x) + jreq 00112$ +; ../_strstr.c: 43: s2 = str2; + ldw x, (0x03, sp) +; ../_strstr.c: 45: while (*s1 && *s2 && !(*s1-*s2)) + ldw y, (0x08, sp) + ldw (0x0a, sp), y + ldw (0x0c, sp), x +00105$: + ldw x, (0x0a, sp) + ld a, (x) + ld (0x07, sp), a + ldw x, (0x0c, sp) + ld a, (x) + ld (0x05, sp), a + tnz (0x07, sp) + jreq 00107$ + tnz (0x05, sp) + jreq 00107$ + clrw x + ld a, (0x07, sp) + ld xl, a + ld a, (0x05, sp) + ld (0x07, sp), a + clr (0x06, sp) + subw x, (0x06, sp) + tnzw x + jrne 00107$ +; ../_strstr.c: 46: s1++, s2++; + ldw x, (0x0a, sp) + incw x + ldw (0x0a, sp), x + ldw x, (0x0c, sp) + incw x + ldw (0x0c, sp), x + jra 00105$ +00107$: +; ../_strstr.c: 48: if (!*s2) + tnz (0x05, sp) + jrne 00109$ +; ../_strstr.c: 49: return ((char*)cp); + ldw x, (0x01, sp) + jra 00113$ +00109$: +; ../_strstr.c: 51: cp++; + ldw x, (0x08, sp) + incw x + ldw (0x08, sp), x + ldw (0x01, sp), x + jra 00110$ +00112$: +; ../_strstr.c: 54: return (NULL) ; + clrw x +00113$: +; ../_strstr.c: 55: } + addw sp, #13 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strstr.lst b/device/lib/stm8/_strstr.lst new file mode 100644 index 0000000..dc4a096 --- /dev/null +++ b/device/lib/stm8/_strstr.lst @@ -0,0 +1,134 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strstr + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strstr + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_strstr.c: 31: char *strstr ( const char *str1, const char *str2 ) + 50 ; ----------------------------------------- + 51 ; function strstr + 52 ; ----------------------------------------- + 000000 53 _strstr: + 000000 52 0D [ 2] 54 sub sp, #13 + 55 ; ../_strstr.c: 33: const char *cp = str1; + 000002 16 10 [ 2] 56 ldw y, (0x10, sp) + 000004 17 01 [ 2] 57 ldw (0x01, sp), y + 58 ; ../_strstr.c: 37: if (!*str2) + 000006 16 12 [ 2] 59 ldw y, (0x12, sp) + 000008 17 03 [ 2] 60 ldw (0x03, sp), y + 00000A 93 [ 1] 61 ldw x, y + 00000B F6 [ 1] 62 ld a, (x) + 00000C 6B 0D [ 1] 63 ld (0x0d, sp), a + 00000E 26 04 [ 1] 64 jrne 00122$ + 65 ; ../_strstr.c: 38: return ((char*)str1); + 000010 1E 01 [ 2] 66 ldw x, (0x01, sp) + 000012 20 51 [ 2] 67 jra 00113$ + 68 ; ../_strstr.c: 40: while (*cp) + 000014 69 00122$: + 000014 16 01 [ 2] 70 ldw y, (0x01, sp) + 000016 17 08 [ 2] 71 ldw (0x08, sp), y + 000018 72 00110$: + 000018 1E 08 [ 2] 73 ldw x, (0x08, sp) + 00001A F6 [ 1] 74 ld a, (x) + 00001B 27 47 [ 1] 75 jreq 00112$ + 76 ; ../_strstr.c: 43: s2 = str2; + 00001D 1E 03 [ 2] 77 ldw x, (0x03, sp) + 78 ; ../_strstr.c: 45: while (*s1 && *s2 && !(*s1-*s2)) + 00001F 16 08 [ 2] 79 ldw y, (0x08, sp) + 000021 17 0A [ 2] 80 ldw (0x0a, sp), y + 000023 1F 0C [ 2] 81 ldw (0x0c, sp), x + 000025 82 00105$: + 000025 1E 0A [ 2] 83 ldw x, (0x0a, sp) + 000027 F6 [ 1] 84 ld a, (x) + 000028 6B 07 [ 1] 85 ld (0x07, sp), a + 00002A 1E 0C [ 2] 86 ldw x, (0x0c, sp) + 00002C F6 [ 1] 87 ld a, (x) + 00002D 6B 05 [ 1] 88 ld (0x05, sp), a + 00002F 0D 07 [ 1] 89 tnz (0x07, sp) + 000031 27 20 [ 1] 90 jreq 00107$ + 000033 0D 05 [ 1] 91 tnz (0x05, sp) + 000035 27 1C [ 1] 92 jreq 00107$ + 000037 5F [ 1] 93 clrw x + 000038 7B 07 [ 1] 94 ld a, (0x07, sp) + 00003A 97 [ 1] 95 ld xl, a + 00003B 7B 05 [ 1] 96 ld a, (0x05, sp) + 00003D 6B 07 [ 1] 97 ld (0x07, sp), a + 00003F 0F 06 [ 1] 98 clr (0x06, sp) + 000041 72 F0 06 [ 2] 99 subw x, (0x06, sp) + 000044 5D [ 2] 100 tnzw x + 000045 26 0C [ 1] 101 jrne 00107$ + 102 ; ../_strstr.c: 46: s1++, s2++; + 000047 1E 0A [ 2] 103 ldw x, (0x0a, sp) + 000049 5C [ 1] 104 incw x + 00004A 1F 0A [ 2] 105 ldw (0x0a, sp), x + 00004C 1E 0C [ 2] 106 ldw x, (0x0c, sp) + 00004E 5C [ 1] 107 incw x + 00004F 1F 0C [ 2] 108 ldw (0x0c, sp), x + 000051 20 D2 [ 2] 109 jra 00105$ + 000053 110 00107$: + 111 ; ../_strstr.c: 48: if (!*s2) + 000053 0D 05 [ 1] 112 tnz (0x05, sp) + 000055 26 04 [ 1] 113 jrne 00109$ + 114 ; ../_strstr.c: 49: return ((char*)cp); + 000057 1E 01 [ 2] 115 ldw x, (0x01, sp) + 000059 20 0A [ 2] 116 jra 00113$ + 00005B 117 00109$: + 118 ; ../_strstr.c: 51: cp++; + 00005B 1E 08 [ 2] 119 ldw x, (0x08, sp) + 00005D 5C [ 1] 120 incw x + 00005E 1F 08 [ 2] 121 ldw (0x08, sp), x + 000060 1F 01 [ 2] 122 ldw (0x01, sp), x + 000062 20 B4 [ 2] 123 jra 00110$ + 000064 124 00112$: + 125 ; ../_strstr.c: 54: return (NULL) ; + 000064 5F [ 1] 126 clrw x + 000065 127 00113$: + 128 ; ../_strstr.c: 55: } + 000065 5B 0D [ 2] 129 addw sp, #13 + 000067 81 [ 4] 130 ret + 131 .area CODE + 132 .area CONST + 133 .area INITIALIZER + 134 .area CABS (ABS) diff --git a/device/lib/stm8/_strstr.rel b/device/lib/stm8/_strstr.rel new file mode 100644 index 0000000..587c9fa --- /dev/null +++ b/device/lib/stm8/_strstr.rel @@ -0,0 +1,57 @@ +XH3 +H B areas 2 global symbols +M _strstr +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 68 flags 0 addr 0 +S _strstr Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0D 16 10 17 01 16 12 17 03 93 F6 6B +R 00 00 00 09 +T 00 00 0D 0D 26 04 1E 01 20 51 +R 00 00 00 09 +T 00 00 14 +R 00 00 00 09 +T 00 00 14 16 01 17 08 +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 1E 08 F6 27 47 1E 03 16 08 17 0A 1F 0C +R 00 00 00 09 +T 00 00 25 +R 00 00 00 09 +T 00 00 25 1E 0A F6 6B 07 1E 0C F6 6B 05 0D 07 27 +R 00 00 00 09 +T 00 00 32 20 0D 05 27 1C 5F 7B 07 97 7B 05 6B 07 +R 00 00 00 09 +T 00 00 3F 0F 06 72 F0 06 5D 26 0C 1E 0A 5C 1F 0A +R 00 00 00 09 +T 00 00 4C 1E 0C 5C 1F 0C 20 D2 +R 00 00 00 09 +T 00 00 53 +R 00 00 00 09 +T 00 00 53 0D 05 26 04 1E 01 20 0A +R 00 00 00 09 +T 00 00 5B +R 00 00 00 09 +T 00 00 5B 1E 08 5C 1F 08 1F 01 20 B4 +R 00 00 00 09 +T 00 00 64 +R 00 00 00 09 +T 00 00 64 5F +R 00 00 00 09 +T 00 00 65 +R 00 00 00 09 +T 00 00 65 5B 0D 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strstr.sym b/device/lib/stm8/_strstr.sym new file mode 100644 index 0000000..b5464dc --- /dev/null +++ b/device/lib/stm8/_strstr.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _strstr 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 68 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_strtok.asm b/device/lib/stm8/_strtok.asm new file mode 100644 index 0000000..f662701 --- /dev/null +++ b/device/lib/stm8/_strtok.asm @@ -0,0 +1,148 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strtok + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strchr + .globl _strtok +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +_strtok_s_65536_26: + .ds 2 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_strtok.c: 36: char * strtok ( char * str, const char * control ) +; ----------------------------------------- +; function strtok +; ----------------------------------------- +_strtok: + sub sp, #2 +; ../_strtok.c: 41: if ( str ) +; ../_strtok.c: 42: s = str; + ldw x, (0x05, sp) + jreq 00102$ + ldw _strtok_s_65536_26+0, x +00102$: +; ../_strtok.c: 43: if ( !s ) + ldw x, _strtok_s_65536_26+0 + jrne 00108$ +; ../_strtok.c: 44: return NULL; + clrw x + jra 00119$ +; ../_strtok.c: 46: while (*s) { +00108$: + ldw x, _strtok_s_65536_26+0 + ld a, (x) + jreq 00110$ +; ../_strtok.c: 47: if (strchr(control,*s)) + clrw x + ld xl, a + pushw x + ldw x, (0x09, sp) + pushw x + call _strchr + addw sp, #4 + tnzw x + jreq 00110$ +; ../_strtok.c: 48: s++; + ldw x, _strtok_s_65536_26+0 + incw x + ldw _strtok_s_65536_26+0, x + jra 00108$ +; ../_strtok.c: 50: break; +00110$: +; ../_strtok.c: 53: s1 = s; + ldw x, _strtok_s_65536_26+0 + ldw (0x01, sp), x +; ../_strtok.c: 55: while (*s) { +00113$: +; ../_strtok.c: 46: while (*s) { + ldw x, _strtok_s_65536_26+0 +; ../_strtok.c: 55: while (*s) { + ld a, (x) + jreq 00115$ +; ../_strtok.c: 56: if (strchr(control,*s)) { + clrw x + ld xl, a + pushw x + ldw x, (0x09, sp) + pushw x + call _strchr + addw sp, #4 + tnzw x + jreq 00112$ +; ../_strtok.c: 57: *s++ = '\0'; + ldw x, _strtok_s_65536_26+0 + clr (x) + ldw x, _strtok_s_65536_26+0 + incw x + ldw _strtok_s_65536_26+0, x +; ../_strtok.c: 58: return s1; + ldw x, (0x01, sp) + jra 00119$ +00112$: +; ../_strtok.c: 60: s++ ; + ldw x, _strtok_s_65536_26+0 + incw x + ldw _strtok_s_65536_26+0, x + jra 00113$ +00115$: +; ../_strtok.c: 63: s = NULL; + clrw x + ldw _strtok_s_65536_26+0, x +; ../_strtok.c: 65: if (*s1) + ldw x, (0x01, sp) + ld a, (x) + jreq 00117$ +; ../_strtok.c: 66: return s1; + ldw x, (0x01, sp) +; ../_strtok.c: 68: return NULL; + .byte 0x21 +00117$: + clrw x +00119$: +; ../_strtok.c: 69: } + addw sp, #2 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_strtok.lst b/device/lib/stm8/_strtok.lst new file mode 100644 index 0000000..1fdece9 --- /dev/null +++ b/device/lib/stm8/_strtok.lst @@ -0,0 +1,148 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strtok + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strchr + 12 .globl _strtok + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 000000 17 _strtok_s_65536_26: + 000000 18 .ds 2 + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../_strtok.c: 36: char * strtok ( char * str, const char * control ) + 53 ; ----------------------------------------- + 54 ; function strtok + 55 ; ----------------------------------------- + 000000 56 _strtok: + 000000 52 02 [ 2] 57 sub sp, #2 + 58 ; ../_strtok.c: 41: if ( str ) + 59 ; ../_strtok.c: 42: s = str; + 000002 1E 05 [ 2] 60 ldw x, (0x05, sp) + 000004 27 03 [ 1] 61 jreq 00102$ + 000006 CFu00u00 [ 2] 62 ldw _strtok_s_65536_26+0, x + 000009 63 00102$: + 64 ; ../_strtok.c: 43: if ( !s ) + 000009 CEu00u00 [ 2] 65 ldw x, _strtok_s_65536_26+0 + 00000C 26 03 [ 1] 66 jrne 00108$ + 67 ; ../_strtok.c: 44: return NULL; + 00000E 5F [ 1] 68 clrw x + 00000F 20 5B [ 2] 69 jra 00119$ + 70 ; ../_strtok.c: 46: while (*s) { + 000011 71 00108$: + 000011 CEu00u00 [ 2] 72 ldw x, _strtok_s_65536_26+0 + 000014 F6 [ 1] 73 ld a, (x) + 000015 27 17 [ 1] 74 jreq 00110$ + 75 ; ../_strtok.c: 47: if (strchr(control,*s)) + 000017 5F [ 1] 76 clrw x + 000018 97 [ 1] 77 ld xl, a + 000019 89 [ 2] 78 pushw x + 00001A 1E 09 [ 2] 79 ldw x, (0x09, sp) + 00001C 89 [ 2] 80 pushw x + 00001D CDr00r00 [ 4] 81 call _strchr + 000020 5B 04 [ 2] 82 addw sp, #4 + 000022 5D [ 2] 83 tnzw x + 000023 27 09 [ 1] 84 jreq 00110$ + 85 ; ../_strtok.c: 48: s++; + 000025 CEu00u00 [ 2] 86 ldw x, _strtok_s_65536_26+0 + 000028 5C [ 1] 87 incw x + 000029 CFu00u00 [ 2] 88 ldw _strtok_s_65536_26+0, x + 00002C 20 E3 [ 2] 89 jra 00108$ + 90 ; ../_strtok.c: 50: break; + 00002E 91 00110$: + 92 ; ../_strtok.c: 53: s1 = s; + 00002E CEu00u00 [ 2] 93 ldw x, _strtok_s_65536_26+0 + 000031 1F 01 [ 2] 94 ldw (0x01, sp), x + 95 ; ../_strtok.c: 55: while (*s) { + 000033 96 00113$: + 97 ; ../_strtok.c: 46: while (*s) { + 000033 CEu00u00 [ 2] 98 ldw x, _strtok_s_65536_26+0 + 99 ; ../_strtok.c: 55: while (*s) { + 000036 F6 [ 1] 100 ld a, (x) + 000037 27 26 [ 1] 101 jreq 00115$ + 102 ; ../_strtok.c: 56: if (strchr(control,*s)) { + 000039 5F [ 1] 103 clrw x + 00003A 97 [ 1] 104 ld xl, a + 00003B 89 [ 2] 105 pushw x + 00003C 1E 09 [ 2] 106 ldw x, (0x09, sp) + 00003E 89 [ 2] 107 pushw x + 00003F CDr00r00 [ 4] 108 call _strchr + 000042 5B 04 [ 2] 109 addw sp, #4 + 000044 5D [ 2] 110 tnzw x + 000045 27 0F [ 1] 111 jreq 00112$ + 112 ; ../_strtok.c: 57: *s++ = '\0'; + 000047 CEu00u00 [ 2] 113 ldw x, _strtok_s_65536_26+0 + 00004A 7F [ 1] 114 clr (x) + 00004B CEu00u00 [ 2] 115 ldw x, _strtok_s_65536_26+0 + 00004E 5C [ 1] 116 incw x + 00004F CFu00u00 [ 2] 117 ldw _strtok_s_65536_26+0, x + 118 ; ../_strtok.c: 58: return s1; + 000052 1E 01 [ 2] 119 ldw x, (0x01, sp) + 000054 20 16 [ 2] 120 jra 00119$ + 000056 121 00112$: + 122 ; ../_strtok.c: 60: s++ ; + 000056 CEu00u00 [ 2] 123 ldw x, _strtok_s_65536_26+0 + 000059 5C [ 1] 124 incw x + 00005A CFu00u00 [ 2] 125 ldw _strtok_s_65536_26+0, x + 00005D 20 D4 [ 2] 126 jra 00113$ + 00005F 127 00115$: + 128 ; ../_strtok.c: 63: s = NULL; + 00005F 5F [ 1] 129 clrw x + 000060 CFu00u00 [ 2] 130 ldw _strtok_s_65536_26+0, x + 131 ; ../_strtok.c: 65: if (*s1) + 000063 1E 01 [ 2] 132 ldw x, (0x01, sp) + 000065 F6 [ 1] 133 ld a, (x) + 000066 27 03 [ 1] 134 jreq 00117$ + 135 ; ../_strtok.c: 66: return s1; + 000068 1E 01 [ 2] 136 ldw x, (0x01, sp) + 137 ; ../_strtok.c: 68: return NULL; + 00006A 21 138 .byte 0x21 + 00006B 139 00117$: + 00006B 5F [ 1] 140 clrw x + 00006C 141 00119$: + 142 ; ../_strtok.c: 69: } + 00006C 5B 02 [ 2] 143 addw sp, #2 + 00006E 81 [ 4] 144 ret + 145 .area CODE + 146 .area CONST + 147 .area INITIALIZER + 148 .area CABS (ABS) diff --git a/device/lib/stm8/_strtok.rel b/device/lib/stm8/_strtok.rel new file mode 100644 index 0000000..aa5a4ad --- /dev/null +++ b/device/lib/stm8/_strtok.rel @@ -0,0 +1,66 @@ +XH3 +H B areas 3 global symbols +M _strtok +O -mstm8 +S .__.ABS. Def000000 +S _strchr Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 2 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 6F flags 0 addr 0 +S _strtok Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 02 1E 05 27 03 CF 00 00 +R 00 00 00 09 10 0A 00 01 +T 00 00 09 +R 00 00 00 09 +T 00 00 09 CE 00 00 26 03 5F 20 5B +R 00 00 00 09 10 04 00 01 +T 00 00 11 +R 00 00 00 09 +T 00 00 11 CE 00 00 F6 27 17 5F 97 89 1E 09 89 CD +R 00 00 00 09 10 04 00 01 +T 00 00 1E 00 00 5B 04 5D 27 09 CE 00 00 5C CF +R 00 00 00 09 02 03 00 01 10 0B 00 01 +T 00 00 2A 00 00 20 E3 +R 00 00 00 09 10 03 00 01 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E CE 00 00 1F 01 +R 00 00 00 09 10 04 00 01 +T 00 00 33 +R 00 00 00 09 +T 00 00 33 CE 00 00 F6 27 26 5F 97 89 1E 09 89 CD +R 00 00 00 09 10 04 00 01 +T 00 00 40 00 00 5B 04 5D 27 0F CE 00 00 7F CE +R 00 00 00 09 02 03 00 01 10 0B 00 01 +T 00 00 4C 00 00 5C CF 00 00 1E 01 20 16 +R 00 00 00 09 10 03 00 01 10 07 00 01 +T 00 00 56 +R 00 00 00 09 +T 00 00 56 CE 00 00 5C CF 00 00 20 D4 +R 00 00 00 09 10 04 00 01 10 08 00 01 +T 00 00 5F +R 00 00 00 09 +T 00 00 5F 5F CF 00 00 1E 01 F6 27 03 1E 01 21 +R 00 00 00 09 10 05 00 01 +T 00 00 6B +R 00 00 00 09 +T 00 00 6B 5F +R 00 00 00 09 +T 00 00 6C +R 00 00 00 09 +T 00 00 6C 5B 02 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_strtok.sym b/device/lib/stm8/_strtok.sym new file mode 100644 index 0000000..e8dea28 --- /dev/null +++ b/device/lib/stm8/_strtok.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _strchr ****** GX + 9 _strtok 000000 GR + 1 _strtok_s_65536_26 000000 R + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 2 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 6F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_uchar2fs.asm b/device/lib/stm8/_uchar2fs.asm new file mode 100644 index 0000000..c389c28 --- /dev/null +++ b/device/lib/stm8/_uchar2fs.asm @@ -0,0 +1,69 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _uchar2fs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___ulong2fs + .globl ___uchar2fs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_uchar2fs.c: 55: float __uchar2fs (unsigned char uc) { +; ----------------------------------------- +; function __uchar2fs +; ----------------------------------------- +___uchar2fs: +; ../_uchar2fs.c: 56: return __ulong2fs(uc); + clrw x + ld a, (0x03, sp) + ld xl, a + clrw y + pushw x + pushw y + call ___ulong2fs + addw sp, #4 +; ../_uchar2fs.c: 57: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_uchar2fs.lst b/device/lib/stm8/_uchar2fs.lst new file mode 100644 index 0000000..4ba0658 --- /dev/null +++ b/device/lib/stm8/_uchar2fs.lst @@ -0,0 +1,69 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _uchar2fs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___ulong2fs + 12 .globl ___uchar2fs + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_uchar2fs.c: 55: float __uchar2fs (unsigned char uc) { + 51 ; ----------------------------------------- + 52 ; function __uchar2fs + 53 ; ----------------------------------------- + 000000 54 ___uchar2fs: + 55 ; ../_uchar2fs.c: 56: return __ulong2fs(uc); + 000000 5F [ 1] 56 clrw x + 000001 7B 03 [ 1] 57 ld a, (0x03, sp) + 000003 97 [ 1] 58 ld xl, a + 000004 90 5F [ 1] 59 clrw y + 000006 89 [ 2] 60 pushw x + 000007 90 89 [ 2] 61 pushw y + 000009 CDr00r00 [ 4] 62 call ___ulong2fs + 00000C 5B 04 [ 2] 63 addw sp, #4 + 64 ; ../_uchar2fs.c: 57: } + 00000E 81 [ 4] 65 ret + 66 .area CODE + 67 .area CONST + 68 .area INITIALIZER + 69 .area CABS (ABS) diff --git a/device/lib/stm8/_uchar2fs.rel b/device/lib/stm8/_uchar2fs.rel new file mode 100644 index 0000000..c40d565 --- /dev/null +++ b/device/lib/stm8/_uchar2fs.rel @@ -0,0 +1,24 @@ +XH3 +H B areas 3 global symbols +M _uchar2fs +O -mstm8 +S ___ulong2fs Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size F flags 0 addr 0 +S ___uchar2fs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 5F 7B 03 97 90 5F 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 00 +T 00 00 0D 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_uchar2fs.sym b/device/lib/stm8/_uchar2fs.sym new file mode 100644 index 0000000..f856390 --- /dev/null +++ b/device/lib/stm8/_uchar2fs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___uchar2fs 000000 GR + ___ulong2fs ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_uint2fs.asm b/device/lib/stm8/_uint2fs.asm new file mode 100644 index 0000000..5244cd2 --- /dev/null +++ b/device/lib/stm8/_uint2fs.asm @@ -0,0 +1,67 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _uint2fs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___ulong2fs + .globl ___uint2fs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_uint2fs.c: 54: float __uint2fs (unsigned int ui) { +; ----------------------------------------- +; function __uint2fs +; ----------------------------------------- +___uint2fs: +; ../_uint2fs.c: 55: return __ulong2fs(ui); + ldw y, (0x03, sp) + clrw x + pushw y + pushw x + call ___ulong2fs + addw sp, #4 +; ../_uint2fs.c: 56: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_uint2fs.lst b/device/lib/stm8/_uint2fs.lst new file mode 100644 index 0000000..a87c4c2 --- /dev/null +++ b/device/lib/stm8/_uint2fs.lst @@ -0,0 +1,67 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _uint2fs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___ulong2fs + 12 .globl ___uint2fs + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../_uint2fs.c: 54: float __uint2fs (unsigned int ui) { + 51 ; ----------------------------------------- + 52 ; function __uint2fs + 53 ; ----------------------------------------- + 000000 54 ___uint2fs: + 55 ; ../_uint2fs.c: 55: return __ulong2fs(ui); + 000000 16 03 [ 2] 56 ldw y, (0x03, sp) + 000002 5F [ 1] 57 clrw x + 000003 90 89 [ 2] 58 pushw y + 000005 89 [ 2] 59 pushw x + 000006 CDr00r00 [ 4] 60 call ___ulong2fs + 000009 5B 04 [ 2] 61 addw sp, #4 + 62 ; ../_uint2fs.c: 56: } + 00000B 81 [ 4] 63 ret + 64 .area CODE + 65 .area CONST + 66 .area INITIALIZER + 67 .area CABS (ABS) diff --git a/device/lib/stm8/_uint2fs.rel b/device/lib/stm8/_uint2fs.rel new file mode 100644 index 0000000..3eb65b2 --- /dev/null +++ b/device/lib/stm8/_uint2fs.rel @@ -0,0 +1,22 @@ +XH3 +H B areas 3 global symbols +M _uint2fs +O -mstm8 +S ___ulong2fs Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size C flags 0 addr 0 +S ___uint2fs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 16 03 5F 90 89 89 CD 00 00 5B 04 81 +R 00 00 00 09 02 0A 00 00 diff --git a/device/lib/stm8/_uint2fs.sym b/device/lib/stm8/_uint2fs.sym new file mode 100644 index 0000000..0e454a9 --- /dev/null +++ b/device/lib/stm8/_uint2fs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___uint2fs 000000 GR + ___ulong2fs ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/_ulong2fs.asm b/device/lib/stm8/_ulong2fs.asm new file mode 100644 index 0000000..917e9ba --- /dev/null +++ b/device/lib/stm8/_ulong2fs.asm @@ -0,0 +1,152 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _ulong2fs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___ulong2fs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../_ulong2fs.c: 83: float __ulong2fs (unsigned long a ) +; ----------------------------------------- +; function __ulong2fs +; ----------------------------------------- +___ulong2fs: + sub sp, #8 +; ../_ulong2fs.c: 88: if (!a) + ldw x, (0x0d, sp) + jrne 00115$ +; ../_ulong2fs.c: 90: return 0.0; + ldw x, (0x0b, sp) + jrne 00115$ + clrw y + jra 00111$ +; ../_ulong2fs.c: 93: while (a < HIDDEN) +00115$: + ld a, #0x96 +00103$: + ldw x, (0x0b, sp) + cpw x, #0x0080 + jrnc 00118$ +; ../_ulong2fs.c: 95: a <<= 1; + sll (0x0e, sp) + rlc (0x0d, sp) + rlc (0x0c, sp) + rlc (0x0b, sp) +; ../_ulong2fs.c: 96: exp--; + dec a + jra 00103$ +; ../_ulong2fs.c: 99: while (a & NORM) +00118$: +00108$: + tnz (0x0b, sp) + jreq 00110$ +; ../_ulong2fs.c: 102: if (a & 1) + push a + ld a, (0x0f, sp) + srl a + pop a + jrnc 00107$ +; ../_ulong2fs.c: 103: a += 2; + ldw x, (0x0d, sp) + addw x, #0x0002 + ldw y, (0x0b, sp) + jrnc 00150$ + incw y +00150$: + ldw (0x0d, sp), x + ldw (0x0b, sp), y +00107$: +; ../_ulong2fs.c: 104: a >>= 1; + srl (0x0b, sp) + rrc (0x0c, sp) + rrc (0x0d, sp) + rrc (0x0e, sp) +; ../_ulong2fs.c: 105: exp++; + inc a + jra 00108$ +00110$: +; ../_ulong2fs.c: 108: a &= ~HIDDEN ; + push a + ldw y, (0x0e, sp) + ld a, (0x0d, sp) + and a, #0x7f + ld xl, a + ld a, (0x0c, sp) + ld xh, a + pop a + ldw (0x0d, sp), y + ldw (0x0b, sp), x +; ../_ulong2fs.c: 110: fl.l = PACK(0,(unsigned long)exp, a); + clrw x + ld xl, a + clr (0x08, sp) + clr (0x07, sp) + ld a, #0x07 +00151$: + sllw x + dec a + jrne 00151$ + ld a, (0x08, sp) + or a, (0x0e, sp) + ld yl, a + ld a, (0x07, sp) + or a, (0x0d, sp) + ld yh, a + ld a, xl + or a, (0x0c, sp) + rlwa x + or a, (0x0b, sp) + ld xh, a + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../_ulong2fs.c: 112: return (fl.f); + ldw x, (0x03, sp) + ldw y, (0x01, sp) +00111$: +; ../_ulong2fs.c: 113: } + addw sp, #8 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/_ulong2fs.lst b/device/lib/stm8/_ulong2fs.lst new file mode 100644 index 0000000..dd891db --- /dev/null +++ b/device/lib/stm8/_ulong2fs.lst @@ -0,0 +1,152 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _ulong2fs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___ulong2fs + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../_ulong2fs.c: 83: float __ulong2fs (unsigned long a ) + 50 ; ----------------------------------------- + 51 ; function __ulong2fs + 52 ; ----------------------------------------- + 000000 53 ___ulong2fs: + 000000 52 08 [ 2] 54 sub sp, #8 + 55 ; ../_ulong2fs.c: 88: if (!a) + 000002 1E 0D [ 2] 56 ldw x, (0x0d, sp) + 000004 26 08 [ 1] 57 jrne 00115$ + 58 ; ../_ulong2fs.c: 90: return 0.0; + 000006 1E 0B [ 2] 59 ldw x, (0x0b, sp) + 000008 26 04 [ 1] 60 jrne 00115$ + 00000A 90 5F [ 1] 61 clrw y + 00000C 20 70 [ 2] 62 jra 00111$ + 63 ; ../_ulong2fs.c: 93: while (a < HIDDEN) + 00000E 64 00115$: + 00000E A6 96 [ 1] 65 ld a, #0x96 + 000010 66 00103$: + 000010 1E 0B [ 2] 67 ldw x, (0x0b, sp) + 000012 A3 00 80 [ 2] 68 cpw x, #0x0080 + 000015 24 0B [ 1] 69 jrnc 00118$ + 70 ; ../_ulong2fs.c: 95: a <<= 1; + 000017 08 0E [ 1] 71 sll (0x0e, sp) + 000019 09 0D [ 1] 72 rlc (0x0d, sp) + 00001B 09 0C [ 1] 73 rlc (0x0c, sp) + 00001D 09 0B [ 1] 74 rlc (0x0b, sp) + 75 ; ../_ulong2fs.c: 96: exp--; + 00001F 4A [ 1] 76 dec a + 000020 20 EE [ 2] 77 jra 00103$ + 78 ; ../_ulong2fs.c: 99: while (a & NORM) + 000022 79 00118$: + 000022 80 00108$: + 000022 0D 0B [ 1] 81 tnz (0x0b, sp) + 000024 27 21 [ 1] 82 jreq 00110$ + 83 ; ../_ulong2fs.c: 102: if (a & 1) + 000026 88 [ 1] 84 push a + 000027 7B 0F [ 1] 85 ld a, (0x0f, sp) + 000029 44 [ 1] 86 srl a + 00002A 84 [ 1] 87 pop a + 00002B 24 0F [ 1] 88 jrnc 00107$ + 89 ; ../_ulong2fs.c: 103: a += 2; + 00002D 1E 0D [ 2] 90 ldw x, (0x0d, sp) + 00002F 1C 00 02 [ 2] 91 addw x, #0x0002 + 000032 16 0B [ 2] 92 ldw y, (0x0b, sp) + 000034 24 02 [ 1] 93 jrnc 00150$ + 000036 90 5C [ 1] 94 incw y + 000038 95 00150$: + 000038 1F 0D [ 2] 96 ldw (0x0d, sp), x + 00003A 17 0B [ 2] 97 ldw (0x0b, sp), y + 00003C 98 00107$: + 99 ; ../_ulong2fs.c: 104: a >>= 1; + 00003C 04 0B [ 1] 100 srl (0x0b, sp) + 00003E 06 0C [ 1] 101 rrc (0x0c, sp) + 000040 06 0D [ 1] 102 rrc (0x0d, sp) + 000042 06 0E [ 1] 103 rrc (0x0e, sp) + 104 ; ../_ulong2fs.c: 105: exp++; + 000044 4C [ 1] 105 inc a + 000045 20 DB [ 2] 106 jra 00108$ + 000047 107 00110$: + 108 ; ../_ulong2fs.c: 108: a &= ~HIDDEN ; + 000047 88 [ 1] 109 push a + 000048 16 0E [ 2] 110 ldw y, (0x0e, sp) + 00004A 7B 0D [ 1] 111 ld a, (0x0d, sp) + 00004C A4 7F [ 1] 112 and a, #0x7f + 00004E 97 [ 1] 113 ld xl, a + 00004F 7B 0C [ 1] 114 ld a, (0x0c, sp) + 000051 95 [ 1] 115 ld xh, a + 000052 84 [ 1] 116 pop a + 000053 17 0D [ 2] 117 ldw (0x0d, sp), y + 000055 1F 0B [ 2] 118 ldw (0x0b, sp), x + 119 ; ../_ulong2fs.c: 110: fl.l = PACK(0,(unsigned long)exp, a); + 000057 5F [ 1] 120 clrw x + 000058 97 [ 1] 121 ld xl, a + 000059 0F 08 [ 1] 122 clr (0x08, sp) + 00005B 0F 07 [ 1] 123 clr (0x07, sp) + 00005D A6 07 [ 1] 124 ld a, #0x07 + 00005F 125 00151$: + 00005F 58 [ 2] 126 sllw x + 000060 4A [ 1] 127 dec a + 000061 26 FC [ 1] 128 jrne 00151$ + 000063 7B 08 [ 1] 129 ld a, (0x08, sp) + 000065 1A 0E [ 1] 130 or a, (0x0e, sp) + 000067 90 97 [ 1] 131 ld yl, a + 000069 7B 07 [ 1] 132 ld a, (0x07, sp) + 00006B 1A 0D [ 1] 133 or a, (0x0d, sp) + 00006D 90 95 [ 1] 134 ld yh, a + 00006F 9F [ 1] 135 ld a, xl + 000070 1A 0C [ 1] 136 or a, (0x0c, sp) + 000072 02 [ 1] 137 rlwa x + 000073 1A 0B [ 1] 138 or a, (0x0b, sp) + 000075 95 [ 1] 139 ld xh, a + 000076 17 03 [ 2] 140 ldw (0x03, sp), y + 000078 1F 01 [ 2] 141 ldw (0x01, sp), x + 142 ; ../_ulong2fs.c: 112: return (fl.f); + 00007A 1E 03 [ 2] 143 ldw x, (0x03, sp) + 00007C 16 01 [ 2] 144 ldw y, (0x01, sp) + 00007E 145 00111$: + 146 ; ../_ulong2fs.c: 113: } + 00007E 5B 08 [ 2] 147 addw sp, #8 + 000080 81 [ 4] 148 ret + 149 .area CODE + 150 .area CONST + 151 .area INITIALIZER + 152 .area CABS (ABS) diff --git a/device/lib/stm8/_ulong2fs.rel b/device/lib/stm8/_ulong2fs.rel new file mode 100644 index 0000000..a9f6f67 --- /dev/null +++ b/device/lib/stm8/_ulong2fs.rel @@ -0,0 +1,67 @@ +XH3 +H B areas 2 global symbols +M _ulong2fs +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 81 flags 0 addr 0 +S ___ulong2fs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 08 1E 0D 26 08 1E 0B 26 04 90 5F 20 +R 00 00 00 09 +T 00 00 0D 70 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E A6 96 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 1E 0B A3 00 80 24 0B 08 0E 09 0D 09 0C +R 00 00 00 09 +T 00 00 1D 09 0B 4A 20 EE +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 0D 0B 27 21 88 7B 0F 44 84 24 0F 1E 0D +R 00 00 00 09 +T 00 00 2F 1C 00 02 16 0B 24 02 90 5C +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1F 0D 17 0B +R 00 00 00 09 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 04 0B 06 0C 06 0D 06 0E 4C 20 DB +R 00 00 00 09 +T 00 00 47 +R 00 00 00 09 +T 00 00 47 88 16 0E 7B 0D A4 7F 97 7B 0C 95 84 17 +R 00 00 00 09 +T 00 00 54 0D 1F 0B 5F 97 0F 08 0F 07 A6 07 +R 00 00 00 09 +T 00 00 5F +R 00 00 00 09 +T 00 00 5F 58 4A 26 FC 7B 08 1A 0E 90 97 7B 07 1A +R 00 00 00 09 +T 00 00 6C 0D 90 95 9F 1A 0C 02 1A 0B 95 17 03 1F +R 00 00 00 09 +T 00 00 79 01 1E 03 16 01 +R 00 00 00 09 +T 00 00 7E +R 00 00 00 09 +T 00 00 7E 5B 08 81 +R 00 00 00 09 diff --git a/device/lib/stm8/_ulong2fs.sym b/device/lib/stm8/_ulong2fs.sym new file mode 100644 index 0000000..2072ea2 --- /dev/null +++ b/device/lib/stm8/_ulong2fs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___ulong2fs 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 81 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/abs.asm b/device/lib/stm8/abs.asm new file mode 100644 index 0000000..72b51a9 --- /dev/null +++ b/device/lib/stm8/abs.asm @@ -0,0 +1,67 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module abs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _abs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../abs.c: 54: int abs(int j) +; ----------------------------------------- +; function abs +; ----------------------------------------- +_abs: +; ../abs.c: 56: return (j < 0) ? -j : j; + tnz (0x03, sp) + jrpl 00103$ + ldw x, (0x03, sp) + negw x + ret +00103$: + ldw x, (0x03, sp) +; ../abs.c: 57: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/abs.lst b/device/lib/stm8/abs.lst new file mode 100644 index 0000000..b176d8b --- /dev/null +++ b/device/lib/stm8/abs.lst @@ -0,0 +1,67 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module abs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _abs + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../abs.c: 54: int abs(int j) + 50 ; ----------------------------------------- + 51 ; function abs + 52 ; ----------------------------------------- + 000000 53 _abs: + 54 ; ../abs.c: 56: return (j < 0) ? -j : j; + 000000 0D 03 [ 1] 55 tnz (0x03, sp) + 000002 2A 04 [ 1] 56 jrpl 00103$ + 000004 1E 03 [ 2] 57 ldw x, (0x03, sp) + 000006 50 [ 2] 58 negw x + 000007 81 [ 4] 59 ret + 000008 60 00103$: + 000008 1E 03 [ 2] 61 ldw x, (0x03, sp) + 62 ; ../abs.c: 57: } + 00000A 81 [ 4] 63 ret + 64 .area CODE + 65 .area CONST + 66 .area INITIALIZER + 67 .area CABS (ABS) diff --git a/device/lib/stm8/abs.rel b/device/lib/stm8/abs.rel new file mode 100644 index 0000000..a672cef --- /dev/null +++ b/device/lib/stm8/abs.rel @@ -0,0 +1,25 @@ +XH3 +H B areas 2 global symbols +M abs +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size B flags 0 addr 0 +S _abs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 0D 03 2A 04 1E 03 50 81 +R 00 00 00 09 +T 00 00 08 +R 00 00 00 09 +T 00 00 08 1E 03 81 +R 00 00 00 09 diff --git a/device/lib/stm8/abs.sym b/device/lib/stm8/abs.sym new file mode 100644 index 0000000..bd3f17a --- /dev/null +++ b/device/lib/stm8/abs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _abs 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/acosf.asm b/device/lib/stm8/acosf.asm new file mode 100644 index 0000000..3d3cb2a --- /dev/null +++ b/device/lib/stm8/acosf.asm @@ -0,0 +1,112 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module acosf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _asincosf + .globl _acosf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../acosf.c: 36: float acosf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function acosf +; ----------------------------------------- +_acosf: +; ../acosf.c: 38: if (x == 1.0) return 0.0; + clrw x + pushw x + push #0x80 + push #0x3f + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fseq + addw sp, #8 + tnz a + jreq 00108$ + clrw x + clrw y + ret +00108$: +; ../acosf.c: 39: else if (x ==-1.0) return PI; + clrw x + pushw x + push #0x80 + push #0xbf + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fseq + addw sp, #8 + tnz a + jreq 00105$ + ldw x, #0x0fdb + ldw y, #0x4049 + ret +00105$: +; ../acosf.c: 40: else if (x == 0.0) return HALF_PI; + ldw x, (0x05, sp) + jrne 00102$ + ldw x, (0x03, sp) + sllw x + jrne 00102$ + ldw x, #0x0fdb + ldw y, #0x3fc9 + ret +00102$: +; ../acosf.c: 41: else return asincosf(x, true); + push #0x01 + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call _asincosf + addw sp, #5 +; ../acosf.c: 42: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/acosf.lst b/device/lib/stm8/acosf.lst new file mode 100644 index 0000000..f78bba4 --- /dev/null +++ b/device/lib/stm8/acosf.lst @@ -0,0 +1,112 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module acosf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _asincosf + 12 .globl _acosf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../acosf.c: 36: float acosf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function acosf + 53 ; ----------------------------------------- + 000000 54 _acosf: + 55 ; ../acosf.c: 38: if (x == 1.0) return 0.0; + 000000 5F [ 1] 56 clrw x + 000001 89 [ 2] 57 pushw x + 000002 4B 80 [ 1] 58 push #0x80 + 000004 4B 3F [ 1] 59 push #0x3f + 000006 1E 09 [ 2] 60 ldw x, (0x09, sp) + 000008 89 [ 2] 61 pushw x + 000009 1E 09 [ 2] 62 ldw x, (0x09, sp) + 00000B 89 [ 2] 63 pushw x + 00000C CDr00r00 [ 4] 64 call ___fseq + 00000F 5B 08 [ 2] 65 addw sp, #8 + 000011 4D [ 1] 66 tnz a + 000012 27 04 [ 1] 67 jreq 00108$ + 000014 5F [ 1] 68 clrw x + 000015 90 5F [ 1] 69 clrw y + 000017 81 [ 4] 70 ret + 000018 71 00108$: + 72 ; ../acosf.c: 39: else if (x ==-1.0) return PI; + 000018 5F [ 1] 73 clrw x + 000019 89 [ 2] 74 pushw x + 00001A 4B 80 [ 1] 75 push #0x80 + 00001C 4B BF [ 1] 76 push #0xbf + 00001E 1E 09 [ 2] 77 ldw x, (0x09, sp) + 000020 89 [ 2] 78 pushw x + 000021 1E 09 [ 2] 79 ldw x, (0x09, sp) + 000023 89 [ 2] 80 pushw x + 000024 CDr00r00 [ 4] 81 call ___fseq + 000027 5B 08 [ 2] 82 addw sp, #8 + 000029 4D [ 1] 83 tnz a + 00002A 27 08 [ 1] 84 jreq 00105$ + 00002C AE 0F DB [ 2] 85 ldw x, #0x0fdb + 00002F 90 AE 40 49 [ 2] 86 ldw y, #0x4049 + 000033 81 [ 4] 87 ret + 000034 88 00105$: + 89 ; ../acosf.c: 40: else if (x == 0.0) return HALF_PI; + 000034 1E 05 [ 2] 90 ldw x, (0x05, sp) + 000036 26 0D [ 1] 91 jrne 00102$ + 000038 1E 03 [ 2] 92 ldw x, (0x03, sp) + 00003A 58 [ 2] 93 sllw x + 00003B 26 08 [ 1] 94 jrne 00102$ + 00003D AE 0F DB [ 2] 95 ldw x, #0x0fdb + 000040 90 AE 3F C9 [ 2] 96 ldw y, #0x3fc9 + 000044 81 [ 4] 97 ret + 000045 98 00102$: + 99 ; ../acosf.c: 41: else return asincosf(x, true); + 000045 4B 01 [ 1] 100 push #0x01 + 000047 1E 06 [ 2] 101 ldw x, (0x06, sp) + 000049 89 [ 2] 102 pushw x + 00004A 1E 06 [ 2] 103 ldw x, (0x06, sp) + 00004C 89 [ 2] 104 pushw x + 00004D CDr00r00 [ 4] 105 call _asincosf + 000050 5B 05 [ 2] 106 addw sp, #5 + 107 ; ../acosf.c: 42: } + 000052 81 [ 4] 108 ret + 109 .area CODE + 110 .area CONST + 111 .area INITIALIZER + 112 .area CABS (ABS) diff --git a/device/lib/stm8/acosf.rel b/device/lib/stm8/acosf.rel new file mode 100644 index 0000000..74af2c5 --- /dev/null +++ b/device/lib/stm8/acosf.rel @@ -0,0 +1,45 @@ +XH3 +H B areas 4 global symbols +M acosf +O -mstm8 +S ___fseq Ref000000 +S .__.ABS. Def000000 +S _asincosf Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 53 flags 0 addr 0 +S _acosf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 5F 89 4B 80 4B 3F 1E 09 89 1E 09 89 CD +R 00 00 00 09 +T 00 00 0D 00 00 5B 08 4D 27 04 5F 90 5F 81 +R 00 00 00 09 02 03 00 00 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 5F 89 4B 80 4B BF 1E 09 89 1E 09 89 CD +R 00 00 00 09 +T 00 00 25 00 00 5B 08 4D 27 08 AE 0F DB 90 AE +R 00 00 00 09 02 03 00 00 +T 00 00 31 40 49 81 +R 00 00 00 09 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 1E 05 26 0D 1E 03 58 26 08 AE 0F DB 90 +R 00 00 00 09 +T 00 00 41 AE 3F C9 81 +R 00 00 00 09 +T 00 00 45 +R 00 00 00 09 +T 00 00 45 4B 01 1E 06 89 1E 06 89 CD 00 00 5B 05 +R 00 00 00 09 02 0C 00 02 +T 00 00 52 81 +R 00 00 00 09 diff --git a/device/lib/stm8/acosf.sym b/device/lib/stm8/acosf.sym new file mode 100644 index 0000000..06f37f5 --- /dev/null +++ b/device/lib/stm8/acosf.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fseq ****** GX + 9 _acosf 000000 GR + _asincosf ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 53 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/aligned_alloc.asm b/device/lib/stm8/aligned_alloc.asm new file mode 100644 index 0000000..ab3a682 --- /dev/null +++ b/device/lib/stm8/aligned_alloc.asm @@ -0,0 +1,65 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module aligned_alloc + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _malloc + .globl _aligned_alloc +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ./../../include/stdlib.h: 86: inline void *aligned_alloc(size_t alignment, size_t size) +; ----------------------------------------- +; function aligned_alloc +; ----------------------------------------- +_aligned_alloc: +; ./../../include/stdlib.h: 89: return malloc(size); + ldw x, (0x05, sp) + pushw x + call _malloc + addw sp, #2 +; ./../../include/stdlib.h: 90: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/aligned_alloc.lst b/device/lib/stm8/aligned_alloc.lst new file mode 100644 index 0000000..199cfe9 --- /dev/null +++ b/device/lib/stm8/aligned_alloc.lst @@ -0,0 +1,65 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module aligned_alloc + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _malloc + 12 .globl _aligned_alloc + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ./../../include/stdlib.h: 86: inline void *aligned_alloc(size_t alignment, size_t size) + 51 ; ----------------------------------------- + 52 ; function aligned_alloc + 53 ; ----------------------------------------- + 000000 54 _aligned_alloc: + 55 ; ./../../include/stdlib.h: 89: return malloc(size); + 000000 1E 05 [ 2] 56 ldw x, (0x05, sp) + 000002 89 [ 2] 57 pushw x + 000003 CDr00r00 [ 4] 58 call _malloc + 000006 5B 02 [ 2] 59 addw sp, #2 + 60 ; ./../../include/stdlib.h: 90: } + 000008 81 [ 4] 61 ret + 62 .area CODE + 63 .area CONST + 64 .area INITIALIZER + 65 .area CABS (ABS) diff --git a/device/lib/stm8/aligned_alloc.rel b/device/lib/stm8/aligned_alloc.rel new file mode 100644 index 0000000..7cbf738 --- /dev/null +++ b/device/lib/stm8/aligned_alloc.rel @@ -0,0 +1,22 @@ +XH3 +H B areas 3 global symbols +M aligned_alloc +O -mstm8 +S _malloc Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 9 flags 0 addr 0 +S _aligned_alloc Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 05 89 CD 00 00 5B 02 81 +R 00 00 00 09 02 07 00 00 diff --git a/device/lib/stm8/aligned_alloc.sym b/device/lib/stm8/aligned_alloc.sym new file mode 100644 index 0000000..eeafd03 --- /dev/null +++ b/device/lib/stm8/aligned_alloc.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _aligned_alloc 000000 GR + _malloc ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 9 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/asincosf.asm b/device/lib/stm8/asincosf.asm new file mode 100644 index 0000000..ecb906f --- /dev/null +++ b/device/lib/stm8/asincosf.asm @@ -0,0 +1,439 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module asincosf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _asincosf + .globl _ldexpf + .globl _fabsf + .globl _sqrtf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../asincosf.c: 47: float asincosf(float x, bool isacos) +; ----------------------------------------- +; function asincosf +; ----------------------------------------- +_asincosf: + sub sp, #17 +; ../asincosf.c: 51: bool quartPI = isacos; + ld a, (0x18, sp) + ld (0x11, sp), a +; ../asincosf.c: 56: y = fabsf(x); + ldw x, (0x16, sp) + pushw x + ldw x, (0x16, sp) + pushw x + call _fabsf + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../asincosf.c: 57: if (y < EPS) + clrw x + pushw x + push #0x80 + push #0x39 + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fslt + addw sp, #8 + ld (0x10, sp), a + jreq 00107$ +; ../asincosf.c: 59: r = y; + ldw y, (0x03, sp) + ldw (0x0f, sp), y + ldw y, (0x01, sp) + ldw (0x0d, sp), y + jp 00108$ +00107$: +; ../asincosf.c: 63: if (y > 0.5) + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + clrw x + pushw x + push #0x00 + push #0x3f + call ___fslt + addw sp, #8 + tnz a + jreq 00104$ +; ../asincosf.c: 65: quartPI = !isacos; + ld a, (0x11, sp) + sub a, #0x01 + clr a + rlc a + ld (0x11, sp), a +; ../asincosf.c: 66: if (y > 1.0) + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + clrw x + pushw x + push #0x80 + push #0x3f + call ___fslt + addw sp, #8 + tnz a + jreq 00102$ +; ../asincosf.c: 68: errno = EDOM; + ldw x, #0x0021 + ldw _errno+0, x +; ../asincosf.c: 69: return 0.0; + clrw x + clrw y + jp 00117$ +00102$: +; ../asincosf.c: 71: g = (0.5 - y) + 0.5; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + clrw x + pushw x + push #0x80 + push #0x3f + call ___fssub + addw sp, #8 +; ../asincosf.c: 72: g = ldexpf(g, -1); + push #0xff + push #0xff + pushw x + pushw y + call _ldexpf + addw sp, #6 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../asincosf.c: 73: y = sqrtf(g); + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call _sqrtf + addw sp, #4 +; ../asincosf.c: 74: y = -(y + y); + pushw x + pushw y + pushw x + pushw y + call ___fsadd + addw sp, #8 + sllw y + ccf + rrcw y + ldw (0x03, sp), x + ldw (0x01, sp), y + jra 00105$ +00104$: +; ../asincosf.c: 78: g = y * y; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x07, sp), x + ldw (0x05, sp), y +00105$: +; ../asincosf.c: 80: r = y + y * ((P(g) * g) / Q(g)); + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + push #0x65 + push #0x20 + push #0x01 + push #0xbf + call ___fsmul + addw sp, #8 + push #0x6b + push #0x16 + push #0x6f + push #0x3f + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0f, sp), x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x13, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y + push #0x0b + push #0x8d + push #0xb1 + push #0xc0 + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0f, sp), x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x13, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + push #0xf0 + push #0x50 + push #0xb3 + push #0x40 + pushw x + pushw y + call ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0f, sp), x + ldw (0x0d, sp), y +00108$: +; ../asincosf.c: 82: i = quartPI; + ld a, (0x11, sp) +; ../asincosf.c: 85: if (x < 0.0) + push a + clrw x + pushw x + clrw x + pushw x + ldw x, (0x1b, sp) + pushw x + ldw x, (0x1b, sp) + pushw x +; ../asincosf.c: 86: r = (b[i] + r) + b[i]; + call ___fslt + addw sp, #8 + ld (0x12, sp), a + pop a + exg a, xl + ld a, #0x04 + exg a, xl + mul x, a + ldw (0x0b, sp), x +; ../asincosf.c: 83: if (isacos) + tnz (0x18, sp) + jrne 00152$ + jp 00115$ +00152$: +; ../asincosf.c: 85: if (x < 0.0) + tnz (0x11, sp) + jreq 00110$ +; ../asincosf.c: 86: r = (b[i] + r) + b[i]; + ldw x, (0x0b, sp) + addw x, #(_asincosf_b_65536_26 + 0) + ldw y, x + ldw y, (0x2, y) + ldw (0x0b, sp), y + ldw x, (x) + ldw (0x09, sp), x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x12, sp), x + ldw (0x10, sp), y + popw y + ldw y, (0x0b, sp) + pushw y + ldw y, (0x0b, sp) + pushw y + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0f, sp), x + ldw (0x0d, sp), y + jp 00116$ +00110$: +; ../asincosf.c: 88: r = (a[i] - r) + a[i]; + ldw x, (0x0b, sp) + addw x, #(_asincosf_a_65536_26 + 0) + ldw y, x + ldw y, (0x2, y) + ldw (0x0b, sp), y + ldw x, (x) + ldw (0x09, sp), x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x12, sp), x + ldw (0x10, sp), y + popw y + ldw y, (0x0b, sp) + pushw y + ldw y, (0x0b, sp) + pushw y + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0f, sp), x + ldw (0x0d, sp), y + jra 00116$ +00115$: +; ../asincosf.c: 92: r = (a[i] + r) + a[i]; + ldw x, (0x0b, sp) + addw x, #(_asincosf_a_65536_26 + 0) + ldw y, x + ldw y, (0x2, y) + ldw (0x0b, sp), y + ldw x, (x) + ldw (0x09, sp), x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x11, sp), x + ldw (0x0f, sp), y + popw y + ldw y, (0x0b, sp) + pushw y + ldw y, (0x0b, sp) + pushw y + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0f, sp), x + ldw (0x0d, sp), y +; ../asincosf.c: 93: if (x < 0.0) + tnz (0x11, sp) + jreq 00116$ +; ../asincosf.c: 94: r = -r; + ldw y, (0x0f, sp) + ldw (0x0a, sp), y + ld a, (0x0e, sp) + ld (0x09, sp), a + ld a, (0x0d, sp) + xor a, #0x80 + ld (0x0d, sp), a + ldw y, (0x0a, sp) + ldw (0x0f, sp), y + ld a, (0x09, sp) + ld (0x0e, sp), a +00116$: +; ../asincosf.c: 96: return r; + ldw x, (0x0f, sp) + ldw y, (0x0d, sp) +00117$: +; ../asincosf.c: 97: } + addw sp, #17 + ret + .area CODE + .area CONST +_asincosf_a_65536_26: + .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00 + .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01 +_asincosf_b_65536_26: + .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00 + .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01 + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/asincosf.lst b/device/lib/stm8/asincosf.lst new file mode 100644 index 0000000..0988be6 --- /dev/null +++ b/device/lib/stm8/asincosf.lst @@ -0,0 +1,439 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module asincosf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _asincosf + 12 .globl _ldexpf + 13 .globl _fabsf + 14 .globl _sqrtf + 15 ;-------------------------------------------------------- + 16 ; ram data + 17 ;-------------------------------------------------------- + 18 .area DATA + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../asincosf.c: 47: float asincosf(float x, bool isacos) + 53 ; ----------------------------------------- + 54 ; function asincosf + 55 ; ----------------------------------------- + 000000 56 _asincosf: + 000000 52 11 [ 2] 57 sub sp, #17 + 58 ; ../asincosf.c: 51: bool quartPI = isacos; + 000002 7B 18 [ 1] 59 ld a, (0x18, sp) + 000004 6B 11 [ 1] 60 ld (0x11, sp), a + 61 ; ../asincosf.c: 56: y = fabsf(x); + 000006 1E 16 [ 2] 62 ldw x, (0x16, sp) + 000008 89 [ 2] 63 pushw x + 000009 1E 16 [ 2] 64 ldw x, (0x16, sp) + 00000B 89 [ 2] 65 pushw x + 00000C CDr00r00 [ 4] 66 call _fabsf + 00000F 5B 04 [ 2] 67 addw sp, #4 + 000011 1F 03 [ 2] 68 ldw (0x03, sp), x + 000013 17 01 [ 2] 69 ldw (0x01, sp), y + 70 ; ../asincosf.c: 57: if (y < EPS) + 000015 5F [ 1] 71 clrw x + 000016 89 [ 2] 72 pushw x + 000017 4B 80 [ 1] 73 push #0x80 + 000019 4B 39 [ 1] 74 push #0x39 + 00001B 1E 07 [ 2] 75 ldw x, (0x07, sp) + 00001D 89 [ 2] 76 pushw x + 00001E 1E 07 [ 2] 77 ldw x, (0x07, sp) + 000020 89 [ 2] 78 pushw x + 000021 CDr00r00 [ 4] 79 call ___fslt + 000024 5B 08 [ 2] 80 addw sp, #8 + 000026 6B 10 [ 1] 81 ld (0x10, sp), a + 000028 27 0B [ 1] 82 jreq 00107$ + 83 ; ../asincosf.c: 59: r = y; + 00002A 16 03 [ 2] 84 ldw y, (0x03, sp) + 00002C 17 0F [ 2] 85 ldw (0x0f, sp), y + 00002E 16 01 [ 2] 86 ldw y, (0x01, sp) + 000030 17 0D [ 2] 87 ldw (0x0d, sp), y + 000032 CCr01r64 [ 2] 88 jp 00108$ + 000035 89 00107$: + 90 ; ../asincosf.c: 63: if (y > 0.5) + 000035 1E 03 [ 2] 91 ldw x, (0x03, sp) + 000037 89 [ 2] 92 pushw x + 000038 1E 03 [ 2] 93 ldw x, (0x03, sp) + 00003A 89 [ 2] 94 pushw x + 00003B 5F [ 1] 95 clrw x + 00003C 89 [ 2] 96 pushw x + 00003D 4B 00 [ 1] 97 push #0x00 + 00003F 4B 3F [ 1] 98 push #0x3f + 000041 CDr00r00 [ 4] 99 call ___fslt + 000044 5B 08 [ 2] 100 addw sp, #8 + 000046 4D [ 1] 101 tnz a + 000047 27 6A [ 1] 102 jreq 00104$ + 103 ; ../asincosf.c: 65: quartPI = !isacos; + 000049 7B 11 [ 1] 104 ld a, (0x11, sp) + 00004B A0 01 [ 1] 105 sub a, #0x01 + 00004D 4F [ 1] 106 clr a + 00004E 49 [ 1] 107 rlc a + 00004F 6B 11 [ 1] 108 ld (0x11, sp), a + 109 ; ../asincosf.c: 66: if (y > 1.0) + 000051 1E 03 [ 2] 110 ldw x, (0x03, sp) + 000053 89 [ 2] 111 pushw x + 000054 1E 03 [ 2] 112 ldw x, (0x03, sp) + 000056 89 [ 2] 113 pushw x + 000057 5F [ 1] 114 clrw x + 000058 89 [ 2] 115 pushw x + 000059 4B 80 [ 1] 116 push #0x80 + 00005B 4B 3F [ 1] 117 push #0x3f + 00005D CDr00r00 [ 4] 118 call ___fslt + 000060 5B 08 [ 2] 119 addw sp, #8 + 000062 4D [ 1] 120 tnz a + 000063 27 0C [ 1] 121 jreq 00102$ + 122 ; ../asincosf.c: 68: errno = EDOM; + 000065 AE 00 21 [ 2] 123 ldw x, #0x0021 + 000068 CFu00u00 [ 2] 124 ldw _errno+0, x + 125 ; ../asincosf.c: 69: return 0.0; + 00006B 5F [ 1] 126 clrw x + 00006C 90 5F [ 1] 127 clrw y + 00006E CCr02r6B [ 2] 128 jp 00117$ + 000071 129 00102$: + 130 ; ../asincosf.c: 71: g = (0.5 - y) + 0.5; + 000071 1E 03 [ 2] 131 ldw x, (0x03, sp) + 000073 89 [ 2] 132 pushw x + 000074 1E 03 [ 2] 133 ldw x, (0x03, sp) + 000076 89 [ 2] 134 pushw x + 000077 5F [ 1] 135 clrw x + 000078 89 [ 2] 136 pushw x + 000079 4B 80 [ 1] 137 push #0x80 + 00007B 4B 3F [ 1] 138 push #0x3f + 00007D CDr00r00 [ 4] 139 call ___fssub + 000080 5B 08 [ 2] 140 addw sp, #8 + 141 ; ../asincosf.c: 72: g = ldexpf(g, -1); + 000082 4B FF [ 1] 142 push #0xff + 000084 4B FF [ 1] 143 push #0xff + 000086 89 [ 2] 144 pushw x + 000087 90 89 [ 2] 145 pushw y + 000089 CDr00r00 [ 4] 146 call _ldexpf + 00008C 5B 06 [ 2] 147 addw sp, #6 + 00008E 1F 07 [ 2] 148 ldw (0x07, sp), x + 000090 17 05 [ 2] 149 ldw (0x05, sp), y + 150 ; ../asincosf.c: 73: y = sqrtf(g); + 000092 1E 07 [ 2] 151 ldw x, (0x07, sp) + 000094 89 [ 2] 152 pushw x + 000095 1E 07 [ 2] 153 ldw x, (0x07, sp) + 000097 89 [ 2] 154 pushw x + 000098 CDr00r00 [ 4] 155 call _sqrtf + 00009B 5B 04 [ 2] 156 addw sp, #4 + 157 ; ../asincosf.c: 74: y = -(y + y); + 00009D 89 [ 2] 158 pushw x + 00009E 90 89 [ 2] 159 pushw y + 0000A0 89 [ 2] 160 pushw x + 0000A1 90 89 [ 2] 161 pushw y + 0000A3 CDr00r00 [ 4] 162 call ___fsadd + 0000A6 5B 08 [ 2] 163 addw sp, #8 + 0000A8 90 58 [ 2] 164 sllw y + 0000AA 8C [ 1] 165 ccf + 0000AB 90 56 [ 2] 166 rrcw y + 0000AD 1F 03 [ 2] 167 ldw (0x03, sp), x + 0000AF 17 01 [ 2] 168 ldw (0x01, sp), y + 0000B1 20 15 [ 2] 169 jra 00105$ + 0000B3 170 00104$: + 171 ; ../asincosf.c: 78: g = y * y; + 0000B3 1E 03 [ 2] 172 ldw x, (0x03, sp) + 0000B5 89 [ 2] 173 pushw x + 0000B6 1E 03 [ 2] 174 ldw x, (0x03, sp) + 0000B8 89 [ 2] 175 pushw x + 0000B9 1E 07 [ 2] 176 ldw x, (0x07, sp) + 0000BB 89 [ 2] 177 pushw x + 0000BC 1E 07 [ 2] 178 ldw x, (0x07, sp) + 0000BE 89 [ 2] 179 pushw x + 0000BF CDr00r00 [ 4] 180 call ___fsmul + 0000C2 5B 08 [ 2] 181 addw sp, #8 + 0000C4 1F 07 [ 2] 182 ldw (0x07, sp), x + 0000C6 17 05 [ 2] 183 ldw (0x05, sp), y + 0000C8 184 00105$: + 185 ; ../asincosf.c: 80: r = y + y * ((P(g) * g) / Q(g)); + 0000C8 1E 07 [ 2] 186 ldw x, (0x07, sp) + 0000CA 89 [ 2] 187 pushw x + 0000CB 1E 07 [ 2] 188 ldw x, (0x07, sp) + 0000CD 89 [ 2] 189 pushw x + 0000CE 4B 65 [ 1] 190 push #0x65 + 0000D0 4B 20 [ 1] 191 push #0x20 + 0000D2 4B 01 [ 1] 192 push #0x01 + 0000D4 4B BF [ 1] 193 push #0xbf + 0000D6 CDr00r00 [ 4] 194 call ___fsmul + 0000D9 5B 08 [ 2] 195 addw sp, #8 + 0000DB 4B 6B [ 1] 196 push #0x6b + 0000DD 4B 16 [ 1] 197 push #0x16 + 0000DF 4B 6F [ 1] 198 push #0x6f + 0000E1 4B 3F [ 1] 199 push #0x3f + 0000E3 89 [ 2] 200 pushw x + 0000E4 90 89 [ 2] 201 pushw y + 0000E6 CDr00r00 [ 4] 202 call ___fsadd + 0000E9 5B 08 [ 2] 203 addw sp, #8 + 0000EB 1F 0F [ 2] 204 ldw (0x0f, sp), x + 0000ED 1E 07 [ 2] 205 ldw x, (0x07, sp) + 0000EF 89 [ 2] 206 pushw x + 0000F0 1E 07 [ 2] 207 ldw x, (0x07, sp) + 0000F2 89 [ 2] 208 pushw x + 0000F3 1E 13 [ 2] 209 ldw x, (0x13, sp) + 0000F5 89 [ 2] 210 pushw x + 0000F6 90 89 [ 2] 211 pushw y + 0000F8 CDr00r00 [ 4] 212 call ___fsmul + 0000FB 5B 08 [ 2] 213 addw sp, #8 + 0000FD 1F 0B [ 2] 214 ldw (0x0b, sp), x + 0000FF 17 09 [ 2] 215 ldw (0x09, sp), y + 000101 4B 0B [ 1] 216 push #0x0b + 000103 4B 8D [ 1] 217 push #0x8d + 000105 4B B1 [ 1] 218 push #0xb1 + 000107 4B C0 [ 1] 219 push #0xc0 + 000109 1E 0B [ 2] 220 ldw x, (0x0b, sp) + 00010B 89 [ 2] 221 pushw x + 00010C 1E 0B [ 2] 222 ldw x, (0x0b, sp) + 00010E 89 [ 2] 223 pushw x + 00010F CDr00r00 [ 4] 224 call ___fsadd + 000112 5B 08 [ 2] 225 addw sp, #8 + 000114 1F 0F [ 2] 226 ldw (0x0f, sp), x + 000116 1E 07 [ 2] 227 ldw x, (0x07, sp) + 000118 89 [ 2] 228 pushw x + 000119 1E 07 [ 2] 229 ldw x, (0x07, sp) + 00011B 89 [ 2] 230 pushw x + 00011C 1E 13 [ 2] 231 ldw x, (0x13, sp) + 00011E 89 [ 2] 232 pushw x + 00011F 90 89 [ 2] 233 pushw y + 000121 CDr00r00 [ 4] 234 call ___fsmul + 000124 5B 08 [ 2] 235 addw sp, #8 + 000126 4B F0 [ 1] 236 push #0xf0 + 000128 4B 50 [ 1] 237 push #0x50 + 00012A 4B B3 [ 1] 238 push #0xb3 + 00012C 4B 40 [ 1] 239 push #0x40 + 00012E 89 [ 2] 240 pushw x + 00012F 90 89 [ 2] 241 pushw y + 000131 CDr00r00 [ 4] 242 call ___fsadd + 000134 5B 08 [ 2] 243 addw sp, #8 + 000136 89 [ 2] 244 pushw x + 000137 90 89 [ 2] 245 pushw y + 000139 1E 0F [ 2] 246 ldw x, (0x0f, sp) + 00013B 89 [ 2] 247 pushw x + 00013C 1E 0F [ 2] 248 ldw x, (0x0f, sp) + 00013E 89 [ 2] 249 pushw x + 00013F CDr00r00 [ 4] 250 call ___fsdiv + 000142 5B 08 [ 2] 251 addw sp, #8 + 000144 89 [ 2] 252 pushw x + 000145 90 89 [ 2] 253 pushw y + 000147 1E 07 [ 2] 254 ldw x, (0x07, sp) + 000149 89 [ 2] 255 pushw x + 00014A 1E 07 [ 2] 256 ldw x, (0x07, sp) + 00014C 89 [ 2] 257 pushw x + 00014D CDr00r00 [ 4] 258 call ___fsmul + 000150 5B 08 [ 2] 259 addw sp, #8 + 000152 89 [ 2] 260 pushw x + 000153 90 89 [ 2] 261 pushw y + 000155 1E 07 [ 2] 262 ldw x, (0x07, sp) + 000157 89 [ 2] 263 pushw x + 000158 1E 07 [ 2] 264 ldw x, (0x07, sp) + 00015A 89 [ 2] 265 pushw x + 00015B CDr00r00 [ 4] 266 call ___fsadd + 00015E 5B 08 [ 2] 267 addw sp, #8 + 000160 1F 0F [ 2] 268 ldw (0x0f, sp), x + 000162 17 0D [ 2] 269 ldw (0x0d, sp), y + 000164 270 00108$: + 271 ; ../asincosf.c: 82: i = quartPI; + 000164 7B 11 [ 1] 272 ld a, (0x11, sp) + 273 ; ../asincosf.c: 85: if (x < 0.0) + 000166 88 [ 1] 274 push a + 000167 5F [ 1] 275 clrw x + 000168 89 [ 2] 276 pushw x + 000169 5F [ 1] 277 clrw x + 00016A 89 [ 2] 278 pushw x + 00016B 1E 1B [ 2] 279 ldw x, (0x1b, sp) + 00016D 89 [ 2] 280 pushw x + 00016E 1E 1B [ 2] 281 ldw x, (0x1b, sp) + 000170 89 [ 2] 282 pushw x + 283 ; ../asincosf.c: 86: r = (b[i] + r) + b[i]; + 000171 CDr00r00 [ 4] 284 call ___fslt + 000174 5B 08 [ 2] 285 addw sp, #8 + 000176 6B 12 [ 1] 286 ld (0x12, sp), a + 000178 84 [ 1] 287 pop a + 000179 41 [ 1] 288 exg a, xl + 00017A A6 04 [ 1] 289 ld a, #0x04 + 00017C 41 [ 1] 290 exg a, xl + 00017D 42 [ 4] 291 mul x, a + 00017E 1F 0B [ 2] 292 ldw (0x0b, sp), x + 293 ; ../asincosf.c: 83: if (isacos) + 000180 0D 18 [ 1] 294 tnz (0x18, sp) + 000182 26 03 [ 1] 295 jrne 00152$ + 000184 CCr02r0E [ 2] 296 jp 00115$ + 000187 297 00152$: + 298 ; ../asincosf.c: 85: if (x < 0.0) + 000187 0D 11 [ 1] 299 tnz (0x11, sp) + 000189 27 42 [ 1] 300 jreq 00110$ + 301 ; ../asincosf.c: 86: r = (b[i] + r) + b[i]; + 00018B 1E 0B [ 2] 302 ldw x, (0x0b, sp) + 00018D 1Cr00r08 [ 2] 303 addw x, #(_asincosf_b_65536_26 + 0) + 000190 90 93 [ 1] 304 ldw y, x + 000192 90 EE 02 [ 2] 305 ldw y, (0x2, y) + 000195 17 0B [ 2] 306 ldw (0x0b, sp), y + 000197 FE [ 2] 307 ldw x, (x) + 000198 1F 09 [ 2] 308 ldw (0x09, sp), x + 00019A 90 89 [ 2] 309 pushw y + 00019C 1E 11 [ 2] 310 ldw x, (0x11, sp) + 00019E 89 [ 2] 311 pushw x + 00019F 1E 11 [ 2] 312 ldw x, (0x11, sp) + 0001A1 89 [ 2] 313 pushw x + 0001A2 1E 11 [ 2] 314 ldw x, (0x11, sp) + 0001A4 89 [ 2] 315 pushw x + 0001A5 1E 11 [ 2] 316 ldw x, (0x11, sp) + 0001A7 89 [ 2] 317 pushw x + 0001A8 CDr00r00 [ 4] 318 call ___fsadd + 0001AB 5B 08 [ 2] 319 addw sp, #8 + 0001AD 1F 12 [ 2] 320 ldw (0x12, sp), x + 0001AF 17 10 [ 2] 321 ldw (0x10, sp), y + 0001B1 90 85 [ 2] 322 popw y + 0001B3 16 0B [ 2] 323 ldw y, (0x0b, sp) + 0001B5 90 89 [ 2] 324 pushw y + 0001B7 16 0B [ 2] 325 ldw y, (0x0b, sp) + 0001B9 90 89 [ 2] 326 pushw y + 0001BB 1E 14 [ 2] 327 ldw x, (0x14, sp) + 0001BD 89 [ 2] 328 pushw x + 0001BE 1E 14 [ 2] 329 ldw x, (0x14, sp) + 0001C0 89 [ 2] 330 pushw x + 0001C1 CDr00r00 [ 4] 331 call ___fsadd + 0001C4 5B 08 [ 2] 332 addw sp, #8 + 0001C6 1F 0F [ 2] 333 ldw (0x0f, sp), x + 0001C8 17 0D [ 2] 334 ldw (0x0d, sp), y + 0001CA CCr02r67 [ 2] 335 jp 00116$ + 0001CD 336 00110$: + 337 ; ../asincosf.c: 88: r = (a[i] - r) + a[i]; + 0001CD 1E 0B [ 2] 338 ldw x, (0x0b, sp) + 0001CF 1Cr00r00 [ 2] 339 addw x, #(_asincosf_a_65536_26 + 0) + 0001D2 90 93 [ 1] 340 ldw y, x + 0001D4 90 EE 02 [ 2] 341 ldw y, (0x2, y) + 0001D7 17 0B [ 2] 342 ldw (0x0b, sp), y + 0001D9 FE [ 2] 343 ldw x, (x) + 0001DA 1F 09 [ 2] 344 ldw (0x09, sp), x + 0001DC 90 89 [ 2] 345 pushw y + 0001DE 1E 11 [ 2] 346 ldw x, (0x11, sp) + 0001E0 89 [ 2] 347 pushw x + 0001E1 1E 11 [ 2] 348 ldw x, (0x11, sp) + 0001E3 89 [ 2] 349 pushw x + 0001E4 1E 11 [ 2] 350 ldw x, (0x11, sp) + 0001E6 89 [ 2] 351 pushw x + 0001E7 1E 11 [ 2] 352 ldw x, (0x11, sp) + 0001E9 89 [ 2] 353 pushw x + 0001EA CDr00r00 [ 4] 354 call ___fssub + 0001ED 5B 08 [ 2] 355 addw sp, #8 + 0001EF 1F 12 [ 2] 356 ldw (0x12, sp), x + 0001F1 17 10 [ 2] 357 ldw (0x10, sp), y + 0001F3 90 85 [ 2] 358 popw y + 0001F5 16 0B [ 2] 359 ldw y, (0x0b, sp) + 0001F7 90 89 [ 2] 360 pushw y + 0001F9 16 0B [ 2] 361 ldw y, (0x0b, sp) + 0001FB 90 89 [ 2] 362 pushw y + 0001FD 1E 14 [ 2] 363 ldw x, (0x14, sp) + 0001FF 89 [ 2] 364 pushw x + 000200 1E 14 [ 2] 365 ldw x, (0x14, sp) + 000202 89 [ 2] 366 pushw x + 000203 CDr00r00 [ 4] 367 call ___fsadd + 000206 5B 08 [ 2] 368 addw sp, #8 + 000208 1F 0F [ 2] 369 ldw (0x0f, sp), x + 00020A 17 0D [ 2] 370 ldw (0x0d, sp), y + 00020C 20 59 [ 2] 371 jra 00116$ + 00020E 372 00115$: + 373 ; ../asincosf.c: 92: r = (a[i] + r) + a[i]; + 00020E 1E 0B [ 2] 374 ldw x, (0x0b, sp) + 000210 1Cr00r00 [ 2] 375 addw x, #(_asincosf_a_65536_26 + 0) + 000213 90 93 [ 1] 376 ldw y, x + 000215 90 EE 02 [ 2] 377 ldw y, (0x2, y) + 000218 17 0B [ 2] 378 ldw (0x0b, sp), y + 00021A FE [ 2] 379 ldw x, (x) + 00021B 1F 09 [ 2] 380 ldw (0x09, sp), x + 00021D 90 89 [ 2] 381 pushw y + 00021F 1E 11 [ 2] 382 ldw x, (0x11, sp) + 000221 89 [ 2] 383 pushw x + 000222 1E 11 [ 2] 384 ldw x, (0x11, sp) + 000224 89 [ 2] 385 pushw x + 000225 1E 11 [ 2] 386 ldw x, (0x11, sp) + 000227 89 [ 2] 387 pushw x + 000228 1E 11 [ 2] 388 ldw x, (0x11, sp) + 00022A 89 [ 2] 389 pushw x + 00022B CDr00r00 [ 4] 390 call ___fsadd + 00022E 5B 08 [ 2] 391 addw sp, #8 + 000230 1F 11 [ 2] 392 ldw (0x11, sp), x + 000232 17 0F [ 2] 393 ldw (0x0f, sp), y + 000234 90 85 [ 2] 394 popw y + 000236 16 0B [ 2] 395 ldw y, (0x0b, sp) + 000238 90 89 [ 2] 396 pushw y + 00023A 16 0B [ 2] 397 ldw y, (0x0b, sp) + 00023C 90 89 [ 2] 398 pushw y + 00023E 1E 13 [ 2] 399 ldw x, (0x13, sp) + 000240 89 [ 2] 400 pushw x + 000241 1E 13 [ 2] 401 ldw x, (0x13, sp) + 000243 89 [ 2] 402 pushw x + 000244 CDr00r00 [ 4] 403 call ___fsadd + 000247 5B 08 [ 2] 404 addw sp, #8 + 000249 1F 0F [ 2] 405 ldw (0x0f, sp), x + 00024B 17 0D [ 2] 406 ldw (0x0d, sp), y + 407 ; ../asincosf.c: 93: if (x < 0.0) + 00024D 0D 11 [ 1] 408 tnz (0x11, sp) + 00024F 27 16 [ 1] 409 jreq 00116$ + 410 ; ../asincosf.c: 94: r = -r; + 000251 16 0F [ 2] 411 ldw y, (0x0f, sp) + 000253 17 0A [ 2] 412 ldw (0x0a, sp), y + 000255 7B 0E [ 1] 413 ld a, (0x0e, sp) + 000257 6B 09 [ 1] 414 ld (0x09, sp), a + 000259 7B 0D [ 1] 415 ld a, (0x0d, sp) + 00025B A8 80 [ 1] 416 xor a, #0x80 + 00025D 6B 0D [ 1] 417 ld (0x0d, sp), a + 00025F 16 0A [ 2] 418 ldw y, (0x0a, sp) + 000261 17 0F [ 2] 419 ldw (0x0f, sp), y + 000263 7B 09 [ 1] 420 ld a, (0x09, sp) + 000265 6B 0E [ 1] 421 ld (0x0e, sp), a + 000267 422 00116$: + 423 ; ../asincosf.c: 96: return r; + 000267 1E 0F [ 2] 424 ldw x, (0x0f, sp) + 000269 16 0D [ 2] 425 ldw y, (0x0d, sp) + 00026B 426 00117$: + 427 ; ../asincosf.c: 97: } + 00026B 5B 11 [ 2] 428 addw sp, #17 + 00026D 81 [ 4] 429 ret + 430 .area CODE + 431 .area CONST + 000000 432 _asincosf_a_65536_26: + 000000 00 00 00 00 433 .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00 + 000004 3F 49 0F DB 434 .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01 + 000008 435 _asincosf_b_65536_26: + 000008 3F C9 0F DB 436 .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00 + 00000C 3F 49 0F DB 437 .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01 + 438 .area INITIALIZER + 439 .area CABS (ABS) diff --git a/device/lib/stm8/asincosf.rel b/device/lib/stm8/asincosf.rel new file mode 100644 index 0000000..c88aaaa --- /dev/null +++ b/device/lib/stm8/asincosf.rel @@ -0,0 +1,164 @@ +XH3 +H B areas B global symbols +M asincosf +O -mstm8 +S ___fssub Ref000000 +S ___fsmul Ref000000 +S _errno Ref000000 +S _sqrtf Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S _fabsf Ref000000 +S _ldexpf Ref000000 +S ___fsdiv Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 10 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 26E flags 0 addr 0 +S _asincosf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 11 7B 18 6B 11 1E 16 89 1E 16 89 CD +R 00 00 00 09 +T 00 00 0D 00 00 5B 04 1F 03 17 01 5F 89 4B 80 4B +R 00 00 00 09 02 03 00 07 +T 00 00 1A 39 1E 07 89 1E 07 89 CD 00 00 5B 08 6B +R 00 00 00 09 02 0B 00 04 +T 00 00 27 10 27 0B 16 03 17 0F 16 01 17 0D CC +R 00 00 00 09 +T 00 00 33 01 64 +R 00 00 00 09 00 03 00 09 +T 00 00 35 +R 00 00 00 09 +T 00 00 35 1E 03 89 1E 03 89 5F 89 4B 00 4B 3F CD +R 00 00 00 09 +T 00 00 42 00 00 5B 08 4D 27 6A 7B 11 A0 01 4F 49 +R 00 00 00 09 02 03 00 04 +T 00 00 4F 6B 11 1E 03 89 1E 03 89 5F 89 4B 80 4B +R 00 00 00 09 +T 00 00 5C 3F CD 00 00 5B 08 4D 27 0C AE 00 21 CF +R 00 00 00 09 02 05 00 04 +T 00 00 69 00 00 5F 90 5F CC 02 6B +R 00 00 00 09 12 03 00 02 00 09 00 09 +T 00 00 71 +R 00 00 00 09 +T 00 00 71 1E 03 89 1E 03 89 5F 89 4B 80 4B 3F CD +R 00 00 00 09 +T 00 00 7E 00 00 5B 08 4B FF 4B FF 89 90 89 CD +R 00 00 00 09 02 03 00 00 +T 00 00 8A 00 00 5B 06 1F 07 17 05 1E 07 89 1E 07 +R 00 00 00 09 02 03 00 08 +T 00 00 97 89 CD 00 00 5B 04 89 90 89 89 90 89 CD +R 00 00 00 09 02 05 00 03 +T 00 00 A4 00 00 5B 08 90 58 8C 90 56 1F 03 17 01 +R 00 00 00 09 02 03 00 06 +T 00 00 B1 20 15 +R 00 00 00 09 +T 00 00 B3 +R 00 00 00 09 +T 00 00 B3 1E 03 89 1E 03 89 1E 07 89 1E 07 89 CD +R 00 00 00 09 +T 00 00 C0 00 00 5B 08 1F 07 17 05 +R 00 00 00 09 02 03 00 01 +T 00 00 C8 +R 00 00 00 09 +T 00 00 C8 1E 07 89 1E 07 89 4B 65 4B 20 4B 01 4B +R 00 00 00 09 +T 00 00 D5 BF CD 00 00 5B 08 4B 6B 4B 16 4B 6F 4B +R 00 00 00 09 02 05 00 01 +T 00 00 E2 3F 89 90 89 CD 00 00 5B 08 1F 0F 1E 07 +R 00 00 00 09 02 08 00 06 +T 00 00 EF 89 1E 07 89 1E 13 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 00 FC 08 1F 0B 17 09 4B 0B 4B 8D 4B B1 4B C0 +R 00 00 00 09 +T 00 01 09 1E 0B 89 1E 0B 89 CD 00 00 5B 08 1F 0F +R 00 00 00 09 02 0A 00 06 +T 00 01 16 1E 07 89 1E 07 89 1E 13 89 90 89 CD +R 00 00 00 09 +T 00 01 22 00 00 5B 08 4B F0 4B 50 4B B3 4B 40 89 +R 00 00 00 09 02 03 00 01 +T 00 01 2F 90 89 CD 00 00 5B 08 89 90 89 1E 0F 89 +R 00 00 00 09 02 06 00 06 +T 00 01 3C 1E 0F 89 CD 00 00 5B 08 89 90 89 1E 07 +R 00 00 00 09 02 07 00 09 +T 00 01 49 89 1E 07 89 CD 00 00 5B 08 89 90 89 1E +R 00 00 00 09 02 08 00 01 +T 00 01 56 07 89 1E 07 89 CD 00 00 5B 08 1F 0F 17 +R 00 00 00 09 02 09 00 06 +T 00 01 63 0D +R 00 00 00 09 +T 00 01 64 +R 00 00 00 09 +T 00 01 64 7B 11 88 5F 89 5F 89 1E 1B 89 1E 1B 89 +R 00 00 00 09 +T 00 01 71 CD 00 00 5B 08 6B 12 84 41 A6 04 41 42 +R 00 00 00 09 02 04 00 04 +T 00 01 7E 1F 0B 0D 18 26 03 CC 02 0E +R 00 00 00 09 00 0A 00 09 +T 00 01 87 +R 00 00 00 09 +T 00 01 87 0D 11 27 42 1E 0B 1C 00 08 90 93 90 EE +R 00 00 00 09 00 0A 00 07 +T 00 01 94 02 17 0B FE 1F 09 90 89 1E 11 89 1E 11 +R 00 00 00 09 +T 00 01 A1 89 1E 11 89 1E 11 89 CD 00 00 5B 08 1F +R 00 00 00 09 02 0B 00 06 +T 00 01 AE 12 17 10 90 85 16 0B 90 89 16 0B 90 89 +R 00 00 00 09 +T 00 01 BB 1E 14 89 1E 14 89 CD 00 00 5B 08 1F 0F +R 00 00 00 09 02 0A 00 06 +T 00 01 C8 17 0D CC 02 67 +R 00 00 00 09 00 06 00 09 +T 00 01 CD +R 00 00 00 09 +T 00 01 CD 1E 0B 1C 00 00 90 93 90 EE 02 17 0B FE +R 00 00 00 09 00 06 00 07 +T 00 01 DA 1F 09 90 89 1E 11 89 1E 11 89 1E 11 89 +R 00 00 00 09 +T 00 01 E7 1E 11 89 CD 00 00 5B 08 1F 12 17 10 90 +R 00 00 00 09 02 07 00 00 +T 00 01 F4 85 16 0B 90 89 16 0B 90 89 1E 14 89 1E +R 00 00 00 09 +T 00 02 01 14 89 CD 00 00 5B 08 1F 0F 17 0D 20 59 +R 00 00 00 09 02 06 00 06 +T 00 02 0E +R 00 00 00 09 +T 00 02 0E 1E 0B 1C 00 00 90 93 90 EE 02 17 0B FE +R 00 00 00 09 00 06 00 07 +T 00 02 1B 1F 09 90 89 1E 11 89 1E 11 89 1E 11 89 +R 00 00 00 09 +T 00 02 28 1E 11 89 CD 00 00 5B 08 1F 11 17 0F 90 +R 00 00 00 09 02 07 00 06 +T 00 02 35 85 16 0B 90 89 16 0B 90 89 1E 13 89 1E +R 00 00 00 09 +T 00 02 42 13 89 CD 00 00 5B 08 1F 0F 17 0D 0D 11 +R 00 00 00 09 02 06 00 06 +T 00 02 4F 27 16 16 0F 17 0A 7B 0E 6B 09 7B 0D A8 +R 00 00 00 09 +T 00 02 5C 80 6B 0D 16 0A 17 0F 7B 09 6B 0E +R 00 00 00 09 +T 00 02 67 +R 00 00 00 09 +T 00 02 67 1E 0F 16 0D +R 00 00 00 09 +T 00 02 6B +R 00 00 00 09 +T 00 02 6B 5B 11 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 07 +T 00 00 00 00 00 00 00 3F 49 0F DB +R 00 00 00 07 +T 00 00 08 +R 00 00 00 07 +T 00 00 08 3F C9 0F DB 3F 49 0F DB +R 00 00 00 07 diff --git a/device/lib/stm8/asincosf.sym b/device/lib/stm8/asincosf.sym new file mode 100644 index 0000000..7b3dc53 --- /dev/null +++ b/device/lib/stm8/asincosf.sym @@ -0,0 +1,40 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + ___fsdiv ****** GX + ___fslt ****** GX + ___fsmul ****** GX + ___fssub ****** GX + 9 _asincosf 000000 GR + 7 _asincosf_a_65536_26 000000 R + 7 _asincosf_b_65536_26 000008 R + _errno ****** GX + _fabsf ****** GX + _ldexpf ****** GX + _sqrtf ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 10 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 26E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/asinf.asm b/device/lib/stm8/asinf.asm new file mode 100644 index 0000000..e8915c5 --- /dev/null +++ b/device/lib/stm8/asinf.asm @@ -0,0 +1,112 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module asinf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _asincosf + .globl _asinf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../asinf.c: 36: float asinf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function asinf +; ----------------------------------------- +_asinf: +; ../asinf.c: 38: if (x == 1.0) return HALF_PI; + clrw x + pushw x + push #0x80 + push #0x3f + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fseq + addw sp, #8 + tnz a + jreq 00108$ + ldw x, #0x0fdb + ldw y, #0x3fc9 + ret +00108$: +; ../asinf.c: 39: else if (x ==-1.0) return -HALF_PI; + clrw x + pushw x + push #0x80 + push #0xbf + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fseq + addw sp, #8 + tnz a + jreq 00105$ + ldw x, #0x0fdb + ldw y, #0xbfc9 + ret +00105$: +; ../asinf.c: 40: else if (x == 0.0) return 0.0; + ldw x, (0x05, sp) + jrne 00102$ + ldw x, (0x03, sp) + sllw x + jrne 00102$ + clrw x + clrw y + ret +00102$: +; ../asinf.c: 41: else return asincosf(x, false); + push #0x00 + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call _asincosf + addw sp, #5 +; ../asinf.c: 42: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/asinf.lst b/device/lib/stm8/asinf.lst new file mode 100644 index 0000000..ea4b697 --- /dev/null +++ b/device/lib/stm8/asinf.lst @@ -0,0 +1,112 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module asinf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _asincosf + 12 .globl _asinf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../asinf.c: 36: float asinf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function asinf + 53 ; ----------------------------------------- + 000000 54 _asinf: + 55 ; ../asinf.c: 38: if (x == 1.0) return HALF_PI; + 000000 5F [ 1] 56 clrw x + 000001 89 [ 2] 57 pushw x + 000002 4B 80 [ 1] 58 push #0x80 + 000004 4B 3F [ 1] 59 push #0x3f + 000006 1E 09 [ 2] 60 ldw x, (0x09, sp) + 000008 89 [ 2] 61 pushw x + 000009 1E 09 [ 2] 62 ldw x, (0x09, sp) + 00000B 89 [ 2] 63 pushw x + 00000C CDr00r00 [ 4] 64 call ___fseq + 00000F 5B 08 [ 2] 65 addw sp, #8 + 000011 4D [ 1] 66 tnz a + 000012 27 08 [ 1] 67 jreq 00108$ + 000014 AE 0F DB [ 2] 68 ldw x, #0x0fdb + 000017 90 AE 3F C9 [ 2] 69 ldw y, #0x3fc9 + 00001B 81 [ 4] 70 ret + 00001C 71 00108$: + 72 ; ../asinf.c: 39: else if (x ==-1.0) return -HALF_PI; + 00001C 5F [ 1] 73 clrw x + 00001D 89 [ 2] 74 pushw x + 00001E 4B 80 [ 1] 75 push #0x80 + 000020 4B BF [ 1] 76 push #0xbf + 000022 1E 09 [ 2] 77 ldw x, (0x09, sp) + 000024 89 [ 2] 78 pushw x + 000025 1E 09 [ 2] 79 ldw x, (0x09, sp) + 000027 89 [ 2] 80 pushw x + 000028 CDr00r00 [ 4] 81 call ___fseq + 00002B 5B 08 [ 2] 82 addw sp, #8 + 00002D 4D [ 1] 83 tnz a + 00002E 27 08 [ 1] 84 jreq 00105$ + 000030 AE 0F DB [ 2] 85 ldw x, #0x0fdb + 000033 90 AE BF C9 [ 2] 86 ldw y, #0xbfc9 + 000037 81 [ 4] 87 ret + 000038 88 00105$: + 89 ; ../asinf.c: 40: else if (x == 0.0) return 0.0; + 000038 1E 05 [ 2] 90 ldw x, (0x05, sp) + 00003A 26 09 [ 1] 91 jrne 00102$ + 00003C 1E 03 [ 2] 92 ldw x, (0x03, sp) + 00003E 58 [ 2] 93 sllw x + 00003F 26 04 [ 1] 94 jrne 00102$ + 000041 5F [ 1] 95 clrw x + 000042 90 5F [ 1] 96 clrw y + 000044 81 [ 4] 97 ret + 000045 98 00102$: + 99 ; ../asinf.c: 41: else return asincosf(x, false); + 000045 4B 00 [ 1] 100 push #0x00 + 000047 1E 06 [ 2] 101 ldw x, (0x06, sp) + 000049 89 [ 2] 102 pushw x + 00004A 1E 06 [ 2] 103 ldw x, (0x06, sp) + 00004C 89 [ 2] 104 pushw x + 00004D CDr00r00 [ 4] 105 call _asincosf + 000050 5B 05 [ 2] 106 addw sp, #5 + 107 ; ../asinf.c: 42: } + 000052 81 [ 4] 108 ret + 109 .area CODE + 110 .area CONST + 111 .area INITIALIZER + 112 .area CABS (ABS) diff --git a/device/lib/stm8/asinf.rel b/device/lib/stm8/asinf.rel new file mode 100644 index 0000000..01a48bb --- /dev/null +++ b/device/lib/stm8/asinf.rel @@ -0,0 +1,45 @@ +XH3 +H B areas 4 global symbols +M asinf +O -mstm8 +S ___fseq Ref000000 +S .__.ABS. Def000000 +S _asincosf Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 53 flags 0 addr 0 +S _asinf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 5F 89 4B 80 4B 3F 1E 09 89 1E 09 89 CD +R 00 00 00 09 +T 00 00 0D 00 00 5B 08 4D 27 08 AE 0F DB 90 AE +R 00 00 00 09 02 03 00 00 +T 00 00 19 3F C9 81 +R 00 00 00 09 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 5F 89 4B 80 4B BF 1E 09 89 1E 09 89 CD +R 00 00 00 09 +T 00 00 29 00 00 5B 08 4D 27 08 AE 0F DB 90 AE +R 00 00 00 09 02 03 00 00 +T 00 00 35 BF C9 81 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1E 05 26 09 1E 03 58 26 04 5F 90 5F 81 +R 00 00 00 09 +T 00 00 45 +R 00 00 00 09 +T 00 00 45 4B 00 1E 06 89 1E 06 89 CD 00 00 5B 05 +R 00 00 00 09 02 0C 00 02 +T 00 00 52 81 +R 00 00 00 09 diff --git a/device/lib/stm8/asinf.sym b/device/lib/stm8/asinf.sym new file mode 100644 index 0000000..b34c50b --- /dev/null +++ b/device/lib/stm8/asinf.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fseq ****** GX + _asincosf ****** GX + 9 _asinf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 53 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/atan2f.asm b/device/lib/stm8/atan2f.asm new file mode 100644 index 0000000..e43db71 --- /dev/null +++ b/device/lib/stm8/atan2f.asm @@ -0,0 +1,236 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module atan2f + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _fabsf + .globl _atanf + .globl _atan2f +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../atan2f.c: 34: float atan2f(float x, float y) +; ----------------------------------------- +; function atan2f +; ----------------------------------------- +_atan2f: + sub sp, #10 +; ../atan2f.c: 38: if ((x==0.0) && (y==0.0)) + ldw x, (0x0f, sp) + jrne 00102$ + ldw x, (0x0d, sp) + sllw x + jrne 00102$ + ldw x, (0x13, sp) + jrne 00102$ + ldw x, (0x11, sp) + sllw x + jrne 00102$ +; ../atan2f.c: 40: errno=EDOM; + ldw x, #0x0021 + ldw _errno+0, x +; ../atan2f.c: 41: return 0.0; + clrw x + clrw y + jp 00109$ +00102$: +; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x)) + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call _fabsf + addw sp, #4 + ldw (0x04, sp), x + ldw (0x02, sp), y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call _fabsf + addw sp, #4 + ldw (0x08, sp), x + ldw (0x06, sp), y +; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI); + clrw x + pushw x + clrw x + pushw x + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x +; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x)) + call ___fslt + addw sp, #8 + ld (0x0a, sp), a + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + call ___fslt + addw sp, #8 + ld (0x09, sp), a + jrne 00107$ +; ../atan2f.c: 46: r=atanf(x/y); + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fsdiv + addw sp, #8 + pushw x + pushw y + call _atanf + addw sp, #4 + ldw (0x08, sp), x + ldw (0x06, sp), y +; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI); + clrw x + pushw x + clrw x + pushw x + ldw x, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jrne 00150$ + jp 00108$ +00150$: + tnz (0x0a, sp) + jrne 00111$ + ldw x, #0x0fdb + ldw (0x04, sp), x + ldw x, #0x4049 + ldw (0x02, sp), x + jra 00112$ +00111$: + ldw x, #0x0fdb + ldw (0x04, sp), x + ldw x, #0xc049 + ldw (0x02, sp), x +00112$: + ldw x, (0x04, sp) + pushw x + ldw x, (0x04, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x08, sp), x + ldw (0x06, sp), y + jra 00108$ +00107$: +; ../atan2f.c: 51: r=-atanf(y/x); + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + call ___fsdiv + addw sp, #8 + pushw x + pushw y + call _atanf + addw sp, #4 + exgw x, y + sllw x + ccf + rrcw x + ldw (0x08, sp), y + ldw (0x06, sp), x +; ../atan2f.c: 52: r+=(x<0.0?-HALF_PI:HALF_PI); + ld a, (0x0a, sp) + jreq 00113$ + ldw x, #0x0fdb + ldw (0x04, sp), x + ldw x, #0xbfc9 + jra 00114$ +00113$: + ldw x, #0x0fdb + ldw (0x04, sp), x + ldw x, #0x3fc9 +00114$: + ldw y, (0x04, sp) + pushw y + pushw x + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x03, sp), x + ldw (0x01, sp), y + ldw y, (0x03, sp) + ldw (0x08, sp), y + ldw y, (0x01, sp) + ldw (0x06, sp), y +00108$: +; ../atan2f.c: 54: return r; + ldw x, (0x08, sp) + ldw y, (0x06, sp) +00109$: +; ../atan2f.c: 55: } + addw sp, #10 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/atan2f.lst b/device/lib/stm8/atan2f.lst new file mode 100644 index 0000000..a31ae24 --- /dev/null +++ b/device/lib/stm8/atan2f.lst @@ -0,0 +1,236 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module atan2f + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _fabsf + 12 .globl _atanf + 13 .globl _atan2f + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../atan2f.c: 34: float atan2f(float x, float y) + 52 ; ----------------------------------------- + 53 ; function atan2f + 54 ; ----------------------------------------- + 000000 55 _atan2f: + 000000 52 0A [ 2] 56 sub sp, #10 + 57 ; ../atan2f.c: 38: if ((x==0.0) && (y==0.0)) + 000002 1E 0F [ 2] 58 ldw x, (0x0f, sp) + 000004 26 1A [ 1] 59 jrne 00102$ + 000006 1E 0D [ 2] 60 ldw x, (0x0d, sp) + 000008 58 [ 2] 61 sllw x + 000009 26 15 [ 1] 62 jrne 00102$ + 00000B 1E 13 [ 2] 63 ldw x, (0x13, sp) + 00000D 26 11 [ 1] 64 jrne 00102$ + 00000F 1E 11 [ 2] 65 ldw x, (0x11, sp) + 000011 58 [ 2] 66 sllw x + 000012 26 0C [ 1] 67 jrne 00102$ + 68 ; ../atan2f.c: 40: errno=EDOM; + 000014 AE 00 21 [ 2] 69 ldw x, #0x0021 + 000017 CFu00u00 [ 2] 70 ldw _errno+0, x + 71 ; ../atan2f.c: 41: return 0.0; + 00001A 5F [ 1] 72 clrw x + 00001B 90 5F [ 1] 73 clrw y + 00001D CCr01r1E [ 2] 74 jp 00109$ + 000020 75 00102$: + 76 ; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x)) + 000020 1E 13 [ 2] 77 ldw x, (0x13, sp) + 000022 89 [ 2] 78 pushw x + 000023 1E 13 [ 2] 79 ldw x, (0x13, sp) + 000025 89 [ 2] 80 pushw x + 000026 CDr00r00 [ 4] 81 call _fabsf + 000029 5B 04 [ 2] 82 addw sp, #4 + 00002B 1F 04 [ 2] 83 ldw (0x04, sp), x + 00002D 17 02 [ 2] 84 ldw (0x02, sp), y + 00002F 1E 0F [ 2] 85 ldw x, (0x0f, sp) + 000031 89 [ 2] 86 pushw x + 000032 1E 0F [ 2] 87 ldw x, (0x0f, sp) + 000034 89 [ 2] 88 pushw x + 000035 CDr00r00 [ 4] 89 call _fabsf + 000038 5B 04 [ 2] 90 addw sp, #4 + 00003A 1F 08 [ 2] 91 ldw (0x08, sp), x + 00003C 17 06 [ 2] 92 ldw (0x06, sp), y + 93 ; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI); + 00003E 5F [ 1] 94 clrw x + 00003F 89 [ 2] 95 pushw x + 000040 5F [ 1] 96 clrw x + 000041 89 [ 2] 97 pushw x + 000042 1E 13 [ 2] 98 ldw x, (0x13, sp) + 000044 89 [ 2] 99 pushw x + 000045 1E 13 [ 2] 100 ldw x, (0x13, sp) + 000047 89 [ 2] 101 pushw x + 102 ; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x)) + 000048 CDr00r00 [ 4] 103 call ___fslt + 00004B 5B 08 [ 2] 104 addw sp, #8 + 00004D 6B 0A [ 1] 105 ld (0x0a, sp), a + 00004F 1E 08 [ 2] 106 ldw x, (0x08, sp) + 000051 89 [ 2] 107 pushw x + 000052 1E 08 [ 2] 108 ldw x, (0x08, sp) + 000054 89 [ 2] 109 pushw x + 000055 1E 08 [ 2] 110 ldw x, (0x08, sp) + 000057 89 [ 2] 111 pushw x + 000058 1E 08 [ 2] 112 ldw x, (0x08, sp) + 00005A 89 [ 2] 113 pushw x + 00005B CDr00r00 [ 4] 114 call ___fslt + 00005E 5B 08 [ 2] 115 addw sp, #8 + 000060 6B 09 [ 1] 116 ld (0x09, sp), a + 000062 26 63 [ 1] 117 jrne 00107$ + 118 ; ../atan2f.c: 46: r=atanf(x/y); + 000064 1E 13 [ 2] 119 ldw x, (0x13, sp) + 000066 89 [ 2] 120 pushw x + 000067 1E 13 [ 2] 121 ldw x, (0x13, sp) + 000069 89 [ 2] 122 pushw x + 00006A 1E 13 [ 2] 123 ldw x, (0x13, sp) + 00006C 89 [ 2] 124 pushw x + 00006D 1E 13 [ 2] 125 ldw x, (0x13, sp) + 00006F 89 [ 2] 126 pushw x + 000070 CDr00r00 [ 4] 127 call ___fsdiv + 000073 5B 08 [ 2] 128 addw sp, #8 + 000075 89 [ 2] 129 pushw x + 000076 90 89 [ 2] 130 pushw y + 000078 CDr00r00 [ 4] 131 call _atanf + 00007B 5B 04 [ 2] 132 addw sp, #4 + 00007D 1F 08 [ 2] 133 ldw (0x08, sp), x + 00007F 17 06 [ 2] 134 ldw (0x06, sp), y + 135 ; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI); + 000081 5F [ 1] 136 clrw x + 000082 89 [ 2] 137 pushw x + 000083 5F [ 1] 138 clrw x + 000084 89 [ 2] 139 pushw x + 000085 1E 17 [ 2] 140 ldw x, (0x17, sp) + 000087 89 [ 2] 141 pushw x + 000088 1E 17 [ 2] 142 ldw x, (0x17, sp) + 00008A 89 [ 2] 143 pushw x + 00008B CDr00r00 [ 4] 144 call ___fslt + 00008E 5B 08 [ 2] 145 addw sp, #8 + 000090 4D [ 1] 146 tnz a + 000091 26 03 [ 1] 147 jrne 00150$ + 000093 CCr01r1A [ 2] 148 jp 00108$ + 000096 149 00150$: + 000096 0D 0A [ 1] 150 tnz (0x0a, sp) + 000098 26 0C [ 1] 151 jrne 00111$ + 00009A AE 0F DB [ 2] 152 ldw x, #0x0fdb + 00009D 1F 04 [ 2] 153 ldw (0x04, sp), x + 00009F AE 40 49 [ 2] 154 ldw x, #0x4049 + 0000A2 1F 02 [ 2] 155 ldw (0x02, sp), x + 0000A4 20 0A [ 2] 156 jra 00112$ + 0000A6 157 00111$: + 0000A6 AE 0F DB [ 2] 158 ldw x, #0x0fdb + 0000A9 1F 04 [ 2] 159 ldw (0x04, sp), x + 0000AB AE C0 49 [ 2] 160 ldw x, #0xc049 + 0000AE 1F 02 [ 2] 161 ldw (0x02, sp), x + 0000B0 162 00112$: + 0000B0 1E 04 [ 2] 163 ldw x, (0x04, sp) + 0000B2 89 [ 2] 164 pushw x + 0000B3 1E 04 [ 2] 165 ldw x, (0x04, sp) + 0000B5 89 [ 2] 166 pushw x + 0000B6 1E 0C [ 2] 167 ldw x, (0x0c, sp) + 0000B8 89 [ 2] 168 pushw x + 0000B9 1E 0C [ 2] 169 ldw x, (0x0c, sp) + 0000BB 89 [ 2] 170 pushw x + 0000BC CDr00r00 [ 4] 171 call ___fsadd + 0000BF 5B 08 [ 2] 172 addw sp, #8 + 0000C1 1F 08 [ 2] 173 ldw (0x08, sp), x + 0000C3 17 06 [ 2] 174 ldw (0x06, sp), y + 0000C5 20 53 [ 2] 175 jra 00108$ + 0000C7 176 00107$: + 177 ; ../atan2f.c: 51: r=-atanf(y/x); + 0000C7 1E 0F [ 2] 178 ldw x, (0x0f, sp) + 0000C9 89 [ 2] 179 pushw x + 0000CA 1E 0F [ 2] 180 ldw x, (0x0f, sp) + 0000CC 89 [ 2] 181 pushw x + 0000CD 1E 17 [ 2] 182 ldw x, (0x17, sp) + 0000CF 89 [ 2] 183 pushw x + 0000D0 1E 17 [ 2] 184 ldw x, (0x17, sp) + 0000D2 89 [ 2] 185 pushw x + 0000D3 CDr00r00 [ 4] 186 call ___fsdiv + 0000D6 5B 08 [ 2] 187 addw sp, #8 + 0000D8 89 [ 2] 188 pushw x + 0000D9 90 89 [ 2] 189 pushw y + 0000DB CDr00r00 [ 4] 190 call _atanf + 0000DE 5B 04 [ 2] 191 addw sp, #4 + 0000E0 51 [ 1] 192 exgw x, y + 0000E1 58 [ 2] 193 sllw x + 0000E2 8C [ 1] 194 ccf + 0000E3 56 [ 2] 195 rrcw x + 0000E4 17 08 [ 2] 196 ldw (0x08, sp), y + 0000E6 1F 06 [ 2] 197 ldw (0x06, sp), x + 198 ; ../atan2f.c: 52: r+=(x<0.0?-HALF_PI:HALF_PI); + 0000E8 7B 0A [ 1] 199 ld a, (0x0a, sp) + 0000EA 27 0A [ 1] 200 jreq 00113$ + 0000EC AE 0F DB [ 2] 201 ldw x, #0x0fdb + 0000EF 1F 04 [ 2] 202 ldw (0x04, sp), x + 0000F1 AE BF C9 [ 2] 203 ldw x, #0xbfc9 + 0000F4 20 08 [ 2] 204 jra 00114$ + 0000F6 205 00113$: + 0000F6 AE 0F DB [ 2] 206 ldw x, #0x0fdb + 0000F9 1F 04 [ 2] 207 ldw (0x04, sp), x + 0000FB AE 3F C9 [ 2] 208 ldw x, #0x3fc9 + 0000FE 209 00114$: + 0000FE 16 04 [ 2] 210 ldw y, (0x04, sp) + 000100 90 89 [ 2] 211 pushw y + 000102 89 [ 2] 212 pushw x + 000103 1E 0C [ 2] 213 ldw x, (0x0c, sp) + 000105 89 [ 2] 214 pushw x + 000106 1E 0C [ 2] 215 ldw x, (0x0c, sp) + 000108 89 [ 2] 216 pushw x + 000109 CDr00r00 [ 4] 217 call ___fsadd + 00010C 5B 08 [ 2] 218 addw sp, #8 + 00010E 1F 03 [ 2] 219 ldw (0x03, sp), x + 000110 17 01 [ 2] 220 ldw (0x01, sp), y + 000112 16 03 [ 2] 221 ldw y, (0x03, sp) + 000114 17 08 [ 2] 222 ldw (0x08, sp), y + 000116 16 01 [ 2] 223 ldw y, (0x01, sp) + 000118 17 06 [ 2] 224 ldw (0x06, sp), y + 00011A 225 00108$: + 226 ; ../atan2f.c: 54: return r; + 00011A 1E 08 [ 2] 227 ldw x, (0x08, sp) + 00011C 16 06 [ 2] 228 ldw y, (0x06, sp) + 00011E 229 00109$: + 230 ; ../atan2f.c: 55: } + 00011E 5B 0A [ 2] 231 addw sp, #10 + 000120 81 [ 4] 232 ret + 233 .area CODE + 234 .area CONST + 235 .area INITIALIZER + 236 .area CABS (ABS) diff --git a/device/lib/stm8/atan2f.rel b/device/lib/stm8/atan2f.rel new file mode 100644 index 0000000..b0451fc --- /dev/null +++ b/device/lib/stm8/atan2f.rel @@ -0,0 +1,99 @@ +XH3 +H B areas 8 global symbols +M atan2f +O -mstm8 +S _errno Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S _fabsf Ref000000 +S _atanf Ref000000 +S ___fsdiv Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 121 flags 0 addr 0 +S _atan2f Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 1E 0F 26 1A 1E 0D 58 26 15 1E 13 +R 00 00 00 09 +T 00 00 0D 26 11 1E 11 58 26 0C AE 00 21 CF 00 00 +R 00 00 00 09 12 0E 00 00 +T 00 00 1A 5F 90 5F CC 01 1E +R 00 00 00 09 00 07 00 09 +T 00 00 20 +R 00 00 00 09 +T 00 00 20 1E 13 89 1E 13 89 CD 00 00 5B 04 1F 04 +R 00 00 00 09 02 0A 00 04 +T 00 00 2D 17 02 1E 0F 89 1E 0F 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 04 +T 00 00 3A 1F 08 17 06 5F 89 5F 89 1E 13 89 1E 13 +R 00 00 00 09 +T 00 00 47 89 CD 00 00 5B 08 6B 0A 1E 08 89 1E 08 +R 00 00 00 09 02 05 00 01 +T 00 00 54 89 1E 08 89 1E 08 89 CD 00 00 5B 08 6B +R 00 00 00 09 02 0B 00 01 +T 00 00 61 09 26 63 1E 13 89 1E 13 89 1E 13 89 1E +R 00 00 00 09 +T 00 00 6E 13 89 CD 00 00 5B 08 89 90 89 CD 00 00 +R 00 00 00 09 02 06 00 06 02 0E 00 05 +T 00 00 7B 5B 04 1F 08 17 06 5F 89 5F 89 1E 17 89 +R 00 00 00 09 +T 00 00 88 1E 17 89 CD 00 00 5B 08 4D 26 03 CC +R 00 00 00 09 02 07 00 01 +T 00 00 94 01 1A +R 00 00 00 09 00 03 00 09 +T 00 00 96 +R 00 00 00 09 +T 00 00 96 0D 0A 26 0C AE 0F DB 1F 04 AE 40 49 1F +R 00 00 00 09 +T 00 00 A3 02 20 0A +R 00 00 00 09 +T 00 00 A6 +R 00 00 00 09 +T 00 00 A6 AE 0F DB 1F 04 AE C0 49 1F 02 +R 00 00 00 09 +T 00 00 B0 +R 00 00 00 09 +T 00 00 B0 1E 04 89 1E 04 89 1E 0C 89 1E 0C 89 CD +R 00 00 00 09 +T 00 00 BD 00 00 5B 08 1F 08 17 06 20 53 +R 00 00 00 09 02 03 00 03 +T 00 00 C7 +R 00 00 00 09 +T 00 00 C7 1E 0F 89 1E 0F 89 1E 17 89 1E 17 89 CD +R 00 00 00 09 +T 00 00 D4 00 00 5B 08 89 90 89 CD 00 00 5B 04 51 +R 00 00 00 09 02 03 00 06 02 0B 00 05 +T 00 00 E1 58 8C 56 17 08 1F 06 7B 0A 27 0A AE +R 00 00 00 09 +T 00 00 ED 0F DB 1F 04 AE BF C9 20 08 +R 00 00 00 09 +T 00 00 F6 +R 00 00 00 09 +T 00 00 F6 AE 0F DB 1F 04 AE 3F C9 +R 00 00 00 09 +T 00 00 FE +R 00 00 00 09 +T 00 00 FE 16 04 90 89 89 1E 0C 89 1E 0C 89 CD +R 00 00 00 09 +T 00 01 0A 00 00 5B 08 1F 03 17 01 16 03 17 08 16 +R 00 00 00 09 02 03 00 03 +T 00 01 17 01 17 06 +R 00 00 00 09 +T 00 01 1A +R 00 00 00 09 +T 00 01 1A 1E 08 16 06 +R 00 00 00 09 +T 00 01 1E +R 00 00 00 09 +T 00 01 1E 5B 0A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/atan2f.sym b/device/lib/stm8/atan2f.sym new file mode 100644 index 0000000..babc9db --- /dev/null +++ b/device/lib/stm8/atan2f.sym @@ -0,0 +1,35 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + ___fsdiv ****** GX + ___fslt ****** GX + 9 _atan2f 000000 GR + _atanf ****** GX + _errno ****** GX + _fabsf ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 121 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/atanf.asm b/device/lib/stm8/atanf.asm new file mode 100644 index 0000000..fc163d7 --- /dev/null +++ b/device/lib/stm8/atanf.asm @@ -0,0 +1,338 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module atanf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _fabsf + .globl _atanf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../atanf.c: 55: float atanf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function atanf +; ----------------------------------------- +_atanf: + sub sp, #14 +; ../atanf.c: 58: int n=0; + clrw x + ldw (0x01, sp), x +; ../atanf.c: 61: f=fabsf(x); + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call _fabsf + addw sp, #4 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../atanf.c: 62: if(f>1.0) + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + clrw x + pushw x + push #0x80 + push #0x3f + call ___fslt + addw sp, #8 + tnz a + jreq 00102$ +; ../atanf.c: 64: f=1.0/f; + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + clrw x + pushw x + push #0x80 + push #0x3f + call ___fsdiv + addw sp, #8 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../atanf.c: 65: n=2; + ldw x, #0x0002 + ldw (0x01, sp), x +00102$: +; ../atanf.c: 67: if(f>K1) + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + push #0xa3 + push #0x30 + push #0x89 + push #0x3e + call ___fslt + addw sp, #8 + tnz a + jreq 00104$ +; ../atanf.c: 69: f=((K2*f-1.0)+f)/(K3+f); + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + push #0xaf + push #0x67 + push #0x3b + push #0x3f + call ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x80 + push #0x3f + pushw x + pushw y + call ___fssub + addw sp, #8 + ldw (0x0d, sp), x + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + ldw x, (0x11, sp) + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + push #0xd7 + push #0xb3 + push #0xdd + push #0x3f + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsdiv + addw sp, #8 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../atanf.c: 73: n++; + ldw x, (0x01, sp) + incw x + ldw (0x01, sp), x +00104$: +; ../atanf.c: 75: if(fabsf(f)<EPS) r=f; + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + call _fabsf + addw sp, #4 + push #0x00 + push #0x00 + push #0x80 + push #0x39 + pushw x + pushw y + call ___fslt + addw sp, #8 + ld (0x0e, sp), a + jreq 00106$ + ldw y, (0x05, sp) + ldw (0x0d, sp), y + ldw y, (0x03, sp) + ldw (0x0b, sp), y + jp 00107$ +00106$: +; ../atanf.c: 78: g=f*f; + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../atanf.c: 79: r=f+P(g,f)/Q(g); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + push #0x91 + push #0x86 + push #0x50 + push #0xbd + call ___fsmul + addw sp, #8 + push #0xf6 + push #0x10 + push #0xf1 + push #0xbe + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x11, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + ldw (0x0d, sp), x + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + ldw x, (0x11, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + push #0xd3 + push #0xcc + push #0xb4 + push #0x3f + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y +00107$: +; ../atanf.c: 81: if(n>1) r=-r; + ldw x, (0x01, sp) + cpw x, #0x0001 + jrsle 00109$ + ldw y, (0x0d, sp) + ldw x, (0x0b, sp) + sllw x + ccf + rrcw x + ldw (0x0d, sp), y + ldw (0x0b, sp), x +00109$: +; ../atanf.c: 82: r+=a[n]; + ldw x, (0x01, sp) + sllw x + sllw x + addw x, #(_atanf_a_65536_26 + 0) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + pushw y + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsadd + addw sp, #8 +; ../atanf.c: 83: if(x<0.0) r=-r; + pushw x + pushw y + push #0x00 + push #0x00 + push #0x00 + push #0x00 + ld a, (0x1c, sp) + push a + ld a, (0x1c, sp) + push a + ld a, (0x1c, sp) + push a + ld a, (0x1c, sp) + push a + call ___fslt + addw sp, #8 + popw y + popw x + tnz a + jreq 00111$ + sllw y + ccf + rrcw y +00111$: +; ../atanf.c: 84: return r; +; ../atanf.c: 85: } + addw sp, #14 + ret + .area CODE + .area CONST +_atanf_a_65536_26: + .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00 + .byte #0x3f, #0x06, #0x0a, #0x92 ; 5.235988e-01 + .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00 + .byte #0x3f, #0x86, #0x0a, #0x92 ; 1.047198e+00 + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/atanf.lst b/device/lib/stm8/atanf.lst new file mode 100644 index 0000000..e81b9ff --- /dev/null +++ b/device/lib/stm8/atanf.lst @@ -0,0 +1,338 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module atanf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _fabsf + 12 .globl _atanf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../atanf.c: 55: float atanf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function atanf + 53 ; ----------------------------------------- + 000000 54 _atanf: + 000000 52 0E [ 2] 55 sub sp, #14 + 56 ; ../atanf.c: 58: int n=0; + 000002 5F [ 1] 57 clrw x + 000003 1F 01 [ 2] 58 ldw (0x01, sp), x + 59 ; ../atanf.c: 61: f=fabsf(x); + 000005 1E 13 [ 2] 60 ldw x, (0x13, sp) + 000007 89 [ 2] 61 pushw x + 000008 1E 13 [ 2] 62 ldw x, (0x13, sp) + 00000A 89 [ 2] 63 pushw x + 00000B CDr00r00 [ 4] 64 call _fabsf + 00000E 5B 04 [ 2] 65 addw sp, #4 + 000010 1F 05 [ 2] 66 ldw (0x05, sp), x + 000012 17 03 [ 2] 67 ldw (0x03, sp), y + 68 ; ../atanf.c: 62: if(f>1.0) + 000014 1E 05 [ 2] 69 ldw x, (0x05, sp) + 000016 89 [ 2] 70 pushw x + 000017 1E 05 [ 2] 71 ldw x, (0x05, sp) + 000019 89 [ 2] 72 pushw x + 00001A 5F [ 1] 73 clrw x + 00001B 89 [ 2] 74 pushw x + 00001C 4B 80 [ 1] 75 push #0x80 + 00001E 4B 3F [ 1] 76 push #0x3f + 000020 CDr00r00 [ 4] 77 call ___fslt + 000023 5B 08 [ 2] 78 addw sp, #8 + 000025 4D [ 1] 79 tnz a + 000026 27 1A [ 1] 80 jreq 00102$ + 81 ; ../atanf.c: 64: f=1.0/f; + 000028 1E 05 [ 2] 82 ldw x, (0x05, sp) + 00002A 89 [ 2] 83 pushw x + 00002B 1E 05 [ 2] 84 ldw x, (0x05, sp) + 00002D 89 [ 2] 85 pushw x + 00002E 5F [ 1] 86 clrw x + 00002F 89 [ 2] 87 pushw x + 000030 4B 80 [ 1] 88 push #0x80 + 000032 4B 3F [ 1] 89 push #0x3f + 000034 CDr00r00 [ 4] 90 call ___fsdiv + 000037 5B 08 [ 2] 91 addw sp, #8 + 000039 1F 05 [ 2] 92 ldw (0x05, sp), x + 00003B 17 03 [ 2] 93 ldw (0x03, sp), y + 94 ; ../atanf.c: 65: n=2; + 00003D AE 00 02 [ 2] 95 ldw x, #0x0002 + 000040 1F 01 [ 2] 96 ldw (0x01, sp), x + 000042 97 00102$: + 98 ; ../atanf.c: 67: if(f>K1) + 000042 1E 05 [ 2] 99 ldw x, (0x05, sp) + 000044 89 [ 2] 100 pushw x + 000045 1E 05 [ 2] 101 ldw x, (0x05, sp) + 000047 89 [ 2] 102 pushw x + 000048 4B A3 [ 1] 103 push #0xa3 + 00004A 4B 30 [ 1] 104 push #0x30 + 00004C 4B 89 [ 1] 105 push #0x89 + 00004E 4B 3E [ 1] 106 push #0x3e + 000050 CDr00r00 [ 4] 107 call ___fslt + 000053 5B 08 [ 2] 108 addw sp, #8 + 000055 4D [ 1] 109 tnz a + 000056 27 63 [ 1] 110 jreq 00104$ + 111 ; ../atanf.c: 69: f=((K2*f-1.0)+f)/(K3+f); + 000058 1E 05 [ 2] 112 ldw x, (0x05, sp) + 00005A 89 [ 2] 113 pushw x + 00005B 1E 05 [ 2] 114 ldw x, (0x05, sp) + 00005D 89 [ 2] 115 pushw x + 00005E 4B AF [ 1] 116 push #0xaf + 000060 4B 67 [ 1] 117 push #0x67 + 000062 4B 3B [ 1] 118 push #0x3b + 000064 4B 3F [ 1] 119 push #0x3f + 000066 CDr00r00 [ 4] 120 call ___fsmul + 000069 5B 08 [ 2] 121 addw sp, #8 + 00006B 4B 00 [ 1] 122 push #0x00 + 00006D 4B 00 [ 1] 123 push #0x00 + 00006F 4B 80 [ 1] 124 push #0x80 + 000071 4B 3F [ 1] 125 push #0x3f + 000073 89 [ 2] 126 pushw x + 000074 90 89 [ 2] 127 pushw y + 000076 CDr00r00 [ 4] 128 call ___fssub + 000079 5B 08 [ 2] 129 addw sp, #8 + 00007B 1F 0D [ 2] 130 ldw (0x0d, sp), x + 00007D 1E 05 [ 2] 131 ldw x, (0x05, sp) + 00007F 89 [ 2] 132 pushw x + 000080 1E 05 [ 2] 133 ldw x, (0x05, sp) + 000082 89 [ 2] 134 pushw x + 000083 1E 11 [ 2] 135 ldw x, (0x11, sp) + 000085 89 [ 2] 136 pushw x + 000086 90 89 [ 2] 137 pushw y + 000088 CDr00r00 [ 4] 138 call ___fsadd + 00008B 5B 08 [ 2] 139 addw sp, #8 + 00008D 1F 0D [ 2] 140 ldw (0x0d, sp), x + 00008F 17 0B [ 2] 141 ldw (0x0b, sp), y + 000091 4B D7 [ 1] 142 push #0xd7 + 000093 4B B3 [ 1] 143 push #0xb3 + 000095 4B DD [ 1] 144 push #0xdd + 000097 4B 3F [ 1] 145 push #0x3f + 000099 1E 09 [ 2] 146 ldw x, (0x09, sp) + 00009B 89 [ 2] 147 pushw x + 00009C 1E 09 [ 2] 148 ldw x, (0x09, sp) + 00009E 89 [ 2] 149 pushw x + 00009F CDr00r00 [ 4] 150 call ___fsadd + 0000A2 5B 08 [ 2] 151 addw sp, #8 + 0000A4 89 [ 2] 152 pushw x + 0000A5 90 89 [ 2] 153 pushw y + 0000A7 1E 11 [ 2] 154 ldw x, (0x11, sp) + 0000A9 89 [ 2] 155 pushw x + 0000AA 1E 11 [ 2] 156 ldw x, (0x11, sp) + 0000AC 89 [ 2] 157 pushw x + 0000AD CDr00r00 [ 4] 158 call ___fsdiv + 0000B0 5B 08 [ 2] 159 addw sp, #8 + 0000B2 1F 05 [ 2] 160 ldw (0x05, sp), x + 0000B4 17 03 [ 2] 161 ldw (0x03, sp), y + 162 ; ../atanf.c: 73: n++; + 0000B6 1E 01 [ 2] 163 ldw x, (0x01, sp) + 0000B8 5C [ 1] 164 incw x + 0000B9 1F 01 [ 2] 165 ldw (0x01, sp), x + 0000BB 166 00104$: + 167 ; ../atanf.c: 75: if(fabsf(f)<EPS) r=f; + 0000BB 1E 05 [ 2] 168 ldw x, (0x05, sp) + 0000BD 89 [ 2] 169 pushw x + 0000BE 1E 05 [ 2] 170 ldw x, (0x05, sp) + 0000C0 89 [ 2] 171 pushw x + 0000C1 CDr00r00 [ 4] 172 call _fabsf + 0000C4 5B 04 [ 2] 173 addw sp, #4 + 0000C6 4B 00 [ 1] 174 push #0x00 + 0000C8 4B 00 [ 1] 175 push #0x00 + 0000CA 4B 80 [ 1] 176 push #0x80 + 0000CC 4B 39 [ 1] 177 push #0x39 + 0000CE 89 [ 2] 178 pushw x + 0000CF 90 89 [ 2] 179 pushw y + 0000D1 CDr00r00 [ 4] 180 call ___fslt + 0000D4 5B 08 [ 2] 181 addw sp, #8 + 0000D6 6B 0E [ 1] 182 ld (0x0e, sp), a + 0000D8 27 0B [ 1] 183 jreq 00106$ + 0000DA 16 05 [ 2] 184 ldw y, (0x05, sp) + 0000DC 17 0D [ 2] 185 ldw (0x0d, sp), y + 0000DE 16 03 [ 2] 186 ldw y, (0x03, sp) + 0000E0 17 0B [ 2] 187 ldw (0x0b, sp), y + 0000E2 CCr01r78 [ 2] 188 jp 00107$ + 0000E5 189 00106$: + 190 ; ../atanf.c: 78: g=f*f; + 0000E5 1E 05 [ 2] 191 ldw x, (0x05, sp) + 0000E7 89 [ 2] 192 pushw x + 0000E8 1E 05 [ 2] 193 ldw x, (0x05, sp) + 0000EA 89 [ 2] 194 pushw x + 0000EB 1E 09 [ 2] 195 ldw x, (0x09, sp) + 0000ED 89 [ 2] 196 pushw x + 0000EE 1E 09 [ 2] 197 ldw x, (0x09, sp) + 0000F0 89 [ 2] 198 pushw x + 0000F1 CDr00r00 [ 4] 199 call ___fsmul + 0000F4 5B 08 [ 2] 200 addw sp, #8 + 0000F6 1F 09 [ 2] 201 ldw (0x09, sp), x + 0000F8 17 07 [ 2] 202 ldw (0x07, sp), y + 203 ; ../atanf.c: 79: r=f+P(g,f)/Q(g); + 0000FA 1E 09 [ 2] 204 ldw x, (0x09, sp) + 0000FC 89 [ 2] 205 pushw x + 0000FD 1E 09 [ 2] 206 ldw x, (0x09, sp) + 0000FF 89 [ 2] 207 pushw x + 000100 4B 91 [ 1] 208 push #0x91 + 000102 4B 86 [ 1] 209 push #0x86 + 000104 4B 50 [ 1] 210 push #0x50 + 000106 4B BD [ 1] 211 push #0xbd + 000108 CDr00r00 [ 4] 212 call ___fsmul + 00010B 5B 08 [ 2] 213 addw sp, #8 + 00010D 4B F6 [ 1] 214 push #0xf6 + 00010F 4B 10 [ 1] 215 push #0x10 + 000111 4B F1 [ 1] 216 push #0xf1 + 000113 4B BE [ 1] 217 push #0xbe + 000115 89 [ 2] 218 pushw x + 000116 90 89 [ 2] 219 pushw y + 000118 CDr00r00 [ 4] 220 call ___fsadd + 00011B 5B 08 [ 2] 221 addw sp, #8 + 00011D 1F 0D [ 2] 222 ldw (0x0d, sp), x + 00011F 1E 09 [ 2] 223 ldw x, (0x09, sp) + 000121 89 [ 2] 224 pushw x + 000122 1E 09 [ 2] 225 ldw x, (0x09, sp) + 000124 89 [ 2] 226 pushw x + 000125 1E 11 [ 2] 227 ldw x, (0x11, sp) + 000127 89 [ 2] 228 pushw x + 000128 90 89 [ 2] 229 pushw y + 00012A CDr00r00 [ 4] 230 call ___fsmul + 00012D 5B 08 [ 2] 231 addw sp, #8 + 00012F 1F 0D [ 2] 232 ldw (0x0d, sp), x + 000131 1E 05 [ 2] 233 ldw x, (0x05, sp) + 000133 89 [ 2] 234 pushw x + 000134 1E 05 [ 2] 235 ldw x, (0x05, sp) + 000136 89 [ 2] 236 pushw x + 000137 1E 11 [ 2] 237 ldw x, (0x11, sp) + 000139 89 [ 2] 238 pushw x + 00013A 90 89 [ 2] 239 pushw y + 00013C CDr00r00 [ 4] 240 call ___fsmul + 00013F 5B 08 [ 2] 241 addw sp, #8 + 000141 1F 0D [ 2] 242 ldw (0x0d, sp), x + 000143 17 0B [ 2] 243 ldw (0x0b, sp), y + 000145 4B D3 [ 1] 244 push #0xd3 + 000147 4B CC [ 1] 245 push #0xcc + 000149 4B B4 [ 1] 246 push #0xb4 + 00014B 4B 3F [ 1] 247 push #0x3f + 00014D 1E 0D [ 2] 248 ldw x, (0x0d, sp) + 00014F 89 [ 2] 249 pushw x + 000150 1E 0D [ 2] 250 ldw x, (0x0d, sp) + 000152 89 [ 2] 251 pushw x + 000153 CDr00r00 [ 4] 252 call ___fsadd + 000156 5B 08 [ 2] 253 addw sp, #8 + 000158 89 [ 2] 254 pushw x + 000159 90 89 [ 2] 255 pushw y + 00015B 1E 11 [ 2] 256 ldw x, (0x11, sp) + 00015D 89 [ 2] 257 pushw x + 00015E 1E 11 [ 2] 258 ldw x, (0x11, sp) + 000160 89 [ 2] 259 pushw x + 000161 CDr00r00 [ 4] 260 call ___fsdiv + 000164 5B 08 [ 2] 261 addw sp, #8 + 000166 89 [ 2] 262 pushw x + 000167 90 89 [ 2] 263 pushw y + 000169 1E 09 [ 2] 264 ldw x, (0x09, sp) + 00016B 89 [ 2] 265 pushw x + 00016C 1E 09 [ 2] 266 ldw x, (0x09, sp) + 00016E 89 [ 2] 267 pushw x + 00016F CDr00r00 [ 4] 268 call ___fsadd + 000172 5B 08 [ 2] 269 addw sp, #8 + 000174 1F 0D [ 2] 270 ldw (0x0d, sp), x + 000176 17 0B [ 2] 271 ldw (0x0b, sp), y + 000178 272 00107$: + 273 ; ../atanf.c: 81: if(n>1) r=-r; + 000178 1E 01 [ 2] 274 ldw x, (0x01, sp) + 00017A A3 00 01 [ 2] 275 cpw x, #0x0001 + 00017D 2D 0B [ 1] 276 jrsle 00109$ + 00017F 16 0D [ 2] 277 ldw y, (0x0d, sp) + 000181 1E 0B [ 2] 278 ldw x, (0x0b, sp) + 000183 58 [ 2] 279 sllw x + 000184 8C [ 1] 280 ccf + 000185 56 [ 2] 281 rrcw x + 000186 17 0D [ 2] 282 ldw (0x0d, sp), y + 000188 1F 0B [ 2] 283 ldw (0x0b, sp), x + 00018A 284 00109$: + 285 ; ../atanf.c: 82: r+=a[n]; + 00018A 1E 01 [ 2] 286 ldw x, (0x01, sp) + 00018C 58 [ 2] 287 sllw x + 00018D 58 [ 2] 288 sllw x + 00018E 1Cr00r00 [ 2] 289 addw x, #(_atanf_a_65536_26 + 0) + 000191 90 93 [ 1] 290 ldw y, x + 000193 90 EE 02 [ 2] 291 ldw y, (0x2, y) + 000196 FE [ 2] 292 ldw x, (x) + 000197 90 89 [ 2] 293 pushw y + 000199 89 [ 2] 294 pushw x + 00019A 1E 11 [ 2] 295 ldw x, (0x11, sp) + 00019C 89 [ 2] 296 pushw x + 00019D 1E 11 [ 2] 297 ldw x, (0x11, sp) + 00019F 89 [ 2] 298 pushw x + 0001A0 CDr00r00 [ 4] 299 call ___fsadd + 0001A3 5B 08 [ 2] 300 addw sp, #8 + 301 ; ../atanf.c: 83: if(x<0.0) r=-r; + 0001A5 89 [ 2] 302 pushw x + 0001A6 90 89 [ 2] 303 pushw y + 0001A8 4B 00 [ 1] 304 push #0x00 + 0001AA 4B 00 [ 1] 305 push #0x00 + 0001AC 4B 00 [ 1] 306 push #0x00 + 0001AE 4B 00 [ 1] 307 push #0x00 + 0001B0 7B 1C [ 1] 308 ld a, (0x1c, sp) + 0001B2 88 [ 1] 309 push a + 0001B3 7B 1C [ 1] 310 ld a, (0x1c, sp) + 0001B5 88 [ 1] 311 push a + 0001B6 7B 1C [ 1] 312 ld a, (0x1c, sp) + 0001B8 88 [ 1] 313 push a + 0001B9 7B 1C [ 1] 314 ld a, (0x1c, sp) + 0001BB 88 [ 1] 315 push a + 0001BC CDr00r00 [ 4] 316 call ___fslt + 0001BF 5B 08 [ 2] 317 addw sp, #8 + 0001C1 90 85 [ 2] 318 popw y + 0001C3 85 [ 2] 319 popw x + 0001C4 4D [ 1] 320 tnz a + 0001C5 27 05 [ 1] 321 jreq 00111$ + 0001C7 90 58 [ 2] 322 sllw y + 0001C9 8C [ 1] 323 ccf + 0001CA 90 56 [ 2] 324 rrcw y + 0001CC 325 00111$: + 326 ; ../atanf.c: 84: return r; + 327 ; ../atanf.c: 85: } + 0001CC 5B 0E [ 2] 328 addw sp, #14 + 0001CE 81 [ 4] 329 ret + 330 .area CODE + 331 .area CONST + 000000 332 _atanf_a_65536_26: + 000000 00 00 00 00 333 .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00 + 000004 3F 06 0A 92 334 .byte #0x3f, #0x06, #0x0a, #0x92 ; 5.235988e-01 + 000008 3F C9 0F DB 335 .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00 + 00000C 3F 86 0A 92 336 .byte #0x3f, #0x86, #0x0a, #0x92 ; 1.047198e+00 + 337 .area INITIALIZER + 338 .area CABS (ABS) diff --git a/device/lib/stm8/atanf.rel b/device/lib/stm8/atanf.rel new file mode 100644 index 0000000..dc08cb1 --- /dev/null +++ b/device/lib/stm8/atanf.rel @@ -0,0 +1,125 @@ +XH3 +H B areas 8 global symbols +M atanf +O -mstm8 +S ___fssub Ref000000 +S ___fsmul Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S _fabsf Ref000000 +S ___fsdiv Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 10 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1CF flags 0 addr 0 +S _atanf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0E 5F 1F 01 1E 13 89 1E 13 89 CD +R 00 00 00 09 +T 00 00 0C 00 00 5B 04 1F 05 17 03 1E 05 89 1E 05 +R 00 00 00 09 02 03 00 05 +T 00 00 19 89 5F 89 4B 80 4B 3F CD 00 00 5B 08 4D +R 00 00 00 09 02 0B 00 02 +T 00 00 26 27 1A 1E 05 89 1E 05 89 5F 89 4B 80 4B +R 00 00 00 09 +T 00 00 33 3F CD 00 00 5B 08 1F 05 17 03 AE 00 02 +R 00 00 00 09 02 05 00 06 +T 00 00 40 1F 01 +R 00 00 00 09 +T 00 00 42 +R 00 00 00 09 +T 00 00 42 1E 05 89 1E 05 89 4B A3 4B 30 4B 89 4B +R 00 00 00 09 +T 00 00 4F 3E CD 00 00 5B 08 4D 27 63 1E 05 89 1E +R 00 00 00 09 02 05 00 02 +T 00 00 5C 05 89 4B AF 4B 67 4B 3B 4B 3F CD 00 00 +R 00 00 00 09 02 0E 00 01 +T 00 00 69 5B 08 4B 00 4B 00 4B 80 4B 3F 89 90 89 +R 00 00 00 09 +T 00 00 76 CD 00 00 5B 08 1F 0D 1E 05 89 1E 05 89 +R 00 00 00 09 02 04 00 00 +T 00 00 83 1E 11 89 90 89 CD 00 00 5B 08 1F 0D 17 +R 00 00 00 09 02 09 00 04 +T 00 00 90 0B 4B D7 4B B3 4B DD 4B 3F 1E 09 89 1E +R 00 00 00 09 +T 00 00 9D 09 89 CD 00 00 5B 08 89 90 89 1E 11 89 +R 00 00 00 09 02 06 00 04 +T 00 00 AA 1E 11 89 CD 00 00 5B 08 1F 05 17 03 1E +R 00 00 00 09 02 07 00 06 +T 00 00 B7 01 5C 1F 01 +R 00 00 00 09 +T 00 00 BB +R 00 00 00 09 +T 00 00 BB 1E 05 89 1E 05 89 CD 00 00 5B 04 4B 00 +R 00 00 00 09 02 0A 00 05 +T 00 00 C8 4B 00 4B 80 4B 39 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 02 +T 00 00 D5 08 6B 0E 27 0B 16 05 17 0D 16 03 17 0B +R 00 00 00 09 +T 00 00 E2 CC 01 78 +R 00 00 00 09 00 04 00 09 +T 00 00 E5 +R 00 00 00 09 +T 00 00 E5 1E 05 89 1E 05 89 1E 09 89 1E 09 89 CD +R 00 00 00 09 +T 00 00 F2 00 00 5B 08 1F 09 17 07 1E 09 89 1E 09 +R 00 00 00 09 02 03 00 01 +T 00 00 FF 89 4B 91 4B 86 4B 50 4B BD CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 01 0C 08 4B F6 4B 10 4B F1 4B BE 89 90 89 CD +R 00 00 00 09 +T 00 01 19 00 00 5B 08 1F 0D 1E 09 89 1E 09 89 1E +R 00 00 00 09 02 03 00 04 +T 00 01 26 11 89 90 89 CD 00 00 5B 08 1F 0D 1E 05 +R 00 00 00 09 02 08 00 01 +T 00 01 33 89 1E 05 89 1E 11 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 01 40 08 1F 0D 17 0B 4B D3 4B CC 4B B4 4B 3F +R 00 00 00 09 +T 00 01 4D 1E 0D 89 1E 0D 89 CD 00 00 5B 08 89 90 +R 00 00 00 09 02 0A 00 04 +T 00 01 5A 89 1E 11 89 1E 11 89 CD 00 00 5B 08 89 +R 00 00 00 09 02 0B 00 06 +T 00 01 67 90 89 1E 09 89 1E 09 89 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 04 +T 00 01 74 1F 0D 17 0B +R 00 00 00 09 +T 00 01 78 +R 00 00 00 09 +T 00 01 78 1E 01 A3 00 01 2D 0B 16 0D 1E 0B 58 8C +R 00 00 00 09 +T 00 01 85 56 17 0D 1F 0B +R 00 00 00 09 +T 00 01 8A +R 00 00 00 09 +T 00 01 8A 1E 01 58 58 1C 00 00 90 93 90 EE 02 FE +R 00 00 00 09 00 08 00 07 +T 00 01 97 90 89 89 1E 11 89 1E 11 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 04 +T 00 01 A4 08 89 90 89 4B 00 4B 00 4B 00 4B 00 7B +R 00 00 00 09 +T 00 01 B1 1C 88 7B 1C 88 7B 1C 88 7B 1C 88 CD +R 00 00 00 09 +T 00 01 BD 00 00 5B 08 90 85 85 4D 27 05 90 58 8C +R 00 00 00 09 02 03 00 02 +T 00 01 CA 90 56 +R 00 00 00 09 +T 00 01 CC +R 00 00 00 09 +T 00 01 CC 5B 0E 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 07 +T 00 00 00 00 00 00 00 3F 06 0A 92 3F C9 0F DB 3F +R 00 00 00 07 +T 00 00 0D 86 0A 92 +R 00 00 00 07 diff --git a/device/lib/stm8/atanf.sym b/device/lib/stm8/atanf.sym new file mode 100644 index 0000000..b94f1cc --- /dev/null +++ b/device/lib/stm8/atanf.sym @@ -0,0 +1,35 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + ___fsdiv ****** GX + ___fslt ****** GX + ___fsmul ****** GX + ___fssub ****** GX + 9 _atanf 000000 GR + 7 _atanf_a_65536_26 000000 R + _fabsf ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 10 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1CF flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/atoi.asm b/device/lib/stm8/atoi.asm new file mode 100644 index 0000000..444914f --- /dev/null +++ b/device/lib/stm8/atoi.asm @@ -0,0 +1,145 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module atoi + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _atoi +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../atoi.c: 34: int atoi(const char *nptr) +; ----------------------------------------- +; function atoi +; ----------------------------------------- +_atoi: + sub sp, #7 +; ../atoi.c: 36: int ret = 0; + clrw x + ldw (0x04, sp), x +; ../atoi.c: 39: while (isblank (*nptr)) + ldw y, (0x0a, sp) +00101$: + ld a, (y) + ld (0x03, sp), a +; ../atoi.c: 40: nptr++; + ldw x, y + incw x + ldw (0x06, sp), x +; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + cp a, #0x20 + jreq 00115$ + cp a, #0x09 + jrne 00131$ +00115$: +; ../atoi.c: 40: nptr++; + ldw y, (0x06, sp) + jra 00101$ +00131$: + ldw (0x0a, sp), y +; ../atoi.c: 42: neg = (*nptr == '-'); + ld a, (0x03, sp) + sub a, #0x2d + jrne 00168$ + inc a + .byte 0x21 +00168$: + clr a +00169$: +; ../atoi.c: 44: if (*nptr == '-' || *nptr == '+') + ld (0x02, sp), a + jrne 00104$ + ld a, (0x03, sp) + cp a, #0x2b + jrne 00129$ +00104$: +; ../atoi.c: 45: nptr++; + ldw y, (0x06, sp) + ldw (0x0a, sp), y +; ../atoi.c: 47: while (isdigit (*nptr)) +00129$: + ldw y, (0x0a, sp) + ldw (0x06, sp), y +00107$: + ldw x, (0x06, sp) + ld a, (x) + ld (0x03, sp), a +; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + ld (0x01, sp), a + cp a, #0x30 + jrc 00109$ + ld a, (0x01, sp) + cp a, #0x39 + jrugt 00109$ +; ../atoi.c: 48: ret = ret * 10 + (*(nptr++) - '0'); + ldw x, (0x04, sp) + sllw x + sllw x + addw x, (0x04, sp) + sllw x + ldw (0x04, sp), x + ldw x, (0x06, sp) + incw x + ldw (0x06, sp), x + clrw x + ld a, (0x03, sp) + ld xl, a + subw x, #0x0030 + addw x, (0x04, sp) + ldw (0x04, sp), x + jra 00107$ +00109$: +; ../atoi.c: 50: return (neg ? -ret : ret); // Since -INT_MIN is INT_MIN in sdcc, the result value always turns out ok. + tnz (0x02, sp) + jreq 00120$ + ldw x, (0x04, sp) + negw x + .byte 0xc5 +00120$: + ldw x, (0x04, sp) +00121$: +; ../atoi.c: 51: } + addw sp, #7 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/atoi.lst b/device/lib/stm8/atoi.lst new file mode 100644 index 0000000..113ded5 --- /dev/null +++ b/device/lib/stm8/atoi.lst @@ -0,0 +1,145 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module atoi + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _atoi + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../atoi.c: 34: int atoi(const char *nptr) + 50 ; ----------------------------------------- + 51 ; function atoi + 52 ; ----------------------------------------- + 000000 53 _atoi: + 000000 52 07 [ 2] 54 sub sp, #7 + 55 ; ../atoi.c: 36: int ret = 0; + 000002 5F [ 1] 56 clrw x + 000003 1F 04 [ 2] 57 ldw (0x04, sp), x + 58 ; ../atoi.c: 39: while (isblank (*nptr)) + 000005 16 0A [ 2] 59 ldw y, (0x0a, sp) + 000007 60 00101$: + 000007 90 F6 [ 1] 61 ld a, (y) + 000009 6B 03 [ 1] 62 ld (0x03, sp), a + 63 ; ../atoi.c: 40: nptr++; + 00000B 93 [ 1] 64 ldw x, y + 00000C 5C [ 1] 65 incw x + 00000D 1F 06 [ 2] 66 ldw (0x06, sp), x + 67 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + 00000F A1 20 [ 1] 68 cp a, #0x20 + 000011 27 04 [ 1] 69 jreq 00115$ + 000013 A1 09 [ 1] 70 cp a, #0x09 + 000015 26 04 [ 1] 71 jrne 00131$ + 000017 72 00115$: + 73 ; ../atoi.c: 40: nptr++; + 000017 16 06 [ 2] 74 ldw y, (0x06, sp) + 000019 20 EC [ 2] 75 jra 00101$ + 00001B 76 00131$: + 00001B 17 0A [ 2] 77 ldw (0x0a, sp), y + 78 ; ../atoi.c: 42: neg = (*nptr == '-'); + 00001D 7B 03 [ 1] 79 ld a, (0x03, sp) + 00001F A0 2D [ 1] 80 sub a, #0x2d + 000021 26 02 [ 1] 81 jrne 00168$ + 000023 4C [ 1] 82 inc a + 000024 21 83 .byte 0x21 + 000025 84 00168$: + 000025 4F [ 1] 85 clr a + 000026 86 00169$: + 87 ; ../atoi.c: 44: if (*nptr == '-' || *nptr == '+') + 000026 6B 02 [ 1] 88 ld (0x02, sp), a + 000028 26 06 [ 1] 89 jrne 00104$ + 00002A 7B 03 [ 1] 90 ld a, (0x03, sp) + 00002C A1 2B [ 1] 91 cp a, #0x2b + 00002E 26 04 [ 1] 92 jrne 00129$ + 000030 93 00104$: + 94 ; ../atoi.c: 45: nptr++; + 000030 16 06 [ 2] 95 ldw y, (0x06, sp) + 000032 17 0A [ 2] 96 ldw (0x0a, sp), y + 97 ; ../atoi.c: 47: while (isdigit (*nptr)) + 000034 98 00129$: + 000034 16 0A [ 2] 99 ldw y, (0x0a, sp) + 000036 17 06 [ 2] 100 ldw (0x06, sp), y + 000038 101 00107$: + 000038 1E 06 [ 2] 102 ldw x, (0x06, sp) + 00003A F6 [ 1] 103 ld a, (x) + 00003B 6B 03 [ 1] 104 ld (0x03, sp), a + 105 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 00003D 6B 01 [ 1] 106 ld (0x01, sp), a + 00003F A1 30 [ 1] 107 cp a, #0x30 + 000041 25 23 [ 1] 108 jrc 00109$ + 000043 7B 01 [ 1] 109 ld a, (0x01, sp) + 000045 A1 39 [ 1] 110 cp a, #0x39 + 000047 22 1D [ 1] 111 jrugt 00109$ + 112 ; ../atoi.c: 48: ret = ret * 10 + (*(nptr++) - '0'); + 000049 1E 04 [ 2] 113 ldw x, (0x04, sp) + 00004B 58 [ 2] 114 sllw x + 00004C 58 [ 2] 115 sllw x + 00004D 72 FB 04 [ 2] 116 addw x, (0x04, sp) + 000050 58 [ 2] 117 sllw x + 000051 1F 04 [ 2] 118 ldw (0x04, sp), x + 000053 1E 06 [ 2] 119 ldw x, (0x06, sp) + 000055 5C [ 1] 120 incw x + 000056 1F 06 [ 2] 121 ldw (0x06, sp), x + 000058 5F [ 1] 122 clrw x + 000059 7B 03 [ 1] 123 ld a, (0x03, sp) + 00005B 97 [ 1] 124 ld xl, a + 00005C 1D 00 30 [ 2] 125 subw x, #0x0030 + 00005F 72 FB 04 [ 2] 126 addw x, (0x04, sp) + 000062 1F 04 [ 2] 127 ldw (0x04, sp), x + 000064 20 D2 [ 2] 128 jra 00107$ + 000066 129 00109$: + 130 ; ../atoi.c: 50: return (neg ? -ret : ret); // Since -INT_MIN is INT_MIN in sdcc, the result value always turns out ok. + 000066 0D 02 [ 1] 131 tnz (0x02, sp) + 000068 27 04 [ 1] 132 jreq 00120$ + 00006A 1E 04 [ 2] 133 ldw x, (0x04, sp) + 00006C 50 [ 2] 134 negw x + 00006D C5 135 .byte 0xc5 + 00006E 136 00120$: + 00006E 1E 04 [ 2] 137 ldw x, (0x04, sp) + 000070 138 00121$: + 139 ; ../atoi.c: 51: } + 000070 5B 07 [ 2] 140 addw sp, #7 + 000072 81 [ 4] 141 ret + 142 .area CODE + 143 .area CONST + 144 .area INITIALIZER + 145 .area CABS (ABS) diff --git a/device/lib/stm8/atoi.rel b/device/lib/stm8/atoi.rel new file mode 100644 index 0000000..9f563c2 --- /dev/null +++ b/device/lib/stm8/atoi.rel @@ -0,0 +1,73 @@ +XH3 +H B areas 2 global symbols +M atoi +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 73 flags 0 addr 0 +S _atoi Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 07 5F 1F 04 16 0A +R 00 00 00 09 +T 00 00 07 +R 00 00 00 09 +T 00 00 07 90 F6 6B 03 93 5C 1F 06 A1 20 27 04 A1 +R 00 00 00 09 +T 00 00 14 09 26 04 +R 00 00 00 09 +T 00 00 17 +R 00 00 00 09 +T 00 00 17 16 06 20 EC +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 17 0A 7B 03 A0 2D 26 02 4C 21 +R 00 00 00 09 +T 00 00 25 +R 00 00 00 09 +T 00 00 25 4F +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 6B 02 26 06 7B 03 A1 2B 26 04 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 16 06 17 0A +R 00 00 00 09 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 16 0A 17 06 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1E 06 F6 6B 03 6B 01 A1 30 25 23 7B 01 +R 00 00 00 09 +T 00 00 45 A1 39 22 1D 1E 04 58 58 72 FB 04 58 1F +R 00 00 00 09 +T 00 00 52 04 1E 06 5C 1F 06 5F 7B 03 97 1D 00 30 +R 00 00 00 09 +T 00 00 5F 72 FB 04 1F 04 20 D2 +R 00 00 00 09 +T 00 00 66 +R 00 00 00 09 +T 00 00 66 0D 02 27 04 1E 04 50 C5 +R 00 00 00 09 +T 00 00 6E +R 00 00 00 09 +T 00 00 6E 1E 04 +R 00 00 00 09 +T 00 00 70 +R 00 00 00 09 +T 00 00 70 5B 07 81 +R 00 00 00 09 diff --git a/device/lib/stm8/atoi.sym b/device/lib/stm8/atoi.sym new file mode 100644 index 0000000..dd8a1af --- /dev/null +++ b/device/lib/stm8/atoi.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _atoi 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 73 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/atol.asm b/device/lib/stm8/atol.asm new file mode 100644 index 0000000..4c5aac9 --- /dev/null +++ b/device/lib/stm8/atol.asm @@ -0,0 +1,177 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module atol + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _atol +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../atol.c: 34: long int atol(const char *nptr) +; ----------------------------------------- +; function atol +; ----------------------------------------- +_atol: + sub sp, #9 +; ../atol.c: 36: long int ret = 0; + clrw x + ldw (0x03, sp), x + ldw (0x01, sp), x +; ../atol.c: 39: while (isblank (*nptr)) + ldw y, (0x0c, sp) + ldw (0x07, sp), y +00101$: + ldw x, (0x07, sp) + ld a, (x) + ld (0x09, sp), a +; ../atol.c: 40: nptr++; + ldw x, (0x07, sp) + incw x +; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + cp a, #0x20 + jreq 00115$ + cp a, #0x09 + jrne 00131$ +00115$: +; ../atol.c: 40: nptr++; + ldw (0x07, sp), x + jra 00101$ +00131$: + ldw y, (0x07, sp) + ldw (0x0c, sp), y +; ../atol.c: 42: neg = (*nptr == '-'); + ld a, (0x09, sp) + sub a, #0x2d + jrne 00168$ + inc a + .byte 0x21 +00168$: + clr a +00169$: +; ../atol.c: 44: if (*nptr == '-' || *nptr == '+') + ld (0x05, sp), a + jrne 00104$ + ld a, (0x09, sp) + cp a, #0x2b + jrne 00129$ +00104$: +; ../atol.c: 45: nptr++; + ldw (0x0c, sp), x +; ../atol.c: 47: while (isdigit (*nptr)) +00129$: + ldw y, (0x0c, sp) + ldw (0x08, sp), y +00107$: + ldw x, (0x08, sp) + ld a, (x) + ld (0x06, sp), a +; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + ld (0x07, sp), a + cp a, #0x30 + jrc 00109$ + ld a, (0x07, sp) + cp a, #0x39 + jrugt 00109$ +; ../atol.c: 48: ret = ret * 10 + (*(nptr++) - '0'); + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + push #0x0a + clrw x + pushw x + push #0x00 + call __mullong + addw sp, #8 + ldw (0x03, sp), x + ldw (0x01, sp), y + ldw x, (0x08, sp) + incw x + ldw (0x08, sp), x + clrw x + ld a, (0x06, sp) + ld xl, a + subw x, #0x0030 + exgw x, y + clrw x + tnzw y + jrpl 00177$ + decw x +00177$: + addw y, (0x03, sp) + ld a, xl + adc a, (0x02, sp) + rlwa x + adc a, (0x01, sp) + ld xh, a + ldw (0x03, sp), y + ldw (0x01, sp), x + jra 00107$ +00109$: +; ../atol.c: 50: return (neg ? -ret : ret); // Since -LONG_MIN is LONG_MIN in sdcc, the result value always turns out ok. + tnz (0x05, sp) + jreq 00120$ + ldw y, (0x03, sp) + negw y + ldw x, (0x01, sp) + jrnc 00179$ + incw x +00179$: + negw x + ldw (0x08, sp), y + ldw (0x06, sp), x + jra 00121$ +00120$: + ldw y, (0x03, sp) + ldw (0x08, sp), y + ldw y, (0x01, sp) + ldw (0x06, sp), y +00121$: + ldw x, (0x08, sp) + ldw y, (0x06, sp) +; ../atol.c: 51: } + addw sp, #9 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/atol.lst b/device/lib/stm8/atol.lst new file mode 100644 index 0000000..8818c4a --- /dev/null +++ b/device/lib/stm8/atol.lst @@ -0,0 +1,177 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module atol + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _atol + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../atol.c: 34: long int atol(const char *nptr) + 50 ; ----------------------------------------- + 51 ; function atol + 52 ; ----------------------------------------- + 000000 53 _atol: + 000000 52 09 [ 2] 54 sub sp, #9 + 55 ; ../atol.c: 36: long int ret = 0; + 000002 5F [ 1] 56 clrw x + 000003 1F 03 [ 2] 57 ldw (0x03, sp), x + 000005 1F 01 [ 2] 58 ldw (0x01, sp), x + 59 ; ../atol.c: 39: while (isblank (*nptr)) + 000007 16 0C [ 2] 60 ldw y, (0x0c, sp) + 000009 17 07 [ 2] 61 ldw (0x07, sp), y + 00000B 62 00101$: + 00000B 1E 07 [ 2] 63 ldw x, (0x07, sp) + 00000D F6 [ 1] 64 ld a, (x) + 00000E 6B 09 [ 1] 65 ld (0x09, sp), a + 66 ; ../atol.c: 40: nptr++; + 000010 1E 07 [ 2] 67 ldw x, (0x07, sp) + 000012 5C [ 1] 68 incw x + 69 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + 000013 A1 20 [ 1] 70 cp a, #0x20 + 000015 27 04 [ 1] 71 jreq 00115$ + 000017 A1 09 [ 1] 72 cp a, #0x09 + 000019 26 04 [ 1] 73 jrne 00131$ + 00001B 74 00115$: + 75 ; ../atol.c: 40: nptr++; + 00001B 1F 07 [ 2] 76 ldw (0x07, sp), x + 00001D 20 EC [ 2] 77 jra 00101$ + 00001F 78 00131$: + 00001F 16 07 [ 2] 79 ldw y, (0x07, sp) + 000021 17 0C [ 2] 80 ldw (0x0c, sp), y + 81 ; ../atol.c: 42: neg = (*nptr == '-'); + 000023 7B 09 [ 1] 82 ld a, (0x09, sp) + 000025 A0 2D [ 1] 83 sub a, #0x2d + 000027 26 02 [ 1] 84 jrne 00168$ + 000029 4C [ 1] 85 inc a + 00002A 21 86 .byte 0x21 + 00002B 87 00168$: + 00002B 4F [ 1] 88 clr a + 00002C 89 00169$: + 90 ; ../atol.c: 44: if (*nptr == '-' || *nptr == '+') + 00002C 6B 05 [ 1] 91 ld (0x05, sp), a + 00002E 26 06 [ 1] 92 jrne 00104$ + 000030 7B 09 [ 1] 93 ld a, (0x09, sp) + 000032 A1 2B [ 1] 94 cp a, #0x2b + 000034 26 02 [ 1] 95 jrne 00129$ + 000036 96 00104$: + 97 ; ../atol.c: 45: nptr++; + 000036 1F 0C [ 2] 98 ldw (0x0c, sp), x + 99 ; ../atol.c: 47: while (isdigit (*nptr)) + 000038 100 00129$: + 000038 16 0C [ 2] 101 ldw y, (0x0c, sp) + 00003A 17 08 [ 2] 102 ldw (0x08, sp), y + 00003C 103 00107$: + 00003C 1E 08 [ 2] 104 ldw x, (0x08, sp) + 00003E F6 [ 1] 105 ld a, (x) + 00003F 6B 06 [ 1] 106 ld (0x06, sp), a + 107 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 000041 6B 07 [ 1] 108 ld (0x07, sp), a + 000043 A1 30 [ 1] 109 cp a, #0x30 + 000045 25 3E [ 1] 110 jrc 00109$ + 000047 7B 07 [ 1] 111 ld a, (0x07, sp) + 000049 A1 39 [ 1] 112 cp a, #0x39 + 00004B 22 38 [ 1] 113 jrugt 00109$ + 114 ; ../atol.c: 48: ret = ret * 10 + (*(nptr++) - '0'); + 00004D 1E 03 [ 2] 115 ldw x, (0x03, sp) + 00004F 89 [ 2] 116 pushw x + 000050 1E 03 [ 2] 117 ldw x, (0x03, sp) + 000052 89 [ 2] 118 pushw x + 000053 4B 0A [ 1] 119 push #0x0a + 000055 5F [ 1] 120 clrw x + 000056 89 [ 2] 121 pushw x + 000057 4B 00 [ 1] 122 push #0x00 + 000059 CDr00r00 [ 4] 123 call __mullong + 00005C 5B 08 [ 2] 124 addw sp, #8 + 00005E 1F 03 [ 2] 125 ldw (0x03, sp), x + 000060 17 01 [ 2] 126 ldw (0x01, sp), y + 000062 1E 08 [ 2] 127 ldw x, (0x08, sp) + 000064 5C [ 1] 128 incw x + 000065 1F 08 [ 2] 129 ldw (0x08, sp), x + 000067 5F [ 1] 130 clrw x + 000068 7B 06 [ 1] 131 ld a, (0x06, sp) + 00006A 97 [ 1] 132 ld xl, a + 00006B 1D 00 30 [ 2] 133 subw x, #0x0030 + 00006E 51 [ 1] 134 exgw x, y + 00006F 5F [ 1] 135 clrw x + 000070 90 5D [ 2] 136 tnzw y + 000072 2A 01 [ 1] 137 jrpl 00177$ + 000074 5A [ 2] 138 decw x + 000075 139 00177$: + 000075 72 F9 03 [ 2] 140 addw y, (0x03, sp) + 000078 9F [ 1] 141 ld a, xl + 000079 19 02 [ 1] 142 adc a, (0x02, sp) + 00007B 02 [ 1] 143 rlwa x + 00007C 19 01 [ 1] 144 adc a, (0x01, sp) + 00007E 95 [ 1] 145 ld xh, a + 00007F 17 03 [ 2] 146 ldw (0x03, sp), y + 000081 1F 01 [ 2] 147 ldw (0x01, sp), x + 000083 20 B7 [ 2] 148 jra 00107$ + 000085 149 00109$: + 150 ; ../atol.c: 50: return (neg ? -ret : ret); // Since -LONG_MIN is LONG_MIN in sdcc, the result value always turns out ok. + 000085 0D 05 [ 1] 151 tnz (0x05, sp) + 000087 27 10 [ 1] 152 jreq 00120$ + 000089 16 03 [ 2] 153 ldw y, (0x03, sp) + 00008B 90 50 [ 2] 154 negw y + 00008D 1E 01 [ 2] 155 ldw x, (0x01, sp) + 00008F 24 01 [ 1] 156 jrnc 00179$ + 000091 5C [ 1] 157 incw x + 000092 158 00179$: + 000092 50 [ 2] 159 negw x + 000093 17 08 [ 2] 160 ldw (0x08, sp), y + 000095 1F 06 [ 2] 161 ldw (0x06, sp), x + 000097 20 08 [ 2] 162 jra 00121$ + 000099 163 00120$: + 000099 16 03 [ 2] 164 ldw y, (0x03, sp) + 00009B 17 08 [ 2] 165 ldw (0x08, sp), y + 00009D 16 01 [ 2] 166 ldw y, (0x01, sp) + 00009F 17 06 [ 2] 167 ldw (0x06, sp), y + 0000A1 168 00121$: + 0000A1 1E 08 [ 2] 169 ldw x, (0x08, sp) + 0000A3 16 06 [ 2] 170 ldw y, (0x06, sp) + 171 ; ../atol.c: 51: } + 0000A5 5B 09 [ 2] 172 addw sp, #9 + 0000A7 81 [ 4] 173 ret + 174 .area CODE + 175 .area CONST + 176 .area INITIALIZER + 177 .area CABS (ABS) diff --git a/device/lib/stm8/atol.rel b/device/lib/stm8/atol.rel new file mode 100644 index 0000000..f9aa9cb --- /dev/null +++ b/device/lib/stm8/atol.rel @@ -0,0 +1,86 @@ +XH3 +H B areas 3 global symbols +M atol +O -mstm8 +S .__.ABS. Def000000 +S __mullong Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size A8 flags 0 addr 0 +S _atol Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 09 5F 1F 03 1F 01 16 0C 17 07 +R 00 00 00 09 +T 00 00 0B +R 00 00 00 09 +T 00 00 0B 1E 07 F6 6B 09 1E 07 5C A1 20 27 04 A1 +R 00 00 00 09 +T 00 00 18 09 26 04 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 1F 07 20 EC +R 00 00 00 09 +T 00 00 1F +R 00 00 00 09 +T 00 00 1F 16 07 17 0C 7B 09 A0 2D 26 02 4C 21 +R 00 00 00 09 +T 00 00 2B +R 00 00 00 09 +T 00 00 2B 4F +R 00 00 00 09 +T 00 00 2C +R 00 00 00 09 +T 00 00 2C 6B 05 26 06 7B 09 A1 2B 26 02 +R 00 00 00 09 +T 00 00 36 +R 00 00 00 09 +T 00 00 36 1F 0C +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 16 0C 17 08 +R 00 00 00 09 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 1E 08 F6 6B 06 6B 07 A1 30 25 3E 7B 07 +R 00 00 00 09 +T 00 00 49 A1 39 22 38 1E 03 89 1E 03 89 4B 0A 5F +R 00 00 00 09 +T 00 00 56 89 4B 00 CD 00 00 5B 08 1F 03 17 01 1E +R 00 00 00 09 02 07 00 01 +T 00 00 63 08 5C 1F 08 5F 7B 06 97 1D 00 30 51 5F +R 00 00 00 09 +T 00 00 70 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 75 +R 00 00 00 09 +T 00 00 75 72 F9 03 9F 19 02 02 19 01 95 17 03 1F +R 00 00 00 09 +T 00 00 82 01 20 B7 +R 00 00 00 09 +T 00 00 85 +R 00 00 00 09 +T 00 00 85 0D 05 27 10 16 03 90 50 1E 01 24 01 5C +R 00 00 00 09 +T 00 00 92 +R 00 00 00 09 +T 00 00 92 50 17 08 1F 06 20 08 +R 00 00 00 09 +T 00 00 99 +R 00 00 00 09 +T 00 00 99 16 03 17 08 16 01 17 06 +R 00 00 00 09 +T 00 00 A1 +R 00 00 00 09 +T 00 00 A1 1E 08 16 06 5B 09 81 +R 00 00 00 09 diff --git a/device/lib/stm8/atol.sym b/device/lib/stm8/atol.sym new file mode 100644 index 0000000..563cced --- /dev/null +++ b/device/lib/stm8/atol.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + __mullong ****** GX + 9 _atol 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size A8 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/atoll.asm b/device/lib/stm8/atoll.asm new file mode 100644 index 0000000..c64dace --- /dev/null +++ b/device/lib/stm8/atoll.asm @@ -0,0 +1,51 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module atoll + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/atoll.lst b/device/lib/stm8/atoll.lst new file mode 100644 index 0000000..fe5b8cd --- /dev/null +++ b/device/lib/stm8/atoll.lst @@ -0,0 +1,51 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module atoll + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 ;-------------------------------------------------------- + 12 ; ram data + 13 ;-------------------------------------------------------- + 14 .area DATA + 15 ;-------------------------------------------------------- + 16 ; ram data + 17 ;-------------------------------------------------------- + 18 .area INITIALIZED + 19 ;-------------------------------------------------------- + 20 ; absolute external ram data + 21 ;-------------------------------------------------------- + 22 .area DABS (ABS) + 23 + 24 ; default segment ordering for linker + 25 .area HOME + 26 .area GSINIT + 27 .area GSFINAL + 28 .area CONST + 29 .area INITIALIZER + 30 .area CODE + 31 + 32 ;-------------------------------------------------------- + 33 ; global & static initialisations + 34 ;-------------------------------------------------------- + 35 .area HOME + 36 .area GSINIT + 37 .area GSFINAL + 38 .area GSINIT + 39 ;-------------------------------------------------------- + 40 ; Home + 41 ;-------------------------------------------------------- + 42 .area HOME + 43 .area HOME + 44 ;-------------------------------------------------------- + 45 ; code + 46 ;-------------------------------------------------------- + 47 .area CODE + 48 .area CODE + 49 .area CONST + 50 .area INITIALIZER + 51 .area CABS (ABS) diff --git a/device/lib/stm8/atoll.rel b/device/lib/stm8/atoll.rel new file mode 100644 index 0000000..23c8fda --- /dev/null +++ b/device/lib/stm8/atoll.rel @@ -0,0 +1,16 @@ +XH3 +H B areas 1 global symbols +M atoll +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 0 flags 0 addr 0 +A CABS size 0 flags 8 addr 0 diff --git a/device/lib/stm8/atoll.sym b/device/lib/stm8/atoll.sym new file mode 100644 index 0000000..141f02b --- /dev/null +++ b/device/lib/stm8/atoll.sym @@ -0,0 +1,28 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 0 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/bsearch.asm b/device/lib/stm8/bsearch.asm new file mode 100644 index 0000000..a0e8456 --- /dev/null +++ b/device/lib/stm8/bsearch.asm @@ -0,0 +1,117 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module bsearch + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _bsearch +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../bsearch.c: 31: void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) __reentrant) +; ----------------------------------------- +; function bsearch +; ----------------------------------------- +_bsearch: + sub sp, #10 +; ../bsearch.c: 33: for(const char *left = base; nmemb;) + ldw x, (0x0f, sp) + ldw (0x01, sp), x +00109$: +; ../bsearch.c: 35: const char *middle = left + nmemb / 2 * size; + ldw x, (0x11, sp) + jreq 00107$ + srlw x + ldw (0x03, sp), x + ldw x, (0x13, sp) + pushw x + ldw x, (0x05, sp) + pushw x + call __mulint + addw sp, #4 + addw x, (0x01, sp) +; ../bsearch.c: 36: int c = (*compar)(key, middle); + ldw (0x05, sp), x + ldw (0x07, sp), x + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x19, sp) + call (x) + addw sp, #4 + ldw (0x09, sp), x +; ../bsearch.c: 38: if(c < 0) + tnz (0x09, sp) + jrpl 00105$ +; ../bsearch.c: 39: nmemb = nmemb / 2; + ldw y, (0x03, sp) + ldw (0x11, sp), y + jra 00109$ +00105$: +; ../bsearch.c: 40: else if(c > 0) + ldw x, (0x09, sp) + cpw x, #0x0000 + jrsle 00102$ +; ../bsearch.c: 42: left = middle + size; + ldw x, (0x05, sp) + addw x, (0x13, sp) + ldw (0x01, sp), x +; ../bsearch.c: 43: nmemb = (nmemb - 1) / 2; + ldw x, (0x11, sp) + decw x + srlw x + ldw (0x11, sp), x + jra 00109$ +00102$: +; ../bsearch.c: 46: return(middle); + ldw x, (0x07, sp) +; ../bsearch.c: 49: return(0); + .byte 0x21 +00107$: + clrw x +00111$: +; ../bsearch.c: 50: } + addw sp, #10 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/bsearch.lst b/device/lib/stm8/bsearch.lst new file mode 100644 index 0000000..fa468fc --- /dev/null +++ b/device/lib/stm8/bsearch.lst @@ -0,0 +1,117 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module bsearch + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _bsearch + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../bsearch.c: 31: void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) __reentrant) + 50 ; ----------------------------------------- + 51 ; function bsearch + 52 ; ----------------------------------------- + 000000 53 _bsearch: + 000000 52 0A [ 2] 54 sub sp, #10 + 55 ; ../bsearch.c: 33: for(const char *left = base; nmemb;) + 000002 1E 0F [ 2] 56 ldw x, (0x0f, sp) + 000004 1F 01 [ 2] 57 ldw (0x01, sp), x + 000006 58 00109$: + 59 ; ../bsearch.c: 35: const char *middle = left + nmemb / 2 * size; + 000006 1E 11 [ 2] 60 ldw x, (0x11, sp) + 000008 27 43 [ 1] 61 jreq 00107$ + 00000A 54 [ 2] 62 srlw x + 00000B 1F 03 [ 2] 63 ldw (0x03, sp), x + 00000D 1E 13 [ 2] 64 ldw x, (0x13, sp) + 00000F 89 [ 2] 65 pushw x + 000010 1E 05 [ 2] 66 ldw x, (0x05, sp) + 000012 89 [ 2] 67 pushw x + 000013 CDr00r00 [ 4] 68 call __mulint + 000016 5B 04 [ 2] 69 addw sp, #4 + 000018 72 FB 01 [ 2] 70 addw x, (0x01, sp) + 71 ; ../bsearch.c: 36: int c = (*compar)(key, middle); + 00001B 1F 05 [ 2] 72 ldw (0x05, sp), x + 00001D 1F 07 [ 2] 73 ldw (0x07, sp), x + 00001F 89 [ 2] 74 pushw x + 000020 1E 0F [ 2] 75 ldw x, (0x0f, sp) + 000022 89 [ 2] 76 pushw x + 000023 1E 19 [ 2] 77 ldw x, (0x19, sp) + 000025 FD [ 4] 78 call (x) + 000026 5B 04 [ 2] 79 addw sp, #4 + 000028 1F 09 [ 2] 80 ldw (0x09, sp), x + 81 ; ../bsearch.c: 38: if(c < 0) + 00002A 0D 09 [ 1] 82 tnz (0x09, sp) + 00002C 2A 06 [ 1] 83 jrpl 00105$ + 84 ; ../bsearch.c: 39: nmemb = nmemb / 2; + 00002E 16 03 [ 2] 85 ldw y, (0x03, sp) + 000030 17 11 [ 2] 86 ldw (0x11, sp), y + 000032 20 D2 [ 2] 87 jra 00109$ + 000034 88 00105$: + 89 ; ../bsearch.c: 40: else if(c > 0) + 000034 1E 09 [ 2] 90 ldw x, (0x09, sp) + 000036 A3 00 00 [ 2] 91 cpw x, #0x0000 + 000039 2D 0F [ 1] 92 jrsle 00102$ + 93 ; ../bsearch.c: 42: left = middle + size; + 00003B 1E 05 [ 2] 94 ldw x, (0x05, sp) + 00003D 72 FB 13 [ 2] 95 addw x, (0x13, sp) + 000040 1F 01 [ 2] 96 ldw (0x01, sp), x + 97 ; ../bsearch.c: 43: nmemb = (nmemb - 1) / 2; + 000042 1E 11 [ 2] 98 ldw x, (0x11, sp) + 000044 5A [ 2] 99 decw x + 000045 54 [ 2] 100 srlw x + 000046 1F 11 [ 2] 101 ldw (0x11, sp), x + 000048 20 BC [ 2] 102 jra 00109$ + 00004A 103 00102$: + 104 ; ../bsearch.c: 46: return(middle); + 00004A 1E 07 [ 2] 105 ldw x, (0x07, sp) + 106 ; ../bsearch.c: 49: return(0); + 00004C 21 107 .byte 0x21 + 00004D 108 00107$: + 00004D 5F [ 1] 109 clrw x + 00004E 110 00111$: + 111 ; ../bsearch.c: 50: } + 00004E 5B 0A [ 2] 112 addw sp, #10 + 000050 81 [ 4] 113 ret + 114 .area CODE + 115 .area CONST + 116 .area INITIALIZER + 117 .area CABS (ABS) diff --git a/device/lib/stm8/bsearch.rel b/device/lib/stm8/bsearch.rel new file mode 100644 index 0000000..d4b38e2 --- /dev/null +++ b/device/lib/stm8/bsearch.rel @@ -0,0 +1,50 @@ +XH3 +H B areas 3 global symbols +M bsearch +O -mstm8 +S __mulint Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 51 flags 0 addr 0 +S _bsearch Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 1E 0F 1F 01 +R 00 00 00 09 +T 00 00 06 +R 00 00 00 09 +T 00 00 06 1E 11 27 43 54 1F 03 1E 13 89 1E 05 89 +R 00 00 00 09 +T 00 00 13 CD 00 00 5B 04 72 FB 01 1F 05 1F 07 89 +R 00 00 00 09 02 04 00 00 +T 00 00 20 1E 0F 89 1E 19 FD 5B 04 1F 09 0D 09 2A +R 00 00 00 09 +T 00 00 2D 06 16 03 17 11 20 D2 +R 00 00 00 09 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 1E 09 A3 00 00 2D 0F 1E 05 72 FB 13 1F +R 00 00 00 09 +T 00 00 41 01 1E 11 5A 54 1F 11 20 BC +R 00 00 00 09 +T 00 00 4A +R 00 00 00 09 +T 00 00 4A 1E 07 21 +R 00 00 00 09 +T 00 00 4D +R 00 00 00 09 +T 00 00 4D 5F +R 00 00 00 09 +T 00 00 4E +R 00 00 00 09 +T 00 00 4E 5B 0A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/bsearch.sym b/device/lib/stm8/bsearch.sym new file mode 100644 index 0000000..ccc394e --- /dev/null +++ b/device/lib/stm8/bsearch.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + __mulint ****** GX + 9 _bsearch 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 51 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/btowc.asm b/device/lib/stm8/btowc.asm new file mode 100644 index 0000000..307739b --- /dev/null +++ b/device/lib/stm8/btowc.asm @@ -0,0 +1,75 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module btowc + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _btowc +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../btowc.c: 35: wint_t btowc(int c) +; ----------------------------------------- +; function btowc +; ----------------------------------------- +_btowc: +; ../btowc.c: 37: if(c & 0x80) + tnz (0x04, sp) + jrpl 00102$ +; ../btowc.c: 38: return WEOF; + clrw x + decw x + ldw y, x + ret +00102$: +; ../btowc.c: 39: return c; + ldw x, (0x03, sp) + clrw y + tnzw x + jrpl 00111$ + decw y +00111$: +; ../btowc.c: 40: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/btowc.lst b/device/lib/stm8/btowc.lst new file mode 100644 index 0000000..3a9da25 --- /dev/null +++ b/device/lib/stm8/btowc.lst @@ -0,0 +1,75 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module btowc + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _btowc + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../btowc.c: 35: wint_t btowc(int c) + 50 ; ----------------------------------------- + 51 ; function btowc + 52 ; ----------------------------------------- + 000000 53 _btowc: + 54 ; ../btowc.c: 37: if(c & 0x80) + 000000 0D 04 [ 1] 55 tnz (0x04, sp) + 000002 2A 05 [ 1] 56 jrpl 00102$ + 57 ; ../btowc.c: 38: return WEOF; + 000004 5F [ 1] 58 clrw x + 000005 5A [ 2] 59 decw x + 000006 90 93 [ 1] 60 ldw y, x + 000008 81 [ 4] 61 ret + 000009 62 00102$: + 63 ; ../btowc.c: 39: return c; + 000009 1E 03 [ 2] 64 ldw x, (0x03, sp) + 00000B 90 5F [ 1] 65 clrw y + 00000D 5D [ 2] 66 tnzw x + 00000E 2A 02 [ 1] 67 jrpl 00111$ + 000010 90 5A [ 2] 68 decw y + 000012 69 00111$: + 70 ; ../btowc.c: 40: } + 000012 81 [ 4] 71 ret + 72 .area CODE + 73 .area CONST + 74 .area INITIALIZER + 75 .area CABS (ABS) diff --git a/device/lib/stm8/btowc.rel b/device/lib/stm8/btowc.rel new file mode 100644 index 0000000..0ddc995 --- /dev/null +++ b/device/lib/stm8/btowc.rel @@ -0,0 +1,29 @@ +XH3 +H B areas 2 global symbols +M btowc +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 13 flags 0 addr 0 +S _btowc Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 0D 04 2A 05 5F 5A 90 93 81 +R 00 00 00 09 +T 00 00 09 +R 00 00 00 09 +T 00 00 09 1E 03 90 5F 5D 2A 02 90 5A +R 00 00 00 09 +T 00 00 12 +R 00 00 00 09 +T 00 00 12 81 +R 00 00 00 09 diff --git a/device/lib/stm8/btowc.sym b/device/lib/stm8/btowc.sym new file mode 100644 index 0000000..41d32cc --- /dev/null +++ b/device/lib/stm8/btowc.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _btowc 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 13 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/c16rtomb.asm b/device/lib/stm8/c16rtomb.asm new file mode 100644 index 0000000..a63df81 --- /dev/null +++ b/device/lib/stm8/c16rtomb.asm @@ -0,0 +1,209 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module c16rtomb + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _wctomb + .globl _c16rtomb +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +_c16rtomb_sps_65536_36: + .ds 3 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../c16rtomb.c: 35: size_t c16rtomb(char *restrict s, char16_t c16, mbstate_t *restrict ps) +; ----------------------------------------- +; function c16rtomb +; ----------------------------------------- +_c16rtomb: + sub sp, #12 +; ../c16rtomb.c: 41: if(!s) + ldw x, (0x0f, sp) + jrne 00102$ +; ../c16rtomb.c: 42: s = buf; + ldw x, sp + incw x + ldw (0x0f, sp), x +00102$: +; ../c16rtomb.c: 44: if(!ps) + ldw x, (0x13, sp) + jrne 00104$ +; ../c16rtomb.c: 45: ps = &sps; + ldw x, #(_c16rtomb_sps_65536_36 + 0) + ldw (0x13, sp), x +00104$: +; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0; + ldw y, (0x13, sp) + ldw x, y + incw x + ldw (0x05, sp), x + ldw x, y + incw x + incw x + ldw (0x07, sp), x +; ../c16rtomb.c: 47: if (!c16) // 0 always resets conversion state. + ldw x, (0x11, sp) + jrne 00119$ +; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0; + ldw x, (0x07, sp) + clr (x) + ldw x, (0x05, sp) + clr (x) +; ../c16rtomb.c: 50: codepoint = 0; + clrw x + ldw (0x0b, sp), x + ldw (0x09, sp), x + jp 00120$ +00119$: +; ../c16rtomb.c: 52: else if(ps->c[1] || ps->c[2]) // We already have the high surrogate. Now get the low surrogate + ldw x, (0x05, sp) + ld a, (x) + ld yl, a + tnz a + jrne 00114$ + ldw x, (0x07, sp) + ld a, (x) + jreq 00115$ +00114$: +; ../c16rtomb.c: 56: if(c16 < 0xdc00 || c16 > 0xdfff) + ldw x, (0x11, sp) + cpw x, #0xdc00 + jrnc 00169$ + jp 00121$ +00169$: + ldw x, (0x11, sp) + cpw x, #0xdfff + jrugt 00121$ +; ../c16rtomb.c: 59: high_surrogate = ps->c[1] + (ps->c[2] << 8); + exg a, yl + ld (0x0a, sp), a + exg a, yl + clr (0x09, sp) + ldw y, (0x07, sp) + ld a, (y) + ld xh, a + clr (0x0c, sp) + ld a, (0x0c, sp) + ld xl, a + addw x, (0x09, sp) +; ../c16rtomb.c: 60: ps->c[1] = ps->c[2] = 0; + ldw y, (0x07, sp) + clr (y) + ldw y, (0x05, sp) + clr (y) +; ../c16rtomb.c: 61: codepoint = (high_surrogate << 10) - (0xd800 << 10) + c16 - 0xdc00 + 0x10000; + clr a + rlwa x + sllw x + sllw x + addw x, (0x11, sp) + ldw (0x0b, sp), x + clr (0x0a, sp) + clr (0x09, sp) + ldw x, (0x0b, sp) + addw x, #0x2400 + ldw y, (0x09, sp) + jrnc 00171$ + incw y +00171$: + ldw (0x0b, sp), x + ldw (0x09, sp), y + jra 00120$ +00115$: +; ../c16rtomb.c: 63: else if(c16 < 0xd7ff || c16 >= 0xe000) // Basic multilingual plane. + ldw x, (0x11, sp) + cpw x, #0xd7ff + jrc 00110$ + cpw x, #0xe000 + jrc 00111$ +00110$: +; ../c16rtomb.c: 64: codepoint = c16; + ldw y, (0x11, sp) + clrw x + ldw (0x0b, sp), y + ldw (0x09, sp), x + jra 00120$ +00111$: +; ../c16rtomb.c: 67: if(c16 > 0xdbff) + ldw x, (0x11, sp) + cpw x, #0xdbff + jrugt 00121$ +; ../c16rtomb.c: 70: ps->c[1] = c16 & 0xff; + ld a, (0x12, sp) + ldw x, (0x05, sp) + ld (x), a +; ../c16rtomb.c: 71: ps->c[2] = c16 >> 8; + ld a, (0x11, sp) + ld (0x0c, sp), a + clr (0x0b, sp) + ld a, (0x0c, sp) + ldw x, (0x07, sp) + ld (x), a +; ../c16rtomb.c: 72: return(0); + clrw x + jra 00122$ +00120$: +; ../c16rtomb.c: 75: return(wctomb(s, codepoint)); + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call _wctomb + addw sp, #6 + jra 00122$ +; ../c16rtomb.c: 77: eilseq: +00121$: +; ../c16rtomb.c: 78: errno = EILSEQ; + ldw x, #0x0054 + ldw _errno+0, x +; ../c16rtomb.c: 79: return(-1); + clrw x + decw x +00122$: +; ../c16rtomb.c: 80: } + addw sp, #12 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/c16rtomb.lst b/device/lib/stm8/c16rtomb.lst new file mode 100644 index 0000000..79b77a2 --- /dev/null +++ b/device/lib/stm8/c16rtomb.lst @@ -0,0 +1,209 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module c16rtomb + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _wctomb + 12 .globl _c16rtomb + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 000000 17 _c16rtomb_sps_65536_36: + 000000 18 .ds 3 + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../c16rtomb.c: 35: size_t c16rtomb(char *restrict s, char16_t c16, mbstate_t *restrict ps) + 53 ; ----------------------------------------- + 54 ; function c16rtomb + 55 ; ----------------------------------------- + 000000 56 _c16rtomb: + 000000 52 0C [ 2] 57 sub sp, #12 + 58 ; ../c16rtomb.c: 41: if(!s) + 000002 1E 0F [ 2] 59 ldw x, (0x0f, sp) + 000004 26 04 [ 1] 60 jrne 00102$ + 61 ; ../c16rtomb.c: 42: s = buf; + 000006 96 [ 1] 62 ldw x, sp + 000007 5C [ 1] 63 incw x + 000008 1F 0F [ 2] 64 ldw (0x0f, sp), x + 00000A 65 00102$: + 66 ; ../c16rtomb.c: 44: if(!ps) + 00000A 1E 13 [ 2] 67 ldw x, (0x13, sp) + 00000C 26 05 [ 1] 68 jrne 00104$ + 69 ; ../c16rtomb.c: 45: ps = &sps; + 00000E AEr00r00 [ 2] 70 ldw x, #(_c16rtomb_sps_65536_36 + 0) + 000011 1F 13 [ 2] 71 ldw (0x13, sp), x + 000013 72 00104$: + 73 ; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0; + 000013 16 13 [ 2] 74 ldw y, (0x13, sp) + 000015 93 [ 1] 75 ldw x, y + 000016 5C [ 1] 76 incw x + 000017 1F 05 [ 2] 77 ldw (0x05, sp), x + 000019 93 [ 1] 78 ldw x, y + 00001A 5C [ 1] 79 incw x + 00001B 5C [ 1] 80 incw x + 00001C 1F 07 [ 2] 81 ldw (0x07, sp), x + 82 ; ../c16rtomb.c: 47: if (!c16) // 0 always resets conversion state. + 00001E 1E 11 [ 2] 83 ldw x, (0x11, sp) + 000020 26 0E [ 1] 84 jrne 00119$ + 85 ; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0; + 000022 1E 07 [ 2] 86 ldw x, (0x07, sp) + 000024 7F [ 1] 87 clr (x) + 000025 1E 05 [ 2] 88 ldw x, (0x05, sp) + 000027 7F [ 1] 89 clr (x) + 90 ; ../c16rtomb.c: 50: codepoint = 0; + 000028 5F [ 1] 91 clrw x + 000029 1F 0B [ 2] 92 ldw (0x0b, sp), x + 00002B 1F 09 [ 2] 93 ldw (0x09, sp), x + 00002D CCr00rB6 [ 2] 94 jp 00120$ + 000030 95 00119$: + 96 ; ../c16rtomb.c: 52: else if(ps->c[1] || ps->c[2]) // We already have the high surrogate. Now get the low surrogate + 000030 1E 05 [ 2] 97 ldw x, (0x05, sp) + 000032 F6 [ 1] 98 ld a, (x) + 000033 90 97 [ 1] 99 ld yl, a + 000035 4D [ 1] 100 tnz a + 000036 26 05 [ 1] 101 jrne 00114$ + 000038 1E 07 [ 2] 102 ldw x, (0x07, sp) + 00003A F6 [ 1] 103 ld a, (x) + 00003B 27 4A [ 1] 104 jreq 00115$ + 00003D 105 00114$: + 106 ; ../c16rtomb.c: 56: if(c16 < 0xdc00 || c16 > 0xdfff) + 00003D 1E 11 [ 2] 107 ldw x, (0x11, sp) + 00003F A3 DC 00 [ 2] 108 cpw x, #0xdc00 + 000042 24 03 [ 1] 109 jrnc 00169$ + 000044 CCr00rC6 [ 2] 110 jp 00121$ + 000047 111 00169$: + 000047 1E 11 [ 2] 112 ldw x, (0x11, sp) + 000049 A3 DF FF [ 2] 113 cpw x, #0xdfff + 00004C 22 78 [ 1] 114 jrugt 00121$ + 115 ; ../c16rtomb.c: 59: high_surrogate = ps->c[1] + (ps->c[2] << 8); + 00004E 61 [ 1] 116 exg a, yl + 00004F 6B 0A [ 1] 117 ld (0x0a, sp), a + 000051 61 [ 1] 118 exg a, yl + 000052 0F 09 [ 1] 119 clr (0x09, sp) + 000054 16 07 [ 2] 120 ldw y, (0x07, sp) + 000056 90 F6 [ 1] 121 ld a, (y) + 000058 95 [ 1] 122 ld xh, a + 000059 0F 0C [ 1] 123 clr (0x0c, sp) + 00005B 7B 0C [ 1] 124 ld a, (0x0c, sp) + 00005D 97 [ 1] 125 ld xl, a + 00005E 72 FB 09 [ 2] 126 addw x, (0x09, sp) + 127 ; ../c16rtomb.c: 60: ps->c[1] = ps->c[2] = 0; + 000061 16 07 [ 2] 128 ldw y, (0x07, sp) + 000063 90 7F [ 1] 129 clr (y) + 000065 16 05 [ 2] 130 ldw y, (0x05, sp) + 000067 90 7F [ 1] 131 clr (y) + 132 ; ../c16rtomb.c: 61: codepoint = (high_surrogate << 10) - (0xd800 << 10) + c16 - 0xdc00 + 0x10000; + 000069 4F [ 1] 133 clr a + 00006A 02 [ 1] 134 rlwa x + 00006B 58 [ 2] 135 sllw x + 00006C 58 [ 2] 136 sllw x + 00006D 72 FB 11 [ 2] 137 addw x, (0x11, sp) + 000070 1F 0B [ 2] 138 ldw (0x0b, sp), x + 000072 0F 0A [ 1] 139 clr (0x0a, sp) + 000074 0F 09 [ 1] 140 clr (0x09, sp) + 000076 1E 0B [ 2] 141 ldw x, (0x0b, sp) + 000078 1C 24 00 [ 2] 142 addw x, #0x2400 + 00007B 16 09 [ 2] 143 ldw y, (0x09, sp) + 00007D 24 02 [ 1] 144 jrnc 00171$ + 00007F 90 5C [ 1] 145 incw y + 000081 146 00171$: + 000081 1F 0B [ 2] 147 ldw (0x0b, sp), x + 000083 17 09 [ 2] 148 ldw (0x09, sp), y + 000085 20 2F [ 2] 149 jra 00120$ + 000087 150 00115$: + 151 ; ../c16rtomb.c: 63: else if(c16 < 0xd7ff || c16 >= 0xe000) // Basic multilingual plane. + 000087 1E 11 [ 2] 152 ldw x, (0x11, sp) + 000089 A3 D7 FF [ 2] 153 cpw x, #0xd7ff + 00008C 25 05 [ 1] 154 jrc 00110$ + 00008E A3 E0 00 [ 2] 155 cpw x, #0xe000 + 000091 25 09 [ 1] 156 jrc 00111$ + 000093 157 00110$: + 158 ; ../c16rtomb.c: 64: codepoint = c16; + 000093 16 11 [ 2] 159 ldw y, (0x11, sp) + 000095 5F [ 1] 160 clrw x + 000096 17 0B [ 2] 161 ldw (0x0b, sp), y + 000098 1F 09 [ 2] 162 ldw (0x09, sp), x + 00009A 20 1A [ 2] 163 jra 00120$ + 00009C 164 00111$: + 165 ; ../c16rtomb.c: 67: if(c16 > 0xdbff) + 00009C 1E 11 [ 2] 166 ldw x, (0x11, sp) + 00009E A3 DB FF [ 2] 167 cpw x, #0xdbff + 0000A1 22 23 [ 1] 168 jrugt 00121$ + 169 ; ../c16rtomb.c: 70: ps->c[1] = c16 & 0xff; + 0000A3 7B 12 [ 1] 170 ld a, (0x12, sp) + 0000A5 1E 05 [ 2] 171 ldw x, (0x05, sp) + 0000A7 F7 [ 1] 172 ld (x), a + 173 ; ../c16rtomb.c: 71: ps->c[2] = c16 >> 8; + 0000A8 7B 11 [ 1] 174 ld a, (0x11, sp) + 0000AA 6B 0C [ 1] 175 ld (0x0c, sp), a + 0000AC 0F 0B [ 1] 176 clr (0x0b, sp) + 0000AE 7B 0C [ 1] 177 ld a, (0x0c, sp) + 0000B0 1E 07 [ 2] 178 ldw x, (0x07, sp) + 0000B2 F7 [ 1] 179 ld (x), a + 180 ; ../c16rtomb.c: 72: return(0); + 0000B3 5F [ 1] 181 clrw x + 0000B4 20 18 [ 2] 182 jra 00122$ + 0000B6 183 00120$: + 184 ; ../c16rtomb.c: 75: return(wctomb(s, codepoint)); + 0000B6 1E 0B [ 2] 185 ldw x, (0x0b, sp) + 0000B8 89 [ 2] 186 pushw x + 0000B9 1E 0B [ 2] 187 ldw x, (0x0b, sp) + 0000BB 89 [ 2] 188 pushw x + 0000BC 1E 13 [ 2] 189 ldw x, (0x13, sp) + 0000BE 89 [ 2] 190 pushw x + 0000BF CDr00r00 [ 4] 191 call _wctomb + 0000C2 5B 06 [ 2] 192 addw sp, #6 + 0000C4 20 08 [ 2] 193 jra 00122$ + 194 ; ../c16rtomb.c: 77: eilseq: + 0000C6 195 00121$: + 196 ; ../c16rtomb.c: 78: errno = EILSEQ; + 0000C6 AE 00 54 [ 2] 197 ldw x, #0x0054 + 0000C9 CFu00u00 [ 2] 198 ldw _errno+0, x + 199 ; ../c16rtomb.c: 79: return(-1); + 0000CC 5F [ 1] 200 clrw x + 0000CD 5A [ 2] 201 decw x + 0000CE 202 00122$: + 203 ; ../c16rtomb.c: 80: } + 0000CE 5B 0C [ 2] 204 addw sp, #12 + 0000D0 81 [ 4] 205 ret + 206 .area CODE + 207 .area CONST + 208 .area INITIALIZER + 209 .area CABS (ABS) diff --git a/device/lib/stm8/c16rtomb.rel b/device/lib/stm8/c16rtomb.rel new file mode 100644 index 0000000..5648d0b --- /dev/null +++ b/device/lib/stm8/c16rtomb.rel @@ -0,0 +1,91 @@ +XH3 +H B areas 4 global symbols +M c16rtomb +O -mstm8 +S _errno Ref000000 +S .__.ABS. Def000000 +S _wctomb Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 3 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size D1 flags 0 addr 0 +S _c16rtomb Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0C 1E 0F 26 04 96 5C 1F 0F +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 1E 13 26 05 AE 00 00 1F 13 +R 00 00 00 09 00 08 00 01 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 16 13 93 5C 1F 05 93 5C 5C 1F 07 1E 11 +R 00 00 00 09 +T 00 00 20 26 0E 1E 07 7F 1E 05 7F 5F 1F 0B 1F 09 +R 00 00 00 09 +T 00 00 2D CC 00 B6 +R 00 00 00 09 00 04 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 1E 05 F6 90 97 4D 26 05 1E 07 F6 27 4A +R 00 00 00 09 +T 00 00 3D +R 00 00 00 09 +T 00 00 3D 1E 11 A3 DC 00 24 03 CC 00 C6 +R 00 00 00 09 00 0B 00 09 +T 00 00 47 +R 00 00 00 09 +T 00 00 47 1E 11 A3 DF FF 22 78 61 6B 0A 61 0F 09 +R 00 00 00 09 +T 00 00 54 16 07 90 F6 95 0F 0C 7B 0C 97 72 FB 09 +R 00 00 00 09 +T 00 00 61 16 07 90 7F 16 05 90 7F 4F 02 58 58 72 +R 00 00 00 09 +T 00 00 6E FB 11 1F 0B 0F 0A 0F 09 1E 0B 1C 24 00 +R 00 00 00 09 +T 00 00 7B 16 09 24 02 90 5C +R 00 00 00 09 +T 00 00 81 +R 00 00 00 09 +T 00 00 81 1F 0B 17 09 20 2F +R 00 00 00 09 +T 00 00 87 +R 00 00 00 09 +T 00 00 87 1E 11 A3 D7 FF 25 05 A3 E0 00 25 09 +R 00 00 00 09 +T 00 00 93 +R 00 00 00 09 +T 00 00 93 16 11 5F 17 0B 1F 09 20 1A +R 00 00 00 09 +T 00 00 9C +R 00 00 00 09 +T 00 00 9C 1E 11 A3 DB FF 22 23 7B 12 1E 05 F7 7B +R 00 00 00 09 +T 00 00 A9 11 6B 0C 0F 0B 7B 0C 1E 07 F7 5F 20 18 +R 00 00 00 09 +T 00 00 B6 +R 00 00 00 09 +T 00 00 B6 1E 0B 89 1E 0B 89 1E 13 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 02 +T 00 00 C3 06 20 08 +R 00 00 00 09 +T 00 00 C6 +R 00 00 00 09 +T 00 00 C6 AE 00 54 CF 00 00 5F 5A +R 00 00 00 09 12 07 00 00 +T 00 00 CE +R 00 00 00 09 +T 00 00 CE 5B 0C 81 +R 00 00 00 09 diff --git a/device/lib/stm8/c16rtomb.sym b/device/lib/stm8/c16rtomb.sym new file mode 100644 index 0000000..dd86309 --- /dev/null +++ b/device/lib/stm8/c16rtomb.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _c16rtomb 000000 GR + 1 _c16rtomb_sps_65536_36 000000 R + _errno ****** GX + _wctomb ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 3 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size D1 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/c16stombs.asm b/device/lib/stm8/c16stombs.asm new file mode 100644 index 0000000..cf00bf8 --- /dev/null +++ b/device/lib/stm8/c16stombs.asm @@ -0,0 +1,209 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module c16stombs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___memcpy + .globl _wctomb + .globl ___c16stombs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../c16stombs.c: 44: size_t __c16stombs(char *restrict s, const char16_t *restrict c16s, size_t n) +; ----------------------------------------- +; function __c16stombs +; ----------------------------------------- +___c16stombs: + sub sp, #18 +; ../c16stombs.c: 46: size_t m = 0; + clrw x + ldw (0x09, sp), x +; ../c16stombs.c: 87: return(m); +00119$: +; ../c16stombs.c: 54: if(c16s[0] < 0xd800 || c16s[0] >= 0xe000) // Basic multilingual plane + ldw y, (0x17, sp) + ldw (0x0b, sp), y + ldw x, y + ldw x, (x) + ldw (0x03, sp), x +; ../c16stombs.c: 57: c16s++; + ldw x, (0x0b, sp) + incw x + incw x + ldw (0x0d, sp), x +; ../c16stombs.c: 56: codepoint = c16s[0]; + ldw y, (0x03, sp) + ldw (0x11, sp), y + clr (0x10, sp) + clr (0x0f, sp) +; ../c16stombs.c: 54: if(c16s[0] < 0xd800 || c16s[0] >= 0xe000) // Basic multilingual plane + ldw x, (0x03, sp) + cpw x, #0xd800 + jrc 00106$ + cpw x, #0xe000 + jrc 00107$ +00106$: +; ../c16stombs.c: 56: codepoint = c16s[0]; +; ../c16stombs.c: 57: c16s++; + ldw x, (0x0d, sp) + ldw (0x17, sp), x + jra 00108$ +00107$: +; ../c16stombs.c: 59: else if(c16s[0] > 0xdbff || c16s[1] < 0xdc00 || c16s[1] > 0xdfff) // Unpaired surrogate + ldw x, (0x03, sp) + cpw x, #0xdbff + jrugt 00101$ + ldw x, (0x0d, sp) + ldw x, (x) + cpw x, #0xdc00 + jrc 00101$ + cpw x, #0xdfff + jrule 00102$ +00101$: +; ../c16stombs.c: 60: return(-1); + clrw x + decw x + jp 00121$ +00102$: +; ../c16stombs.c: 63: codepoint = ((unsigned long)(c16s[0]) << 10) -(0xd800ul << 10) + (unsigned long)(c16s[1]) - 0xdc00ul + 0x10000ul; + ld a, #0x0a +00168$: + sll (0x12, sp) + rlc (0x11, sp) + rlc (0x10, sp) + rlc (0x0f, sp) + dec a + jrne 00168$ + ldw (0x03, sp), x + clrw x + ldw y, (0x03, sp) + addw y, (0x11, sp) + ld a, xl + adc a, (0x10, sp) + push a + ld a, xh + adc a, (0x10, sp) + ld xh, a + pop a + addw y, #0x2400 + adc a, #0xa0 + rlwa x + adc a, #0xfc + ld xh, a + ldw (0x11, sp), y + ldw (0x0f, sp), x +; ../c16stombs.c: 64: c16s += 2; + ldw x, (0x0b, sp) + addw x, #0x0004 + ldw (0x17, sp), x +00108$: +; ../c16stombs.c: 67: if(!codepoint) + ldw x, (0x11, sp) + jrne 00113$ + ldw x, (0x0f, sp) + jrne 00113$ +; ../c16stombs.c: 69: if(m < n) + ldw x, (0x09, sp) + cpw x, (0x19, sp) + jrnc 00118$ +; ../c16stombs.c: 70: *s = 0; + ldw x, (0x15, sp) + clr (x) +; ../c16stombs.c: 71: break; + jra 00118$ +00113$: +; ../c16stombs.c: 74: l = wctomb(b, codepoint); + ldw x, sp + addw x, #5 + ldw (0x0d, sp), x + ldw y, (0x11, sp) + pushw y + ldw y, (0x11, sp) + pushw y + pushw x + call _wctomb + addw sp, #6 + ldw (0x0f, sp), x +; ../c16stombs.c: 76: if(l < 0) + tnz (0x0f, sp) + jrpl 00115$ +; ../c16stombs.c: 77: return(-1); + clrw x + decw x + jra 00121$ +00115$: +; ../c16stombs.c: 79: if(m + l > n) + ldw x, (0x0f, sp) + addw x, (0x09, sp) + ldw (0x11, sp), x + cpw x, (0x19, sp) + jrugt 00118$ +; ../c16stombs.c: 82: memcpy(s, b, l); + ldw y, (0x0d, sp) + ldw x, (0x15, sp) + ld a, (0x10, sp) + push a + ld a, (0x10, sp) + push a + pushw y + pushw x + call ___memcpy + addw sp, #6 +; ../c16stombs.c: 83: s += l; + ldw x, (0x15, sp) + addw x, (0x0f, sp) + ldw (0x15, sp), x +; ../c16stombs.c: 84: m += l; + ldw x, (0x11, sp) + ldw (0x09, sp), x + jp 00119$ +00118$: +; ../c16stombs.c: 87: return(m); + ldw x, (0x09, sp) +00121$: +; ../c16stombs.c: 88: } + addw sp, #18 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/c16stombs.lst b/device/lib/stm8/c16stombs.lst new file mode 100644 index 0000000..47b8aa3 --- /dev/null +++ b/device/lib/stm8/c16stombs.lst @@ -0,0 +1,209 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module c16stombs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___memcpy + 12 .globl _wctomb + 13 .globl ___c16stombs + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../c16stombs.c: 44: size_t __c16stombs(char *restrict s, const char16_t *restrict c16s, size_t n) + 52 ; ----------------------------------------- + 53 ; function __c16stombs + 54 ; ----------------------------------------- + 000000 55 ___c16stombs: + 000000 52 12 [ 2] 56 sub sp, #18 + 57 ; ../c16stombs.c: 46: size_t m = 0; + 000002 5F [ 1] 58 clrw x + 000003 1F 09 [ 2] 59 ldw (0x09, sp), x + 60 ; ../c16stombs.c: 87: return(m); + 000005 61 00119$: + 62 ; ../c16stombs.c: 54: if(c16s[0] < 0xd800 || c16s[0] >= 0xe000) // Basic multilingual plane + 000005 16 17 [ 2] 63 ldw y, (0x17, sp) + 000007 17 0B [ 2] 64 ldw (0x0b, sp), y + 000009 93 [ 1] 65 ldw x, y + 00000A FE [ 2] 66 ldw x, (x) + 00000B 1F 03 [ 2] 67 ldw (0x03, sp), x + 68 ; ../c16stombs.c: 57: c16s++; + 00000D 1E 0B [ 2] 69 ldw x, (0x0b, sp) + 00000F 5C [ 1] 70 incw x + 000010 5C [ 1] 71 incw x + 000011 1F 0D [ 2] 72 ldw (0x0d, sp), x + 73 ; ../c16stombs.c: 56: codepoint = c16s[0]; + 000013 16 03 [ 2] 74 ldw y, (0x03, sp) + 000015 17 11 [ 2] 75 ldw (0x11, sp), y + 000017 0F 10 [ 1] 76 clr (0x10, sp) + 000019 0F 0F [ 1] 77 clr (0x0f, sp) + 78 ; ../c16stombs.c: 54: if(c16s[0] < 0xd800 || c16s[0] >= 0xe000) // Basic multilingual plane + 00001B 1E 03 [ 2] 79 ldw x, (0x03, sp) + 00001D A3 D8 00 [ 2] 80 cpw x, #0xd800 + 000020 25 05 [ 1] 81 jrc 00106$ + 000022 A3 E0 00 [ 2] 82 cpw x, #0xe000 + 000025 25 06 [ 1] 83 jrc 00107$ + 000027 84 00106$: + 85 ; ../c16stombs.c: 56: codepoint = c16s[0]; + 86 ; ../c16stombs.c: 57: c16s++; + 000027 1E 0D [ 2] 87 ldw x, (0x0d, sp) + 000029 1F 17 [ 2] 88 ldw (0x17, sp), x + 00002B 20 4C [ 2] 89 jra 00108$ + 00002D 90 00107$: + 91 ; ../c16stombs.c: 59: else if(c16s[0] > 0xdbff || c16s[1] < 0xdc00 || c16s[1] > 0xdfff) // Unpaired surrogate + 00002D 1E 03 [ 2] 92 ldw x, (0x03, sp) + 00002F A3 DB FF [ 2] 93 cpw x, #0xdbff + 000032 22 0D [ 1] 94 jrugt 00101$ + 000034 1E 0D [ 2] 95 ldw x, (0x0d, sp) + 000036 FE [ 2] 96 ldw x, (x) + 000037 A3 DC 00 [ 2] 97 cpw x, #0xdc00 + 00003A 25 05 [ 1] 98 jrc 00101$ + 00003C A3 DF FF [ 2] 99 cpw x, #0xdfff + 00003F 23 05 [ 2] 100 jrule 00102$ + 000041 101 00101$: + 102 ; ../c16stombs.c: 60: return(-1); + 000041 5F [ 1] 103 clrw x + 000042 5A [ 2] 104 decw x + 000043 CCr00rD7 [ 2] 105 jp 00121$ + 000046 106 00102$: + 107 ; ../c16stombs.c: 63: codepoint = ((unsigned long)(c16s[0]) << 10) -(0xd800ul << 10) + (unsigned long)(c16s[1]) - 0xdc00ul + 0x10000ul; + 000046 A6 0A [ 1] 108 ld a, #0x0a + 000048 109 00168$: + 000048 08 12 [ 1] 110 sll (0x12, sp) + 00004A 09 11 [ 1] 111 rlc (0x11, sp) + 00004C 09 10 [ 1] 112 rlc (0x10, sp) + 00004E 09 0F [ 1] 113 rlc (0x0f, sp) + 000050 4A [ 1] 114 dec a + 000051 26 F5 [ 1] 115 jrne 00168$ + 000053 1F 03 [ 2] 116 ldw (0x03, sp), x + 000055 5F [ 1] 117 clrw x + 000056 16 03 [ 2] 118 ldw y, (0x03, sp) + 000058 72 F9 11 [ 2] 119 addw y, (0x11, sp) + 00005B 9F [ 1] 120 ld a, xl + 00005C 19 10 [ 1] 121 adc a, (0x10, sp) + 00005E 88 [ 1] 122 push a + 00005F 9E [ 1] 123 ld a, xh + 000060 19 10 [ 1] 124 adc a, (0x10, sp) + 000062 95 [ 1] 125 ld xh, a + 000063 84 [ 1] 126 pop a + 000064 72 A9 24 00 [ 2] 127 addw y, #0x2400 + 000068 A9 A0 [ 1] 128 adc a, #0xa0 + 00006A 02 [ 1] 129 rlwa x + 00006B A9 FC [ 1] 130 adc a, #0xfc + 00006D 95 [ 1] 131 ld xh, a + 00006E 17 11 [ 2] 132 ldw (0x11, sp), y + 000070 1F 0F [ 2] 133 ldw (0x0f, sp), x + 134 ; ../c16stombs.c: 64: c16s += 2; + 000072 1E 0B [ 2] 135 ldw x, (0x0b, sp) + 000074 1C 00 04 [ 2] 136 addw x, #0x0004 + 000077 1F 17 [ 2] 137 ldw (0x17, sp), x + 000079 138 00108$: + 139 ; ../c16stombs.c: 67: if(!codepoint) + 000079 1E 11 [ 2] 140 ldw x, (0x11, sp) + 00007B 26 0F [ 1] 141 jrne 00113$ + 00007D 1E 0F [ 2] 142 ldw x, (0x0f, sp) + 00007F 26 0B [ 1] 143 jrne 00113$ + 144 ; ../c16stombs.c: 69: if(m < n) + 000081 1E 09 [ 2] 145 ldw x, (0x09, sp) + 000083 13 19 [ 2] 146 cpw x, (0x19, sp) + 000085 24 4E [ 1] 147 jrnc 00118$ + 148 ; ../c16stombs.c: 70: *s = 0; + 000087 1E 15 [ 2] 149 ldw x, (0x15, sp) + 000089 7F [ 1] 150 clr (x) + 151 ; ../c16stombs.c: 71: break; + 00008A 20 49 [ 2] 152 jra 00118$ + 00008C 153 00113$: + 154 ; ../c16stombs.c: 74: l = wctomb(b, codepoint); + 00008C 96 [ 1] 155 ldw x, sp + 00008D 1C 00 05 [ 2] 156 addw x, #5 + 000090 1F 0D [ 2] 157 ldw (0x0d, sp), x + 000092 16 11 [ 2] 158 ldw y, (0x11, sp) + 000094 90 89 [ 2] 159 pushw y + 000096 16 11 [ 2] 160 ldw y, (0x11, sp) + 000098 90 89 [ 2] 161 pushw y + 00009A 89 [ 2] 162 pushw x + 00009B CDr00r00 [ 4] 163 call _wctomb + 00009E 5B 06 [ 2] 164 addw sp, #6 + 0000A0 1F 0F [ 2] 165 ldw (0x0f, sp), x + 166 ; ../c16stombs.c: 76: if(l < 0) + 0000A2 0D 0F [ 1] 167 tnz (0x0f, sp) + 0000A4 2A 04 [ 1] 168 jrpl 00115$ + 169 ; ../c16stombs.c: 77: return(-1); + 0000A6 5F [ 1] 170 clrw x + 0000A7 5A [ 2] 171 decw x + 0000A8 20 2D [ 2] 172 jra 00121$ + 0000AA 173 00115$: + 174 ; ../c16stombs.c: 79: if(m + l > n) + 0000AA 1E 0F [ 2] 175 ldw x, (0x0f, sp) + 0000AC 72 FB 09 [ 2] 176 addw x, (0x09, sp) + 0000AF 1F 11 [ 2] 177 ldw (0x11, sp), x + 0000B1 13 19 [ 2] 178 cpw x, (0x19, sp) + 0000B3 22 20 [ 1] 179 jrugt 00118$ + 180 ; ../c16stombs.c: 82: memcpy(s, b, l); + 0000B5 16 0D [ 2] 181 ldw y, (0x0d, sp) + 0000B7 1E 15 [ 2] 182 ldw x, (0x15, sp) + 0000B9 7B 10 [ 1] 183 ld a, (0x10, sp) + 0000BB 88 [ 1] 184 push a + 0000BC 7B 10 [ 1] 185 ld a, (0x10, sp) + 0000BE 88 [ 1] 186 push a + 0000BF 90 89 [ 2] 187 pushw y + 0000C1 89 [ 2] 188 pushw x + 0000C2 CDr00r00 [ 4] 189 call ___memcpy + 0000C5 5B 06 [ 2] 190 addw sp, #6 + 191 ; ../c16stombs.c: 83: s += l; + 0000C7 1E 15 [ 2] 192 ldw x, (0x15, sp) + 0000C9 72 FB 0F [ 2] 193 addw x, (0x0f, sp) + 0000CC 1F 15 [ 2] 194 ldw (0x15, sp), x + 195 ; ../c16stombs.c: 84: m += l; + 0000CE 1E 11 [ 2] 196 ldw x, (0x11, sp) + 0000D0 1F 09 [ 2] 197 ldw (0x09, sp), x + 0000D2 CCr00r05 [ 2] 198 jp 00119$ + 0000D5 199 00118$: + 200 ; ../c16stombs.c: 87: return(m); + 0000D5 1E 09 [ 2] 201 ldw x, (0x09, sp) + 0000D7 202 00121$: + 203 ; ../c16stombs.c: 88: } + 0000D7 5B 12 [ 2] 204 addw sp, #18 + 0000D9 81 [ 4] 205 ret + 206 .area CODE + 207 .area CONST + 208 .area INITIALIZER + 209 .area CABS (ABS) diff --git a/device/lib/stm8/c16stombs.rel b/device/lib/stm8/c16stombs.rel new file mode 100644 index 0000000..5d72c00 --- /dev/null +++ b/device/lib/stm8/c16stombs.rel @@ -0,0 +1,91 @@ +XH3 +H B areas 4 global symbols +M c16stombs +O -mstm8 +S .__.ABS. Def000000 +S ___memcpy Ref000000 +S _wctomb Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size DA flags 0 addr 0 +S ___c16stombs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 12 5F 1F 09 +R 00 00 00 09 +T 00 00 05 +R 00 00 00 09 +T 00 00 05 16 17 17 0B 93 FE 1F 03 1E 0B 5C 5C 1F +R 00 00 00 09 +T 00 00 12 0D 16 03 17 11 0F 10 0F 0F 1E 03 A3 +R 00 00 00 09 +T 00 00 1E D8 00 25 05 A3 E0 00 25 06 +R 00 00 00 09 +T 00 00 27 +R 00 00 00 09 +T 00 00 27 1E 0D 1F 17 20 4C +R 00 00 00 09 +T 00 00 2D +R 00 00 00 09 +T 00 00 2D 1E 03 A3 DB FF 22 0D 1E 0D FE A3 DC 00 +R 00 00 00 09 +T 00 00 3A 25 05 A3 DF FF 23 05 +R 00 00 00 09 +T 00 00 41 +R 00 00 00 09 +T 00 00 41 5F 5A CC 00 D7 +R 00 00 00 09 00 06 00 09 +T 00 00 46 +R 00 00 00 09 +T 00 00 46 A6 0A +R 00 00 00 09 +T 00 00 48 +R 00 00 00 09 +T 00 00 48 08 12 09 11 09 10 09 0F 4A 26 F5 1F 03 +R 00 00 00 09 +T 00 00 55 5F 16 03 72 F9 11 9F 19 10 88 9E 19 10 +R 00 00 00 09 +T 00 00 62 95 84 72 A9 24 00 A9 A0 02 A9 FC 95 17 +R 00 00 00 09 +T 00 00 6F 11 1F 0F 1E 0B 1C 00 04 1F 17 +R 00 00 00 09 +T 00 00 79 +R 00 00 00 09 +T 00 00 79 1E 11 26 0F 1E 0F 26 0B 1E 09 13 19 24 +R 00 00 00 09 +T 00 00 86 4E 1E 15 7F 20 49 +R 00 00 00 09 +T 00 00 8C +R 00 00 00 09 +T 00 00 8C 96 1C 00 05 1F 0D 16 11 90 89 16 11 90 +R 00 00 00 09 +T 00 00 99 89 89 CD 00 00 5B 06 1F 0F 0D 0F 2A 04 +R 00 00 00 09 02 06 00 02 +T 00 00 A6 5F 5A 20 2D +R 00 00 00 09 +T 00 00 AA +R 00 00 00 09 +T 00 00 AA 1E 0F 72 FB 09 1F 11 13 19 22 20 16 0D +R 00 00 00 09 +T 00 00 B7 1E 15 7B 10 88 7B 10 88 90 89 89 CD +R 00 00 00 09 +T 00 00 C3 00 00 5B 06 1E 15 72 FB 0F 1F 15 1E 11 +R 00 00 00 09 02 03 00 01 +T 00 00 D0 1F 09 CC 00 05 +R 00 00 00 09 00 06 00 09 +T 00 00 D5 +R 00 00 00 09 +T 00 00 D5 1E 09 +R 00 00 00 09 +T 00 00 D7 +R 00 00 00 09 +T 00 00 D7 5B 12 81 +R 00 00 00 09 diff --git a/device/lib/stm8/c16stombs.sym b/device/lib/stm8/c16stombs.sym new file mode 100644 index 0000000..a7380a6 --- /dev/null +++ b/device/lib/stm8/c16stombs.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___c16stombs 000000 GR + ___memcpy ****** GX + _wctomb ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size DA flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/c32rtomb.asm b/device/lib/stm8/c32rtomb.asm new file mode 100644 index 0000000..075fd67 --- /dev/null +++ b/device/lib/stm8/c32rtomb.asm @@ -0,0 +1,69 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module c32rtomb + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _wctomb + .globl _c32rtomb +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../c32rtomb.c: 33: size_t c32rtomb(char *restrict s, char32_t c32, mbstate_t *restrict ps) +; ----------------------------------------- +; function c32rtomb +; ----------------------------------------- +_c32rtomb: +; ../c32rtomb.c: 36: return(wctomb(s, c32)); + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call _wctomb + addw sp, #6 +; ../c32rtomb.c: 37: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/c32rtomb.lst b/device/lib/stm8/c32rtomb.lst new file mode 100644 index 0000000..d2b649a --- /dev/null +++ b/device/lib/stm8/c32rtomb.lst @@ -0,0 +1,69 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module c32rtomb + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _wctomb + 12 .globl _c32rtomb + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../c32rtomb.c: 33: size_t c32rtomb(char *restrict s, char32_t c32, mbstate_t *restrict ps) + 51 ; ----------------------------------------- + 52 ; function c32rtomb + 53 ; ----------------------------------------- + 000000 54 _c32rtomb: + 55 ; ../c32rtomb.c: 36: return(wctomb(s, c32)); + 000000 1E 07 [ 2] 56 ldw x, (0x07, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 07 [ 2] 58 ldw x, (0x07, sp) + 000005 89 [ 2] 59 pushw x + 000006 1E 07 [ 2] 60 ldw x, (0x07, sp) + 000008 89 [ 2] 61 pushw x + 000009 CDr00r00 [ 4] 62 call _wctomb + 00000C 5B 06 [ 2] 63 addw sp, #6 + 64 ; ../c32rtomb.c: 37: } + 00000E 81 [ 4] 65 ret + 66 .area CODE + 67 .area CONST + 68 .area INITIALIZER + 69 .area CABS (ABS) diff --git a/device/lib/stm8/c32rtomb.rel b/device/lib/stm8/c32rtomb.rel new file mode 100644 index 0000000..e3c4a48 --- /dev/null +++ b/device/lib/stm8/c32rtomb.rel @@ -0,0 +1,24 @@ +XH3 +H B areas 3 global symbols +M c32rtomb +O -mstm8 +S .__.ABS. Def000000 +S _wctomb Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size F flags 0 addr 0 +S _c32rtomb Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 07 89 1E 07 89 1E 07 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 00 0D 06 81 +R 00 00 00 09 diff --git a/device/lib/stm8/c32rtomb.sym b/device/lib/stm8/c32rtomb.sym new file mode 100644 index 0000000..c3ce075 --- /dev/null +++ b/device/lib/stm8/c32rtomb.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _c32rtomb 000000 GR + _wctomb ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/calloc.asm b/device/lib/stm8/calloc.asm new file mode 100644 index 0000000..a50987b --- /dev/null +++ b/device/lib/stm8/calloc.asm @@ -0,0 +1,103 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module calloc + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _memset + .globl _malloc + .globl _calloc +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../calloc.c: 44: void *calloc (size_t nmemb, size_t size) +; ----------------------------------------- +; function calloc +; ----------------------------------------- +_calloc: + sub sp, #6 +; ../calloc.c: 49: unsigned long msize = (unsigned long)nmemb * (unsigned long)size; + ldw x, (0x09, sp) + ldw y, (0x0b, sp) + pushw y + pushw x + call ___muluint2ulong + addw sp, #4 + ldw (0x05, sp), x +; ../calloc.c: 54: if (msize > SIZE_MAX) + ldw (0x03, sp), y + ldw x, y + jreq 00102$ +; ../calloc.c: 55: return(0); + clrw x + jra 00105$ +00102$: +; ../calloc.c: 57: if (ptr = malloc(msize)) + ldw y, (0x05, sp) + ldw (0x01, sp), y + ldw x, y + pushw x + call _malloc + addw sp, #2 + ldw (0x03, sp), x + ldw (0x05, sp), x + ldw x, (0x03, sp) + jreq 00104$ +; ../calloc.c: 58: memset(ptr, 0, msize); + ldw x, (0x01, sp) + pushw x + clrw x + pushw x + ldw x, (0x09, sp) + pushw x + call _memset + addw sp, #6 +00104$: +; ../calloc.c: 60: return(ptr); + ldw x, (0x05, sp) +00105$: +; ../calloc.c: 61: } + addw sp, #6 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/calloc.lst b/device/lib/stm8/calloc.lst new file mode 100644 index 0000000..8aae4f2 --- /dev/null +++ b/device/lib/stm8/calloc.lst @@ -0,0 +1,103 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module calloc + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _memset + 12 .globl _malloc + 13 .globl _calloc + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../calloc.c: 44: void *calloc (size_t nmemb, size_t size) + 52 ; ----------------------------------------- + 53 ; function calloc + 54 ; ----------------------------------------- + 000000 55 _calloc: + 000000 52 06 [ 2] 56 sub sp, #6 + 57 ; ../calloc.c: 49: unsigned long msize = (unsigned long)nmemb * (unsigned long)size; + 000002 1E 09 [ 2] 58 ldw x, (0x09, sp) + 000004 16 0B [ 2] 59 ldw y, (0x0b, sp) + 000006 90 89 [ 2] 60 pushw y + 000008 89 [ 2] 61 pushw x + 000009 CDr00r00 [ 4] 62 call ___muluint2ulong + 00000C 5B 04 [ 2] 63 addw sp, #4 + 00000E 1F 05 [ 2] 64 ldw (0x05, sp), x + 65 ; ../calloc.c: 54: if (msize > SIZE_MAX) + 000010 17 03 [ 2] 66 ldw (0x03, sp), y + 000012 93 [ 1] 67 ldw x, y + 000013 27 03 [ 1] 68 jreq 00102$ + 69 ; ../calloc.c: 55: return(0); + 000015 5F [ 1] 70 clrw x + 000016 20 22 [ 2] 71 jra 00105$ + 000018 72 00102$: + 73 ; ../calloc.c: 57: if (ptr = malloc(msize)) + 000018 16 05 [ 2] 74 ldw y, (0x05, sp) + 00001A 17 01 [ 2] 75 ldw (0x01, sp), y + 00001C 93 [ 1] 76 ldw x, y + 00001D 89 [ 2] 77 pushw x + 00001E CDr00r00 [ 4] 78 call _malloc + 000021 5B 02 [ 2] 79 addw sp, #2 + 000023 1F 03 [ 2] 80 ldw (0x03, sp), x + 000025 1F 05 [ 2] 81 ldw (0x05, sp), x + 000027 1E 03 [ 2] 82 ldw x, (0x03, sp) + 000029 27 0D [ 1] 83 jreq 00104$ + 84 ; ../calloc.c: 58: memset(ptr, 0, msize); + 00002B 1E 01 [ 2] 85 ldw x, (0x01, sp) + 00002D 89 [ 2] 86 pushw x + 00002E 5F [ 1] 87 clrw x + 00002F 89 [ 2] 88 pushw x + 000030 1E 09 [ 2] 89 ldw x, (0x09, sp) + 000032 89 [ 2] 90 pushw x + 000033 CDr00r00 [ 4] 91 call _memset + 000036 5B 06 [ 2] 92 addw sp, #6 + 000038 93 00104$: + 94 ; ../calloc.c: 60: return(ptr); + 000038 1E 05 [ 2] 95 ldw x, (0x05, sp) + 00003A 96 00105$: + 97 ; ../calloc.c: 61: } + 00003A 5B 06 [ 2] 98 addw sp, #6 + 00003C 81 [ 4] 99 ret + 100 .area CODE + 101 .area CONST + 102 .area INITIALIZER + 103 .area CABS (ABS) diff --git a/device/lib/stm8/calloc.rel b/device/lib/stm8/calloc.rel new file mode 100644 index 0000000..4c310e8 --- /dev/null +++ b/device/lib/stm8/calloc.rel @@ -0,0 +1,42 @@ +XH3 +H B areas 5 global symbols +M calloc +O -mstm8 +S ___muluint2ulong Ref000000 +S _malloc Ref000000 +S .__.ABS. Def000000 +S _memset Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 3D flags 0 addr 0 +S _calloc Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 06 1E 09 16 0B 90 89 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 00 +T 00 00 0D 04 1F 05 17 03 93 27 03 5F 20 22 +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 16 05 17 01 93 89 CD 00 00 5B 02 1F 03 +R 00 00 00 09 02 0A 00 01 +T 00 00 25 1F 05 1E 03 27 0D 1E 01 89 5F 89 1E 09 +R 00 00 00 09 +T 00 00 32 89 CD 00 00 5B 06 +R 00 00 00 09 02 05 00 03 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1E 05 +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 5B 06 81 +R 00 00 00 09 diff --git a/device/lib/stm8/calloc.sym b/device/lib/stm8/calloc.sym new file mode 100644 index 0000000..bf04635 --- /dev/null +++ b/device/lib/stm8/calloc.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___muluint2ulong ****** GX + 9 _calloc 000000 GR + _malloc ****** GX + _memset ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 3D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/ceilf.asm b/device/lib/stm8/ceilf.asm new file mode 100644 index 0000000..9867205 --- /dev/null +++ b/device/lib/stm8/ceilf.asm @@ -0,0 +1,127 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module ceilf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _ceilf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../ceilf.c: 33: float ceilf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function ceilf +; ----------------------------------------- +_ceilf: + sub sp, #8 +; ../ceilf.c: 36: r=x; + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fs2slong + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../ceilf.c: 38: return r; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + call ___slong2fs + addw sp, #4 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../ceilf.c: 37: if (r<0) + tnz (0x01, sp) + jrpl 00102$ +; ../ceilf.c: 38: return r; + ldw x, (0x07, sp) + ldw y, (0x05, sp) + jra 00104$ +00102$: +; ../ceilf.c: 40: return (r+((r<x)?1:0)); + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00106$ + clrw x + incw x + .byte 0x21 +00106$: + clrw x +00107$: + exgw x, y + clrw x + tnzw y + jrpl 00120$ + decw x +00120$: + addw y, (0x03, sp) + ld a, xl + adc a, (0x02, sp) + rlwa x + adc a, (0x01, sp) + ld xh, a + pushw y + pushw x + call ___slong2fs + addw sp, #4 + ldw (0x07, sp), x + ldw (0x05, sp), y + ldw x, (0x07, sp) + ldw y, (0x05, sp) +00104$: +; ../ceilf.c: 41: } + addw sp, #8 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/ceilf.lst b/device/lib/stm8/ceilf.lst new file mode 100644 index 0000000..580c0f8 --- /dev/null +++ b/device/lib/stm8/ceilf.lst @@ -0,0 +1,127 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module ceilf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _ceilf + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../ceilf.c: 33: float ceilf(float x) _FLOAT_FUNC_REENTRANT + 50 ; ----------------------------------------- + 51 ; function ceilf + 52 ; ----------------------------------------- + 000000 53 _ceilf: + 000000 52 08 [ 2] 54 sub sp, #8 + 55 ; ../ceilf.c: 36: r=x; + 000002 1E 0D [ 2] 56 ldw x, (0x0d, sp) + 000004 89 [ 2] 57 pushw x + 000005 1E 0D [ 2] 58 ldw x, (0x0d, sp) + 000007 89 [ 2] 59 pushw x + 000008 CDr00r00 [ 4] 60 call ___fs2slong + 00000B 5B 04 [ 2] 61 addw sp, #4 + 00000D 1F 03 [ 2] 62 ldw (0x03, sp), x + 00000F 17 01 [ 2] 63 ldw (0x01, sp), y + 64 ; ../ceilf.c: 38: return r; + 000011 1E 03 [ 2] 65 ldw x, (0x03, sp) + 000013 89 [ 2] 66 pushw x + 000014 1E 03 [ 2] 67 ldw x, (0x03, sp) + 000016 89 [ 2] 68 pushw x + 000017 CDr00r00 [ 4] 69 call ___slong2fs + 00001A 5B 04 [ 2] 70 addw sp, #4 + 00001C 1F 07 [ 2] 71 ldw (0x07, sp), x + 00001E 17 05 [ 2] 72 ldw (0x05, sp), y + 73 ; ../ceilf.c: 37: if (r<0) + 000020 0D 01 [ 1] 74 tnz (0x01, sp) + 000022 2A 06 [ 1] 75 jrpl 00102$ + 76 ; ../ceilf.c: 38: return r; + 000024 1E 07 [ 2] 77 ldw x, (0x07, sp) + 000026 16 05 [ 2] 78 ldw y, (0x05, sp) + 000028 20 39 [ 2] 79 jra 00104$ + 00002A 80 00102$: + 81 ; ../ceilf.c: 40: return (r+((r<x)?1:0)); + 00002A 1E 0D [ 2] 82 ldw x, (0x0d, sp) + 00002C 89 [ 2] 83 pushw x + 00002D 1E 0D [ 2] 84 ldw x, (0x0d, sp) + 00002F 89 [ 2] 85 pushw x + 000030 1E 0B [ 2] 86 ldw x, (0x0b, sp) + 000032 89 [ 2] 87 pushw x + 000033 1E 0B [ 2] 88 ldw x, (0x0b, sp) + 000035 89 [ 2] 89 pushw x + 000036 CDr00r00 [ 4] 90 call ___fslt + 000039 5B 08 [ 2] 91 addw sp, #8 + 00003B 4D [ 1] 92 tnz a + 00003C 27 03 [ 1] 93 jreq 00106$ + 00003E 5F [ 1] 94 clrw x + 00003F 5C [ 1] 95 incw x + 000040 21 96 .byte 0x21 + 000041 97 00106$: + 000041 5F [ 1] 98 clrw x + 000042 99 00107$: + 000042 51 [ 1] 100 exgw x, y + 000043 5F [ 1] 101 clrw x + 000044 90 5D [ 2] 102 tnzw y + 000046 2A 01 [ 1] 103 jrpl 00120$ + 000048 5A [ 2] 104 decw x + 000049 105 00120$: + 000049 72 F9 03 [ 2] 106 addw y, (0x03, sp) + 00004C 9F [ 1] 107 ld a, xl + 00004D 19 02 [ 1] 108 adc a, (0x02, sp) + 00004F 02 [ 1] 109 rlwa x + 000050 19 01 [ 1] 110 adc a, (0x01, sp) + 000052 95 [ 1] 111 ld xh, a + 000053 90 89 [ 2] 112 pushw y + 000055 89 [ 2] 113 pushw x + 000056 CDr00r00 [ 4] 114 call ___slong2fs + 000059 5B 04 [ 2] 115 addw sp, #4 + 00005B 1F 07 [ 2] 116 ldw (0x07, sp), x + 00005D 17 05 [ 2] 117 ldw (0x05, sp), y + 00005F 1E 07 [ 2] 118 ldw x, (0x07, sp) + 000061 16 05 [ 2] 119 ldw y, (0x05, sp) + 000063 120 00104$: + 121 ; ../ceilf.c: 41: } + 000063 5B 08 [ 2] 122 addw sp, #8 + 000065 81 [ 4] 123 ret + 124 .area CODE + 125 .area CONST + 126 .area INITIALIZER + 127 .area CABS (ABS) diff --git a/device/lib/stm8/ceilf.rel b/device/lib/stm8/ceilf.rel new file mode 100644 index 0000000..8d77f29 --- /dev/null +++ b/device/lib/stm8/ceilf.rel @@ -0,0 +1,54 @@ +XH3 +H B areas 5 global symbols +M ceilf +O -mstm8 +S ___slong2fs Ref000000 +S ___fs2slong Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 66 flags 0 addr 0 +S _ceilf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 08 1E 0D 89 1E 0D 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 01 +T 00 00 0D 1F 03 17 01 1E 03 89 1E 03 89 CD 00 00 +R 00 00 00 09 02 0E 00 00 +T 00 00 1A 5B 04 1F 07 17 05 0D 01 2A 06 1E 07 16 +R 00 00 00 09 +T 00 00 27 05 20 39 +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 1E 0D 89 1E 0D 89 1E 0B 89 1E 0B 89 CD +R 00 00 00 09 +T 00 00 37 00 00 5B 08 4D 27 03 5F 5C 21 +R 00 00 00 09 02 03 00 02 +T 00 00 41 +R 00 00 00 09 +T 00 00 41 5F +R 00 00 00 09 +T 00 00 42 +R 00 00 00 09 +T 00 00 42 51 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 49 +R 00 00 00 09 +T 00 00 49 72 F9 03 9F 19 02 02 19 01 95 90 89 89 +R 00 00 00 09 +T 00 00 56 CD 00 00 5B 04 1F 07 17 05 1E 07 16 05 +R 00 00 00 09 02 04 00 00 +T 00 00 63 +R 00 00 00 09 +T 00 00 63 5B 08 81 +R 00 00 00 09 diff --git a/device/lib/stm8/ceilf.sym b/device/lib/stm8/ceilf.sym new file mode 100644 index 0000000..bde624d --- /dev/null +++ b/device/lib/stm8/ceilf.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fs2slong ****** GX + ___fslt ****** GX + ___slong2fs ****** GX + 9 _ceilf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 66 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/cosf.asm b/device/lib/stm8/cosf.asm new file mode 100644 index 0000000..fc772ab --- /dev/null +++ b/device/lib/stm8/cosf.asm @@ -0,0 +1,78 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module cosf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _sincosf + .globl _cosf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../cosf.c: 36: float cosf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function cosf +; ----------------------------------------- +_cosf: +; ../cosf.c: 38: if (x==0.0) return 1.0; + ldw x, (0x05, sp) + jrne 00102$ + ldw x, (0x03, sp) + sllw x + jrne 00102$ + clrw x + ldw y, #0x3f80 + ret +00102$: +; ../cosf.c: 39: return sincosf(x, 1); + push #0x01 + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call _sincosf + addw sp, #5 +; ../cosf.c: 40: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/cosf.lst b/device/lib/stm8/cosf.lst new file mode 100644 index 0000000..0728487 --- /dev/null +++ b/device/lib/stm8/cosf.lst @@ -0,0 +1,78 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module cosf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _sincosf + 12 .globl _cosf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../cosf.c: 36: float cosf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function cosf + 53 ; ----------------------------------------- + 000000 54 _cosf: + 55 ; ../cosf.c: 38: if (x==0.0) return 1.0; + 000000 1E 05 [ 2] 56 ldw x, (0x05, sp) + 000002 26 0B [ 1] 57 jrne 00102$ + 000004 1E 03 [ 2] 58 ldw x, (0x03, sp) + 000006 58 [ 2] 59 sllw x + 000007 26 06 [ 1] 60 jrne 00102$ + 000009 5F [ 1] 61 clrw x + 00000A 90 AE 3F 80 [ 2] 62 ldw y, #0x3f80 + 00000E 81 [ 4] 63 ret + 00000F 64 00102$: + 65 ; ../cosf.c: 39: return sincosf(x, 1); + 00000F 4B 01 [ 1] 66 push #0x01 + 000011 1E 06 [ 2] 67 ldw x, (0x06, sp) + 000013 89 [ 2] 68 pushw x + 000014 1E 06 [ 2] 69 ldw x, (0x06, sp) + 000016 89 [ 2] 70 pushw x + 000017 CDr00r00 [ 4] 71 call _sincosf + 00001A 5B 05 [ 2] 72 addw sp, #5 + 73 ; ../cosf.c: 40: } + 00001C 81 [ 4] 74 ret + 75 .area CODE + 76 .area CONST + 77 .area INITIALIZER + 78 .area CABS (ABS) diff --git a/device/lib/stm8/cosf.rel b/device/lib/stm8/cosf.rel new file mode 100644 index 0000000..7a7dd7d --- /dev/null +++ b/device/lib/stm8/cosf.rel @@ -0,0 +1,30 @@ +XH3 +H B areas 3 global symbols +M cosf +O -mstm8 +S _sincosf Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1D flags 0 addr 0 +S _cosf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 05 26 0B 1E 03 58 26 06 5F 90 AE +R 00 00 00 09 +T 00 00 0C 3F 80 81 +R 00 00 00 09 +T 00 00 0F +R 00 00 00 09 +T 00 00 0F 4B 01 1E 06 89 1E 06 89 CD 00 00 5B 05 +R 00 00 00 09 02 0C 00 00 +T 00 00 1C 81 +R 00 00 00 09 diff --git a/device/lib/stm8/cosf.sym b/device/lib/stm8/cosf.sym new file mode 100644 index 0000000..7f3c26a --- /dev/null +++ b/device/lib/stm8/cosf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _cosf 000000 GR + _sincosf ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/coshf.asm b/device/lib/stm8/coshf.asm new file mode 100644 index 0000000..9dfde93 --- /dev/null +++ b/device/lib/stm8/coshf.asm @@ -0,0 +1,68 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module coshf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _sincoshf + .globl _coshf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../coshf.c: 36: float coshf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function coshf +; ----------------------------------------- +_coshf: +; ../coshf.c: 38: return sincoshf(x, 1); + push #0x01 + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call _sincoshf + addw sp, #5 +; ../coshf.c: 39: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/coshf.lst b/device/lib/stm8/coshf.lst new file mode 100644 index 0000000..002689f --- /dev/null +++ b/device/lib/stm8/coshf.lst @@ -0,0 +1,68 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module coshf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _sincoshf + 12 .globl _coshf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../coshf.c: 36: float coshf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function coshf + 53 ; ----------------------------------------- + 000000 54 _coshf: + 55 ; ../coshf.c: 38: return sincoshf(x, 1); + 000000 4B 01 [ 1] 56 push #0x01 + 000002 1E 06 [ 2] 57 ldw x, (0x06, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 06 [ 2] 59 ldw x, (0x06, sp) + 000007 89 [ 2] 60 pushw x + 000008 CDr00r00 [ 4] 61 call _sincoshf + 00000B 5B 05 [ 2] 62 addw sp, #5 + 63 ; ../coshf.c: 39: } + 00000D 81 [ 4] 64 ret + 65 .area CODE + 66 .area CONST + 67 .area INITIALIZER + 68 .area CABS (ABS) diff --git a/device/lib/stm8/coshf.rel b/device/lib/stm8/coshf.rel new file mode 100644 index 0000000..f854b22 --- /dev/null +++ b/device/lib/stm8/coshf.rel @@ -0,0 +1,24 @@ +XH3 +H B areas 3 global symbols +M coshf +O -mstm8 +S .__.ABS. Def000000 +S _sincoshf Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size E flags 0 addr 0 +S _coshf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 4B 01 1E 06 89 1E 06 89 CD 00 00 5B 05 +R 00 00 00 09 02 0C 00 01 +T 00 00 0D 81 +R 00 00 00 09 diff --git a/device/lib/stm8/coshf.sym b/device/lib/stm8/coshf.sym new file mode 100644 index 0000000..48efb95 --- /dev/null +++ b/device/lib/stm8/coshf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _coshf 000000 GR + _sincoshf ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/cotf.asm b/device/lib/stm8/cotf.asm new file mode 100644 index 0000000..18c915d --- /dev/null +++ b/device/lib/stm8/cotf.asm @@ -0,0 +1,115 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module cotf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _tancotf + .globl _fabsf + .globl _cotf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../cotf.c: 37: float cotf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function cotf +; ----------------------------------------- +_cotf: +; ../cotf.c: 41: y=fabsf(x); + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + call _fabsf + addw sp, #4 +; ../cotf.c: 42: if (y<1.0E-30) //This one requires more thinking... + push #0x60 + push #0x42 + push #0xa2 + push #0x0d + pushw x + pushw y + call ___fslt + addw sp, #8 + tnz a + jreq 00105$ +; ../cotf.c: 44: errno = ERANGE; + ldw x, #0x0022 + ldw _errno+0, x +; ../cotf.c: 45: if (x<0.0) + clrw x + pushw x + clrw x + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00102$ +; ../cotf.c: 46: return -HUGE_VALF; + clrw x + decw x + ldw y, #0xff7f + ret +00102$: +; ../cotf.c: 48: return +HUGE_VALF; + clrw x + decw x + ldw y, #0x7f7f + ret +00105$: +; ../cotf.c: 50: return tancotf(x, 1); + push #0x01 + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call _tancotf + addw sp, #5 +; ../cotf.c: 51: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/cotf.lst b/device/lib/stm8/cotf.lst new file mode 100644 index 0000000..96f5bee --- /dev/null +++ b/device/lib/stm8/cotf.lst @@ -0,0 +1,115 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module cotf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _tancotf + 12 .globl _fabsf + 13 .globl _cotf + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../cotf.c: 37: float cotf(float x) _FLOAT_FUNC_REENTRANT + 52 ; ----------------------------------------- + 53 ; function cotf + 54 ; ----------------------------------------- + 000000 55 _cotf: + 56 ; ../cotf.c: 41: y=fabsf(x); + 000000 1E 05 [ 2] 57 ldw x, (0x05, sp) + 000002 89 [ 2] 58 pushw x + 000003 1E 05 [ 2] 59 ldw x, (0x05, sp) + 000005 89 [ 2] 60 pushw x + 000006 CDr00r00 [ 4] 61 call _fabsf + 000009 5B 04 [ 2] 62 addw sp, #4 + 63 ; ../cotf.c: 42: if (y<1.0E-30) //This one requires more thinking... + 00000B 4B 60 [ 1] 64 push #0x60 + 00000D 4B 42 [ 1] 65 push #0x42 + 00000F 4B A2 [ 1] 66 push #0xa2 + 000011 4B 0D [ 1] 67 push #0x0d + 000013 89 [ 2] 68 pushw x + 000014 90 89 [ 2] 69 pushw y + 000016 CDr00r00 [ 4] 70 call ___fslt + 000019 5B 08 [ 2] 71 addw sp, #8 + 00001B 4D [ 1] 72 tnz a + 00001C 27 26 [ 1] 73 jreq 00105$ + 74 ; ../cotf.c: 44: errno = ERANGE; + 00001E AE 00 22 [ 2] 75 ldw x, #0x0022 + 000021 CFu00u00 [ 2] 76 ldw _errno+0, x + 77 ; ../cotf.c: 45: if (x<0.0) + 000024 5F [ 1] 78 clrw x + 000025 89 [ 2] 79 pushw x + 000026 5F [ 1] 80 clrw x + 000027 89 [ 2] 81 pushw x + 000028 1E 09 [ 2] 82 ldw x, (0x09, sp) + 00002A 89 [ 2] 83 pushw x + 00002B 1E 09 [ 2] 84 ldw x, (0x09, sp) + 00002D 89 [ 2] 85 pushw x + 00002E CDr00r00 [ 4] 86 call ___fslt + 000031 5B 08 [ 2] 87 addw sp, #8 + 000033 4D [ 1] 88 tnz a + 000034 27 07 [ 1] 89 jreq 00102$ + 90 ; ../cotf.c: 46: return -HUGE_VALF; + 000036 5F [ 1] 91 clrw x + 000037 5A [ 2] 92 decw x + 000038 90 AE FF 7F [ 2] 93 ldw y, #0xff7f + 00003C 81 [ 4] 94 ret + 00003D 95 00102$: + 96 ; ../cotf.c: 48: return +HUGE_VALF; + 00003D 5F [ 1] 97 clrw x + 00003E 5A [ 2] 98 decw x + 00003F 90 AE 7F 7F [ 2] 99 ldw y, #0x7f7f + 000043 81 [ 4] 100 ret + 000044 101 00105$: + 102 ; ../cotf.c: 50: return tancotf(x, 1); + 000044 4B 01 [ 1] 103 push #0x01 + 000046 1E 06 [ 2] 104 ldw x, (0x06, sp) + 000048 89 [ 2] 105 pushw x + 000049 1E 06 [ 2] 106 ldw x, (0x06, sp) + 00004B 89 [ 2] 107 pushw x + 00004C CDr00r00 [ 4] 108 call _tancotf + 00004F 5B 05 [ 2] 109 addw sp, #5 + 110 ; ../cotf.c: 51: } + 000051 81 [ 4] 111 ret + 112 .area CODE + 113 .area CONST + 114 .area INITIALIZER + 115 .area CABS (ABS) diff --git a/device/lib/stm8/cotf.rel b/device/lib/stm8/cotf.rel new file mode 100644 index 0000000..9717db4 --- /dev/null +++ b/device/lib/stm8/cotf.rel @@ -0,0 +1,43 @@ +XH3 +H B areas 6 global symbols +M cotf +O -mstm8 +S _errno Ref000000 +S _tancotf Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S _fabsf Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 52 flags 0 addr 0 +S _cotf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 05 89 1E 05 89 CD 00 00 5B 04 4B 60 +R 00 00 00 09 02 0A 00 04 +T 00 00 0D 4B 42 4B A2 4B 0D 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 02 +T 00 00 1A 08 4D 27 26 AE 00 22 CF 00 00 5F 89 5F +R 00 00 00 09 12 0B 00 00 +T 00 00 27 89 1E 09 89 1E 09 89 CD 00 00 5B 08 4D +R 00 00 00 09 02 0B 00 02 +T 00 00 34 27 07 5F 5A 90 AE FF 7F 81 +R 00 00 00 09 +T 00 00 3D +R 00 00 00 09 +T 00 00 3D 5F 5A 90 AE 7F 7F 81 +R 00 00 00 09 +T 00 00 44 +R 00 00 00 09 +T 00 00 44 4B 01 1E 06 89 1E 06 89 CD 00 00 5B 05 +R 00 00 00 09 02 0C 00 01 +T 00 00 51 81 +R 00 00 00 09 diff --git a/device/lib/stm8/cotf.sym b/device/lib/stm8/cotf.sym new file mode 100644 index 0000000..5f03023 --- /dev/null +++ b/device/lib/stm8/cotf.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fslt ****** GX + 9 _cotf 000000 GR + _errno ****** GX + _fabsf ****** GX + _tancotf ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 52 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/errno.asm b/device/lib/stm8/errno.asm new file mode 100644 index 0000000..18c38d1 --- /dev/null +++ b/device/lib/stm8/errno.asm @@ -0,0 +1,54 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module errno + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _errno +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +_errno:: + .ds 2 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/errno.lst b/device/lib/stm8/errno.lst new file mode 100644 index 0000000..0a57d0d --- /dev/null +++ b/device/lib/stm8/errno.lst @@ -0,0 +1,54 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module errno + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _errno + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 000000 16 _errno:: + 000000 17 .ds 2 + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 .area CODE + 52 .area CONST + 53 .area INITIALIZER + 54 .area CABS (ABS) diff --git a/device/lib/stm8/errno.rel b/device/lib/stm8/errno.rel new file mode 100644 index 0000000..851b850 --- /dev/null +++ b/device/lib/stm8/errno.rel @@ -0,0 +1,21 @@ +XH3 +H B areas 2 global symbols +M errno +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 2 flags 0 addr 0 +S _errno Def000000 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 0 flags 0 addr 0 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 diff --git a/device/lib/stm8/errno.sym b/device/lib/stm8/errno.sym new file mode 100644 index 0000000..94d2e22 --- /dev/null +++ b/device/lib/stm8/errno.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 1 _errno 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 2 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 0 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/expf.asm b/device/lib/stm8/expf.asm new file mode 100644 index 0000000..0592eb8 --- /dev/null +++ b/device/lib/stm8/expf.asm @@ -0,0 +1,359 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module expf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _ldexpf + .globl _expf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../expf.c: 331: float expf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function expf +; ----------------------------------------- +_expf: + sub sp, #15 +; ../expf.c: 337: if(x>=0.0) + clrw x + pushw x + clrw x + pushw x + ldw x, (0x18, sp) + pushw x + ldw x, (0x18, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jrne 00102$ +; ../expf.c: 338: { y=x; sign=0; } + ldw y, (0x14, sp) + ldw (0x0e, sp), y + ldw y, (0x12, sp) + ldw (0x0c, sp), y + clr (0x01, sp) + jra 00103$ +00102$: +; ../expf.c: 340: { y=-x; sign=1; } + ldw y, (0x14, sp) + ldw x, (0x12, sp) + sllw x + ccf + rrcw x + ldw (0x0e, sp), y + ldw (0x0c, sp), x + ld a, #0x01 + ld (0x01, sp), a +00103$: +; ../expf.c: 342: if(y<EXPEPS) return 1.0; + push #0x95 + push #0xbf + push #0xd6 + push #0x33 + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + call ___fslt + addw sp, #8 + ld (0x0b, sp), a + jreq 00105$ + clrw x + ldw y, #0x3f80 + jp 00118$ +00105$: +; ../expf.c: 344: if(y>BIGX) + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + push #0x18 + push #0x72 + push #0xb1 + push #0x42 + call ___fslt + addw sp, #8 + tnz a + jreq 00110$ +; ../expf.c: 346: if(sign) + tnz (0x01, sp) + jreq 00107$ +; ../expf.c: 348: errno=ERANGE; + ldw x, #0x0022 + ldw _errno+0, x +; ../expf.c: 350: ; + clrw x + decw x + ldw y, #0x7f7f + jp 00118$ +00107$: +; ../expf.c: 354: return 0.0; + clrw x + clrw y + jp 00118$ +00110$: +; ../expf.c: 358: z=y*K1; + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + push #0x3b + push #0xaa + push #0xb8 + push #0x3f + call ___fsmul + addw sp, #8 + ldw (0x0a, sp), x + ldw (0x08, sp), y +; ../expf.c: 359: n=z; + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + call ___fs2sint + addw sp, #4 + ldw (0x02, sp), x +; ../expf.c: 361: if(n<0) --n; + tnz (0x02, sp) + jrpl 00112$ + ldw x, (0x02, sp) + decw x + ldw (0x02, sp), x +00112$: +; ../expf.c: 362: if(z-n>=0.5) ++n; + ldw x, (0x02, sp) + pushw x + call ___sint2fs + addw sp, #2 + pushw x + pushw y + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + call ___fssub + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + call ___fslt + addw sp, #8 + tnz a + jrne 00114$ + ldw x, (0x02, sp) + incw x + ldw (0x02, sp), x +00114$: +; ../expf.c: 363: xn=n; + ldw x, (0x02, sp) + pushw x + call ___sint2fs + addw sp, #2 + ldw (0x0a, sp), x + ldw (0x08, sp), y +; ../expf.c: 364: g=((y-xn*C1))-xn*C2; + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + push #0x00 + push #0x80 + push #0x31 + push #0x3f + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x0e, sp), x + ldw (0x0c, sp), y + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + push #0x83 + push #0x80 + push #0x5e + push #0xb9 + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x06, sp), x + ldw (0x04, sp), y +; ../expf.c: 365: z=g*g; + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x0a, sp), x + ldw (0x08, sp), y +; ../expf.c: 366: r=P(z)*g; + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + push #0x08 + push #0x53 + push #0x88 + push #0x3b + call ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x80 + push #0x3e + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0e, sp), x + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + ldw x, (0x12, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + ldw (0x0e, sp), x + ldw (0x0c, sp), y +; ../expf.c: 367: r=0.5+(r/(Q(z)-r)); + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + push #0x5b + push #0xbf + push #0x4c + push #0x3d + call ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0a, sp), x + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + pushw y + call ___fssub + addw sp, #8 + pushw x + pushw y + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + call ___fsdiv + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0e, sp), x +; ../expf.c: 369: n++; + ldw x, (0x02, sp) + incw x +; ../expf.c: 370: z=ldexpf(r, n); + pushw x + ldw x, (0x10, sp) + pushw x + pushw y + call _ldexpf + addw sp, #6 +; ../expf.c: 371: if(sign) + tnz (0x01, sp) + jreq 00116$ +; ../expf.c: 372: return 1.0/z; + pushw x + pushw y + clrw x + pushw x + push #0x80 + push #0x3f + call ___fsdiv + addw sp, #8 +; ../expf.c: 374: return z; +00116$: +00118$: +; ../expf.c: 375: } + addw sp, #15 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/expf.lst b/device/lib/stm8/expf.lst new file mode 100644 index 0000000..bd2b39d --- /dev/null +++ b/device/lib/stm8/expf.lst @@ -0,0 +1,359 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module expf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _ldexpf + 12 .globl _expf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../expf.c: 331: float expf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function expf + 53 ; ----------------------------------------- + 000000 54 _expf: + 000000 52 0F [ 2] 55 sub sp, #15 + 56 ; ../expf.c: 337: if(x>=0.0) + 000002 5F [ 1] 57 clrw x + 000003 89 [ 2] 58 pushw x + 000004 5F [ 1] 59 clrw x + 000005 89 [ 2] 60 pushw x + 000006 1E 18 [ 2] 61 ldw x, (0x18, sp) + 000008 89 [ 2] 62 pushw x + 000009 1E 18 [ 2] 63 ldw x, (0x18, sp) + 00000B 89 [ 2] 64 pushw x + 00000C CDr00r00 [ 4] 65 call ___fslt + 00000F 5B 08 [ 2] 66 addw sp, #8 + 000011 4D [ 1] 67 tnz a + 000012 26 0C [ 1] 68 jrne 00102$ + 69 ; ../expf.c: 338: { y=x; sign=0; } + 000014 16 14 [ 2] 70 ldw y, (0x14, sp) + 000016 17 0E [ 2] 71 ldw (0x0e, sp), y + 000018 16 12 [ 2] 72 ldw y, (0x12, sp) + 00001A 17 0C [ 2] 73 ldw (0x0c, sp), y + 00001C 0F 01 [ 1] 74 clr (0x01, sp) + 00001E 20 0F [ 2] 75 jra 00103$ + 000020 76 00102$: + 77 ; ../expf.c: 340: { y=-x; sign=1; } + 000020 16 14 [ 2] 78 ldw y, (0x14, sp) + 000022 1E 12 [ 2] 79 ldw x, (0x12, sp) + 000024 58 [ 2] 80 sllw x + 000025 8C [ 1] 81 ccf + 000026 56 [ 2] 82 rrcw x + 000027 17 0E [ 2] 83 ldw (0x0e, sp), y + 000029 1F 0C [ 2] 84 ldw (0x0c, sp), x + 00002B A6 01 [ 1] 85 ld a, #0x01 + 00002D 6B 01 [ 1] 86 ld (0x01, sp), a + 00002F 87 00103$: + 88 ; ../expf.c: 342: if(y<EXPEPS) return 1.0; + 00002F 4B 95 [ 1] 89 push #0x95 + 000031 4B BF [ 1] 90 push #0xbf + 000033 4B D6 [ 1] 91 push #0xd6 + 000035 4B 33 [ 1] 92 push #0x33 + 000037 1E 12 [ 2] 93 ldw x, (0x12, sp) + 000039 89 [ 2] 94 pushw x + 00003A 1E 12 [ 2] 95 ldw x, (0x12, sp) + 00003C 89 [ 2] 96 pushw x + 00003D CDr00r00 [ 4] 97 call ___fslt + 000040 5B 08 [ 2] 98 addw sp, #8 + 000042 6B 0B [ 1] 99 ld (0x0b, sp), a + 000044 27 08 [ 1] 100 jreq 00105$ + 000046 5F [ 1] 101 clrw x + 000047 90 AE 3F 80 [ 2] 102 ldw y, #0x3f80 + 00004B CCr01rF1 [ 2] 103 jp 00118$ + 00004E 104 00105$: + 105 ; ../expf.c: 344: if(y>BIGX) + 00004E 1E 0E [ 2] 106 ldw x, (0x0e, sp) + 000050 89 [ 2] 107 pushw x + 000051 1E 0E [ 2] 108 ldw x, (0x0e, sp) + 000053 89 [ 2] 109 pushw x + 000054 4B 18 [ 1] 110 push #0x18 + 000056 4B 72 [ 1] 111 push #0x72 + 000058 4B B1 [ 1] 112 push #0xb1 + 00005A 4B 42 [ 1] 113 push #0x42 + 00005C CDr00r00 [ 4] 114 call ___fslt + 00005F 5B 08 [ 2] 115 addw sp, #8 + 000061 4D [ 1] 116 tnz a + 000062 27 19 [ 1] 117 jreq 00110$ + 118 ; ../expf.c: 346: if(sign) + 000064 0D 01 [ 1] 119 tnz (0x01, sp) + 000066 27 0F [ 1] 120 jreq 00107$ + 121 ; ../expf.c: 348: errno=ERANGE; + 000068 AE 00 22 [ 2] 122 ldw x, #0x0022 + 00006B CFu00u00 [ 2] 123 ldw _errno+0, x + 124 ; ../expf.c: 350: ; + 00006E 5F [ 1] 125 clrw x + 00006F 5A [ 2] 126 decw x + 000070 90 AE 7F 7F [ 2] 127 ldw y, #0x7f7f + 000074 CCr01rF1 [ 2] 128 jp 00118$ + 000077 129 00107$: + 130 ; ../expf.c: 354: return 0.0; + 000077 5F [ 1] 131 clrw x + 000078 90 5F [ 1] 132 clrw y + 00007A CCr01rF1 [ 2] 133 jp 00118$ + 00007D 134 00110$: + 135 ; ../expf.c: 358: z=y*K1; + 00007D 1E 0E [ 2] 136 ldw x, (0x0e, sp) + 00007F 89 [ 2] 137 pushw x + 000080 1E 0E [ 2] 138 ldw x, (0x0e, sp) + 000082 89 [ 2] 139 pushw x + 000083 4B 3B [ 1] 140 push #0x3b + 000085 4B AA [ 1] 141 push #0xaa + 000087 4B B8 [ 1] 142 push #0xb8 + 000089 4B 3F [ 1] 143 push #0x3f + 00008B CDr00r00 [ 4] 144 call ___fsmul + 00008E 5B 08 [ 2] 145 addw sp, #8 + 000090 1F 0A [ 2] 146 ldw (0x0a, sp), x + 000092 17 08 [ 2] 147 ldw (0x08, sp), y + 148 ; ../expf.c: 359: n=z; + 000094 1E 0A [ 2] 149 ldw x, (0x0a, sp) + 000096 89 [ 2] 150 pushw x + 000097 1E 0A [ 2] 151 ldw x, (0x0a, sp) + 000099 89 [ 2] 152 pushw x + 00009A CDr00r00 [ 4] 153 call ___fs2sint + 00009D 5B 04 [ 2] 154 addw sp, #4 + 00009F 1F 02 [ 2] 155 ldw (0x02, sp), x + 156 ; ../expf.c: 361: if(n<0) --n; + 0000A1 0D 02 [ 1] 157 tnz (0x02, sp) + 0000A3 2A 05 [ 1] 158 jrpl 00112$ + 0000A5 1E 02 [ 2] 159 ldw x, (0x02, sp) + 0000A7 5A [ 2] 160 decw x + 0000A8 1F 02 [ 2] 161 ldw (0x02, sp), x + 0000AA 162 00112$: + 163 ; ../expf.c: 362: if(z-n>=0.5) ++n; + 0000AA 1E 02 [ 2] 164 ldw x, (0x02, sp) + 0000AC 89 [ 2] 165 pushw x + 0000AD CDr00r00 [ 4] 166 call ___sint2fs + 0000B0 5B 02 [ 2] 167 addw sp, #2 + 0000B2 89 [ 2] 168 pushw x + 0000B3 90 89 [ 2] 169 pushw y + 0000B5 1E 0E [ 2] 170 ldw x, (0x0e, sp) + 0000B7 89 [ 2] 171 pushw x + 0000B8 1E 0E [ 2] 172 ldw x, (0x0e, sp) + 0000BA 89 [ 2] 173 pushw x + 0000BB CDr00r00 [ 4] 174 call ___fssub + 0000BE 5B 08 [ 2] 175 addw sp, #8 + 0000C0 4B 00 [ 1] 176 push #0x00 + 0000C2 4B 00 [ 1] 177 push #0x00 + 0000C4 4B 00 [ 1] 178 push #0x00 + 0000C6 4B 3F [ 1] 179 push #0x3f + 0000C8 89 [ 2] 180 pushw x + 0000C9 90 89 [ 2] 181 pushw y + 0000CB CDr00r00 [ 4] 182 call ___fslt + 0000CE 5B 08 [ 2] 183 addw sp, #8 + 0000D0 4D [ 1] 184 tnz a + 0000D1 26 05 [ 1] 185 jrne 00114$ + 0000D3 1E 02 [ 2] 186 ldw x, (0x02, sp) + 0000D5 5C [ 1] 187 incw x + 0000D6 1F 02 [ 2] 188 ldw (0x02, sp), x + 0000D8 189 00114$: + 190 ; ../expf.c: 363: xn=n; + 0000D8 1E 02 [ 2] 191 ldw x, (0x02, sp) + 0000DA 89 [ 2] 192 pushw x + 0000DB CDr00r00 [ 4] 193 call ___sint2fs + 0000DE 5B 02 [ 2] 194 addw sp, #2 + 0000E0 1F 0A [ 2] 195 ldw (0x0a, sp), x + 0000E2 17 08 [ 2] 196 ldw (0x08, sp), y + 197 ; ../expf.c: 364: g=((y-xn*C1))-xn*C2; + 0000E4 1E 0A [ 2] 198 ldw x, (0x0a, sp) + 0000E6 89 [ 2] 199 pushw x + 0000E7 1E 0A [ 2] 200 ldw x, (0x0a, sp) + 0000E9 89 [ 2] 201 pushw x + 0000EA 4B 00 [ 1] 202 push #0x00 + 0000EC 4B 80 [ 1] 203 push #0x80 + 0000EE 4B 31 [ 1] 204 push #0x31 + 0000F0 4B 3F [ 1] 205 push #0x3f + 0000F2 CDr00r00 [ 4] 206 call ___fsmul + 0000F5 5B 08 [ 2] 207 addw sp, #8 + 0000F7 89 [ 2] 208 pushw x + 0000F8 90 89 [ 2] 209 pushw y + 0000FA 1E 12 [ 2] 210 ldw x, (0x12, sp) + 0000FC 89 [ 2] 211 pushw x + 0000FD 1E 12 [ 2] 212 ldw x, (0x12, sp) + 0000FF 89 [ 2] 213 pushw x + 000100 CDr00r00 [ 4] 214 call ___fssub + 000103 5B 08 [ 2] 215 addw sp, #8 + 000105 1F 0E [ 2] 216 ldw (0x0e, sp), x + 000107 17 0C [ 2] 217 ldw (0x0c, sp), y + 000109 1E 0A [ 2] 218 ldw x, (0x0a, sp) + 00010B 89 [ 2] 219 pushw x + 00010C 1E 0A [ 2] 220 ldw x, (0x0a, sp) + 00010E 89 [ 2] 221 pushw x + 00010F 4B 83 [ 1] 222 push #0x83 + 000111 4B 80 [ 1] 223 push #0x80 + 000113 4B 5E [ 1] 224 push #0x5e + 000115 4B B9 [ 1] 225 push #0xb9 + 000117 CDr00r00 [ 4] 226 call ___fsmul + 00011A 5B 08 [ 2] 227 addw sp, #8 + 00011C 89 [ 2] 228 pushw x + 00011D 90 89 [ 2] 229 pushw y + 00011F 1E 12 [ 2] 230 ldw x, (0x12, sp) + 000121 89 [ 2] 231 pushw x + 000122 1E 12 [ 2] 232 ldw x, (0x12, sp) + 000124 89 [ 2] 233 pushw x + 000125 CDr00r00 [ 4] 234 call ___fssub + 000128 5B 08 [ 2] 235 addw sp, #8 + 00012A 1F 06 [ 2] 236 ldw (0x06, sp), x + 00012C 17 04 [ 2] 237 ldw (0x04, sp), y + 238 ; ../expf.c: 365: z=g*g; + 00012E 1E 06 [ 2] 239 ldw x, (0x06, sp) + 000130 89 [ 2] 240 pushw x + 000131 1E 06 [ 2] 241 ldw x, (0x06, sp) + 000133 89 [ 2] 242 pushw x + 000134 1E 0A [ 2] 243 ldw x, (0x0a, sp) + 000136 89 [ 2] 244 pushw x + 000137 1E 0A [ 2] 245 ldw x, (0x0a, sp) + 000139 89 [ 2] 246 pushw x + 00013A CDr00r00 [ 4] 247 call ___fsmul + 00013D 5B 08 [ 2] 248 addw sp, #8 + 00013F 1F 0A [ 2] 249 ldw (0x0a, sp), x + 000141 17 08 [ 2] 250 ldw (0x08, sp), y + 251 ; ../expf.c: 366: r=P(z)*g; + 000143 1E 0A [ 2] 252 ldw x, (0x0a, sp) + 000145 89 [ 2] 253 pushw x + 000146 1E 0A [ 2] 254 ldw x, (0x0a, sp) + 000148 89 [ 2] 255 pushw x + 000149 4B 08 [ 1] 256 push #0x08 + 00014B 4B 53 [ 1] 257 push #0x53 + 00014D 4B 88 [ 1] 258 push #0x88 + 00014F 4B 3B [ 1] 259 push #0x3b + 000151 CDr00r00 [ 4] 260 call ___fsmul + 000154 5B 08 [ 2] 261 addw sp, #8 + 000156 4B 00 [ 1] 262 push #0x00 + 000158 4B 00 [ 1] 263 push #0x00 + 00015A 4B 80 [ 1] 264 push #0x80 + 00015C 4B 3E [ 1] 265 push #0x3e + 00015E 89 [ 2] 266 pushw x + 00015F 90 89 [ 2] 267 pushw y + 000161 CDr00r00 [ 4] 268 call ___fsadd + 000164 5B 08 [ 2] 269 addw sp, #8 + 000166 1F 0E [ 2] 270 ldw (0x0e, sp), x + 000168 1E 06 [ 2] 271 ldw x, (0x06, sp) + 00016A 89 [ 2] 272 pushw x + 00016B 1E 06 [ 2] 273 ldw x, (0x06, sp) + 00016D 89 [ 2] 274 pushw x + 00016E 1E 12 [ 2] 275 ldw x, (0x12, sp) + 000170 89 [ 2] 276 pushw x + 000171 90 89 [ 2] 277 pushw y + 000173 CDr00r00 [ 4] 278 call ___fsmul + 000176 5B 08 [ 2] 279 addw sp, #8 + 000178 1F 0E [ 2] 280 ldw (0x0e, sp), x + 00017A 17 0C [ 2] 281 ldw (0x0c, sp), y + 282 ; ../expf.c: 367: r=0.5+(r/(Q(z)-r)); + 00017C 1E 0A [ 2] 283 ldw x, (0x0a, sp) + 00017E 89 [ 2] 284 pushw x + 00017F 1E 0A [ 2] 285 ldw x, (0x0a, sp) + 000181 89 [ 2] 286 pushw x + 000182 4B 5B [ 1] 287 push #0x5b + 000184 4B BF [ 1] 288 push #0xbf + 000186 4B 4C [ 1] 289 push #0x4c + 000188 4B 3D [ 1] 290 push #0x3d + 00018A CDr00r00 [ 4] 291 call ___fsmul + 00018D 5B 08 [ 2] 292 addw sp, #8 + 00018F 4B 00 [ 1] 293 push #0x00 + 000191 4B 00 [ 1] 294 push #0x00 + 000193 4B 00 [ 1] 295 push #0x00 + 000195 4B 3F [ 1] 296 push #0x3f + 000197 89 [ 2] 297 pushw x + 000198 90 89 [ 2] 298 pushw y + 00019A CDr00r00 [ 4] 299 call ___fsadd + 00019D 5B 08 [ 2] 300 addw sp, #8 + 00019F 1F 0A [ 2] 301 ldw (0x0a, sp), x + 0001A1 1E 0E [ 2] 302 ldw x, (0x0e, sp) + 0001A3 89 [ 2] 303 pushw x + 0001A4 1E 0E [ 2] 304 ldw x, (0x0e, sp) + 0001A6 89 [ 2] 305 pushw x + 0001A7 1E 0E [ 2] 306 ldw x, (0x0e, sp) + 0001A9 89 [ 2] 307 pushw x + 0001AA 90 89 [ 2] 308 pushw y + 0001AC CDr00r00 [ 4] 309 call ___fssub + 0001AF 5B 08 [ 2] 310 addw sp, #8 + 0001B1 89 [ 2] 311 pushw x + 0001B2 90 89 [ 2] 312 pushw y + 0001B4 1E 12 [ 2] 313 ldw x, (0x12, sp) + 0001B6 89 [ 2] 314 pushw x + 0001B7 1E 12 [ 2] 315 ldw x, (0x12, sp) + 0001B9 89 [ 2] 316 pushw x + 0001BA CDr00r00 [ 4] 317 call ___fsdiv + 0001BD 5B 08 [ 2] 318 addw sp, #8 + 0001BF 4B 00 [ 1] 319 push #0x00 + 0001C1 4B 00 [ 1] 320 push #0x00 + 0001C3 4B 00 [ 1] 321 push #0x00 + 0001C5 4B 3F [ 1] 322 push #0x3f + 0001C7 89 [ 2] 323 pushw x + 0001C8 90 89 [ 2] 324 pushw y + 0001CA CDr00r00 [ 4] 325 call ___fsadd + 0001CD 5B 08 [ 2] 326 addw sp, #8 + 0001CF 1F 0E [ 2] 327 ldw (0x0e, sp), x + 328 ; ../expf.c: 369: n++; + 0001D1 1E 02 [ 2] 329 ldw x, (0x02, sp) + 0001D3 5C [ 1] 330 incw x + 331 ; ../expf.c: 370: z=ldexpf(r, n); + 0001D4 89 [ 2] 332 pushw x + 0001D5 1E 10 [ 2] 333 ldw x, (0x10, sp) + 0001D7 89 [ 2] 334 pushw x + 0001D8 90 89 [ 2] 335 pushw y + 0001DA CDr00r00 [ 4] 336 call _ldexpf + 0001DD 5B 06 [ 2] 337 addw sp, #6 + 338 ; ../expf.c: 371: if(sign) + 0001DF 0D 01 [ 1] 339 tnz (0x01, sp) + 0001E1 27 0E [ 1] 340 jreq 00116$ + 341 ; ../expf.c: 372: return 1.0/z; + 0001E3 89 [ 2] 342 pushw x + 0001E4 90 89 [ 2] 343 pushw y + 0001E6 5F [ 1] 344 clrw x + 0001E7 89 [ 2] 345 pushw x + 0001E8 4B 80 [ 1] 346 push #0x80 + 0001EA 4B 3F [ 1] 347 push #0x3f + 0001EC CDr00r00 [ 4] 348 call ___fsdiv + 0001EF 5B 08 [ 2] 349 addw sp, #8 + 350 ; ../expf.c: 374: return z; + 0001F1 351 00116$: + 0001F1 352 00118$: + 353 ; ../expf.c: 375: } + 0001F1 5B 0F [ 2] 354 addw sp, #15 + 0001F3 81 [ 4] 355 ret + 356 .area CODE + 357 .area CONST + 358 .area INITIALIZER + 359 .area CABS (ABS) diff --git a/device/lib/stm8/expf.rel b/device/lib/stm8/expf.rel new file mode 100644 index 0000000..a6500d4 --- /dev/null +++ b/device/lib/stm8/expf.rel @@ -0,0 +1,134 @@ +XH3 +H B areas B global symbols +M expf +O -mstm8 +S ___fssub Ref000000 +S ___fsmul Ref000000 +S _errno Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S _ldexpf Ref000000 +S ___sint2fs Ref000000 +S ___fs2sint Ref000000 +S ___fsdiv Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1F4 flags 0 addr 0 +S _expf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0F 5F 89 5F 89 1E 18 89 1E 18 89 CD +R 00 00 00 09 +T 00 00 0D 00 00 5B 08 4D 26 0C 16 14 17 0E 16 12 +R 00 00 00 09 02 03 00 03 +T 00 00 1A 17 0C 0F 01 20 0F +R 00 00 00 09 +T 00 00 20 +R 00 00 00 09 +T 00 00 20 16 14 1E 12 58 8C 56 17 0E 1F 0C A6 01 +R 00 00 00 09 +T 00 00 2D 6B 01 +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 4B 95 4B BF 4B D6 4B 33 1E 12 89 1E 12 +R 00 00 00 09 +T 00 00 3C 89 CD 00 00 5B 08 6B 0B 27 08 5F 90 AE +R 00 00 00 09 02 05 00 03 +T 00 00 49 3F 80 CC 01 F1 +R 00 00 00 09 00 06 00 09 +T 00 00 4E +R 00 00 00 09 +T 00 00 4E 1E 0E 89 1E 0E 89 4B 18 4B 72 4B B1 4B +R 00 00 00 09 +T 00 00 5B 42 CD 00 00 5B 08 4D 27 19 0D 01 27 0F +R 00 00 00 09 02 05 00 03 +T 00 00 68 AE 00 22 CF 00 00 5F 5A 90 AE 7F 7F CC +R 00 00 00 09 12 07 00 02 +T 00 00 75 01 F1 +R 00 00 00 09 00 03 00 09 +T 00 00 77 +R 00 00 00 09 +T 00 00 77 5F 90 5F CC 01 F1 +R 00 00 00 09 00 07 00 09 +T 00 00 7D +R 00 00 00 09 +T 00 00 7D 1E 0E 89 1E 0E 89 4B 3B 4B AA 4B B8 4B +R 00 00 00 09 +T 00 00 8A 3F CD 00 00 5B 08 1F 0A 17 08 1E 0A 89 +R 00 00 00 09 02 05 00 01 +T 00 00 97 1E 0A 89 CD 00 00 5B 04 1F 02 0D 02 2A +R 00 00 00 09 02 07 00 08 +T 00 00 A4 05 1E 02 5A 1F 02 +R 00 00 00 09 +T 00 00 AA +R 00 00 00 09 +T 00 00 AA 1E 02 89 CD 00 00 5B 02 89 90 89 1E 0E +R 00 00 00 09 02 07 00 07 +T 00 00 B7 89 1E 0E 89 CD 00 00 5B 08 4B 00 4B 00 +R 00 00 00 09 02 08 00 00 +T 00 00 C4 4B 00 4B 3F 89 90 89 CD 00 00 5B 08 4D +R 00 00 00 09 02 0B 00 03 +T 00 00 D1 26 05 1E 02 5C 1F 02 +R 00 00 00 09 +T 00 00 D8 +R 00 00 00 09 +T 00 00 D8 1E 02 89 CD 00 00 5B 02 1F 0A 17 08 1E +R 00 00 00 09 02 07 00 07 +T 00 00 E5 0A 89 1E 0A 89 4B 00 4B 80 4B 31 4B 3F +R 00 00 00 09 +T 00 00 F2 CD 00 00 5B 08 89 90 89 1E 12 89 1E 12 +R 00 00 00 09 02 04 00 01 +T 00 00 FF 89 CD 00 00 5B 08 1F 0E 17 0C 1E 0A 89 +R 00 00 00 09 02 05 00 00 +T 00 01 0C 1E 0A 89 4B 83 4B 80 4B 5E 4B B9 CD +R 00 00 00 09 +T 00 01 18 00 00 5B 08 89 90 89 1E 12 89 1E 12 89 +R 00 00 00 09 02 03 00 01 +T 00 01 25 CD 00 00 5B 08 1F 06 17 04 1E 06 89 1E +R 00 00 00 09 02 04 00 00 +T 00 01 32 06 89 1E 0A 89 1E 0A 89 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 01 +T 00 01 3F 1F 0A 17 08 1E 0A 89 1E 0A 89 4B 08 4B +R 00 00 00 09 +T 00 01 4C 53 4B 88 4B 3B CD 00 00 5B 08 4B 00 4B +R 00 00 00 09 02 09 00 01 +T 00 01 59 00 4B 80 4B 3E 89 90 89 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 05 +T 00 01 66 1F 0E 1E 06 89 1E 06 89 1E 12 89 90 89 +R 00 00 00 09 +T 00 01 73 CD 00 00 5B 08 1F 0E 17 0C 1E 0A 89 1E +R 00 00 00 09 02 04 00 01 +T 00 01 80 0A 89 4B 5B 4B BF 4B 4C 4B 3D CD 00 00 +R 00 00 00 09 02 0E 00 01 +T 00 01 8D 5B 08 4B 00 4B 00 4B 00 4B 3F 89 90 89 +R 00 00 00 09 +T 00 01 9A CD 00 00 5B 08 1F 0A 1E 0E 89 1E 0E 89 +R 00 00 00 09 02 04 00 05 +T 00 01 A7 1E 0E 89 90 89 CD 00 00 5B 08 89 90 89 +R 00 00 00 09 02 09 00 00 +T 00 01 B4 1E 12 89 1E 12 89 CD 00 00 5B 08 4B 00 +R 00 00 00 09 02 0A 00 09 +T 00 01 C1 4B 00 4B 00 4B 3F 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 05 +T 00 01 CE 08 1F 0E 1E 02 5C 89 1E 10 89 90 89 CD +R 00 00 00 09 +T 00 01 DB 00 00 5B 06 0D 01 27 0E 89 90 89 5F 89 +R 00 00 00 09 02 03 00 06 +T 00 01 E8 4B 80 4B 3F CD 00 00 5B 08 +R 00 00 00 09 02 08 00 09 +T 00 01 F1 +R 00 00 00 09 +T 00 01 F1 +R 00 00 00 09 +T 00 01 F1 5B 0F 81 +R 00 00 00 09 diff --git a/device/lib/stm8/expf.sym b/device/lib/stm8/expf.sym new file mode 100644 index 0000000..1556127 --- /dev/null +++ b/device/lib/stm8/expf.sym @@ -0,0 +1,38 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fs2sint ****** GX + ___fsadd ****** GX + ___fsdiv ****** GX + ___fslt ****** GX + ___fsmul ****** GX + ___fssub ****** GX + ___sint2fs ****** GX + _errno ****** GX + 9 _expf 000000 GR + _ldexpf ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1F4 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/fabsf.asm b/device/lib/stm8/fabsf.asm new file mode 100644 index 0000000..cad5eeb --- /dev/null +++ b/device/lib/stm8/fabsf.asm @@ -0,0 +1,76 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module fabsf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _fabsf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../fabsf.c: 34: float fabsf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function fabsf +; ----------------------------------------- +_fabsf: + sub sp, #4 +; ../fabsf.c: 38: fl.f = x; + ldw y, (0x09, sp) + ldw (0x03, sp), y + ldw y, (0x07, sp) + ldw (0x01, sp), y +; ../fabsf.c: 39: fl.l &= 0x7fffffff; + ldw y, (0x03, sp) + ldw x, (0x01, sp) + sllw x + srlw x + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../fabsf.c: 40: return fl.f; + ldw x, (0x03, sp) + ldw y, (0x01, sp) +; ../fabsf.c: 41: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/fabsf.lst b/device/lib/stm8/fabsf.lst new file mode 100644 index 0000000..5d5c23b --- /dev/null +++ b/device/lib/stm8/fabsf.lst @@ -0,0 +1,76 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module fabsf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _fabsf + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../fabsf.c: 34: float fabsf(float x) _FLOAT_FUNC_REENTRANT + 50 ; ----------------------------------------- + 51 ; function fabsf + 52 ; ----------------------------------------- + 000000 53 _fabsf: + 000000 52 04 [ 2] 54 sub sp, #4 + 55 ; ../fabsf.c: 38: fl.f = x; + 000002 16 09 [ 2] 56 ldw y, (0x09, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 07 [ 2] 58 ldw y, (0x07, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../fabsf.c: 39: fl.l &= 0x7fffffff; + 00000A 16 03 [ 2] 61 ldw y, (0x03, sp) + 00000C 1E 01 [ 2] 62 ldw x, (0x01, sp) + 00000E 58 [ 2] 63 sllw x + 00000F 54 [ 2] 64 srlw x + 000010 17 03 [ 2] 65 ldw (0x03, sp), y + 000012 1F 01 [ 2] 66 ldw (0x01, sp), x + 67 ; ../fabsf.c: 40: return fl.f; + 000014 1E 03 [ 2] 68 ldw x, (0x03, sp) + 000016 16 01 [ 2] 69 ldw y, (0x01, sp) + 70 ; ../fabsf.c: 41: } + 000018 5B 04 [ 2] 71 addw sp, #4 + 00001A 81 [ 4] 72 ret + 73 .area CODE + 74 .area CONST + 75 .area INITIALIZER + 76 .area CABS (ABS) diff --git a/device/lib/stm8/fabsf.rel b/device/lib/stm8/fabsf.rel new file mode 100644 index 0000000..e20d42e --- /dev/null +++ b/device/lib/stm8/fabsf.rel @@ -0,0 +1,25 @@ +XH3 +H B areas 2 global symbols +M fabsf +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1B flags 0 addr 0 +S _fabsf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 16 09 17 03 16 07 17 01 16 03 1E +R 00 00 00 09 +T 00 00 0D 01 58 54 17 03 1F 01 1E 03 16 01 5B 04 +R 00 00 00 09 +T 00 00 1A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/fabsf.sym b/device/lib/stm8/fabsf.sym new file mode 100644 index 0000000..5d2c7b3 --- /dev/null +++ b/device/lib/stm8/fabsf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _fabsf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/floorf.asm b/device/lib/stm8/floorf.asm new file mode 100644 index 0000000..1a0103c --- /dev/null +++ b/device/lib/stm8/floorf.asm @@ -0,0 +1,128 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module floorf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _floorf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../floorf.c: 33: float floorf (float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function floorf +; ----------------------------------------- +_floorf: + sub sp, #8 +; ../floorf.c: 36: r=x; + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fs2slong + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../floorf.c: 38: return (r+((r>x)?-1:0)); + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + call ___slong2fs + addw sp, #4 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../floorf.c: 37: if (r<=0) + clrw x + cpw x, (0x03, sp) + clr a + sbc a, (0x02, sp) + clr a + sbc a, (0x01, sp) + jrslt 00102$ +; ../floorf.c: 38: return (r+((r>x)?-1:0)); + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00106$ + clrw x + decw x + .byte 0x21 +00106$: + clrw x +00107$: + exgw x, y + clrw x + tnzw y + jrpl 00120$ + decw x +00120$: + addw y, (0x03, sp) + ld a, xl + adc a, (0x02, sp) + rlwa x + adc a, (0x01, sp) + ld xh, a + pushw y + pushw x + call ___slong2fs + addw sp, #4 + jra 00104$ +00102$: +; ../floorf.c: 40: return r; + ldw x, (0x07, sp) + ldw y, (0x05, sp) +00104$: +; ../floorf.c: 41: } + addw sp, #8 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/floorf.lst b/device/lib/stm8/floorf.lst new file mode 100644 index 0000000..7c76c63 --- /dev/null +++ b/device/lib/stm8/floorf.lst @@ -0,0 +1,128 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module floorf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _floorf + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../floorf.c: 33: float floorf (float x) _FLOAT_FUNC_REENTRANT + 50 ; ----------------------------------------- + 51 ; function floorf + 52 ; ----------------------------------------- + 000000 53 _floorf: + 000000 52 08 [ 2] 54 sub sp, #8 + 55 ; ../floorf.c: 36: r=x; + 000002 1E 0D [ 2] 56 ldw x, (0x0d, sp) + 000004 89 [ 2] 57 pushw x + 000005 1E 0D [ 2] 58 ldw x, (0x0d, sp) + 000007 89 [ 2] 59 pushw x + 000008 CDr00r00 [ 4] 60 call ___fs2slong + 00000B 5B 04 [ 2] 61 addw sp, #4 + 00000D 1F 03 [ 2] 62 ldw (0x03, sp), x + 00000F 17 01 [ 2] 63 ldw (0x01, sp), y + 64 ; ../floorf.c: 38: return (r+((r>x)?-1:0)); + 000011 1E 03 [ 2] 65 ldw x, (0x03, sp) + 000013 89 [ 2] 66 pushw x + 000014 1E 03 [ 2] 67 ldw x, (0x03, sp) + 000016 89 [ 2] 68 pushw x + 000017 CDr00r00 [ 4] 69 call ___slong2fs + 00001A 5B 04 [ 2] 70 addw sp, #4 + 00001C 1F 07 [ 2] 71 ldw (0x07, sp), x + 00001E 17 05 [ 2] 72 ldw (0x05, sp), y + 73 ; ../floorf.c: 37: if (r<=0) + 000020 5F [ 1] 74 clrw x + 000021 13 03 [ 2] 75 cpw x, (0x03, sp) + 000023 4F [ 1] 76 clr a + 000024 12 02 [ 1] 77 sbc a, (0x02, sp) + 000026 4F [ 1] 78 clr a + 000027 12 01 [ 1] 79 sbc a, (0x01, sp) + 000029 2F 33 [ 1] 80 jrslt 00102$ + 81 ; ../floorf.c: 38: return (r+((r>x)?-1:0)); + 00002B 1E 07 [ 2] 82 ldw x, (0x07, sp) + 00002D 89 [ 2] 83 pushw x + 00002E 1E 07 [ 2] 84 ldw x, (0x07, sp) + 000030 89 [ 2] 85 pushw x + 000031 1E 11 [ 2] 86 ldw x, (0x11, sp) + 000033 89 [ 2] 87 pushw x + 000034 1E 11 [ 2] 88 ldw x, (0x11, sp) + 000036 89 [ 2] 89 pushw x + 000037 CDr00r00 [ 4] 90 call ___fslt + 00003A 5B 08 [ 2] 91 addw sp, #8 + 00003C 4D [ 1] 92 tnz a + 00003D 27 03 [ 1] 93 jreq 00106$ + 00003F 5F [ 1] 94 clrw x + 000040 5A [ 2] 95 decw x + 000041 21 96 .byte 0x21 + 000042 97 00106$: + 000042 5F [ 1] 98 clrw x + 000043 99 00107$: + 000043 51 [ 1] 100 exgw x, y + 000044 5F [ 1] 101 clrw x + 000045 90 5D [ 2] 102 tnzw y + 000047 2A 01 [ 1] 103 jrpl 00120$ + 000049 5A [ 2] 104 decw x + 00004A 105 00120$: + 00004A 72 F9 03 [ 2] 106 addw y, (0x03, sp) + 00004D 9F [ 1] 107 ld a, xl + 00004E 19 02 [ 1] 108 adc a, (0x02, sp) + 000050 02 [ 1] 109 rlwa x + 000051 19 01 [ 1] 110 adc a, (0x01, sp) + 000053 95 [ 1] 111 ld xh, a + 000054 90 89 [ 2] 112 pushw y + 000056 89 [ 2] 113 pushw x + 000057 CDr00r00 [ 4] 114 call ___slong2fs + 00005A 5B 04 [ 2] 115 addw sp, #4 + 00005C 20 04 [ 2] 116 jra 00104$ + 00005E 117 00102$: + 118 ; ../floorf.c: 40: return r; + 00005E 1E 07 [ 2] 119 ldw x, (0x07, sp) + 000060 16 05 [ 2] 120 ldw y, (0x05, sp) + 000062 121 00104$: + 122 ; ../floorf.c: 41: } + 000062 5B 08 [ 2] 123 addw sp, #8 + 000064 81 [ 4] 124 ret + 125 .area CODE + 126 .area CONST + 127 .area INITIALIZER + 128 .area CABS (ABS) diff --git a/device/lib/stm8/floorf.rel b/device/lib/stm8/floorf.rel new file mode 100644 index 0000000..72cdc09 --- /dev/null +++ b/device/lib/stm8/floorf.rel @@ -0,0 +1,56 @@ +XH3 +H B areas 5 global symbols +M floorf +O -mstm8 +S ___slong2fs Ref000000 +S ___fs2slong Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 65 flags 0 addr 0 +S _floorf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 08 1E 0D 89 1E 0D 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 01 +T 00 00 0D 1F 03 17 01 1E 03 89 1E 03 89 CD 00 00 +R 00 00 00 09 02 0E 00 00 +T 00 00 1A 5B 04 1F 07 17 05 5F 13 03 4F 12 02 4F +R 00 00 00 09 +T 00 00 27 12 01 2F 33 1E 07 89 1E 07 89 1E 11 89 +R 00 00 00 09 +T 00 00 34 1E 11 89 CD 00 00 5B 08 4D 27 03 5F 5A +R 00 00 00 09 02 07 00 02 +T 00 00 41 21 +R 00 00 00 09 +T 00 00 42 +R 00 00 00 09 +T 00 00 42 5F +R 00 00 00 09 +T 00 00 43 +R 00 00 00 09 +T 00 00 43 51 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 4A +R 00 00 00 09 +T 00 00 4A 72 F9 03 9F 19 02 02 19 01 95 90 89 89 +R 00 00 00 09 +T 00 00 57 CD 00 00 5B 04 20 04 +R 00 00 00 09 02 04 00 00 +T 00 00 5E +R 00 00 00 09 +T 00 00 5E 1E 07 16 05 +R 00 00 00 09 +T 00 00 62 +R 00 00 00 09 +T 00 00 62 5B 08 81 +R 00 00 00 09 diff --git a/device/lib/stm8/floorf.sym b/device/lib/stm8/floorf.sym new file mode 100644 index 0000000..a95665d --- /dev/null +++ b/device/lib/stm8/floorf.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fs2slong ****** GX + ___fslt ****** GX + ___slong2fs ****** GX + 9 _floorf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 65 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/free.asm b/device/lib/stm8/free.asm new file mode 100644 index 0000000..7ffbbd5 --- /dev/null +++ b/device/lib/stm8/free.asm @@ -0,0 +1,144 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module free + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _free +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../free.c: 50: void free(void *ptr) +; ----------------------------------------- +; function free +; ----------------------------------------- +_free: + sub sp, #10 +; ../free.c: 55: if(!ptr) + ldw x, (0x0d, sp) +; ../free.c: 56: return; + jreq 00113$ +; ../free.c: 58: prev_free = 0; + clrw x + ldw (0x01, sp), x +; ../free.c: 59: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h && h < ptr; prev_free = h, f = &(h->next_free), h = h->next_free); // Find adjacent blocks in free list + ldw x, ___sdcc_heap_free+0 + ldw (0x09, sp), x + ldw x, #(___sdcc_heap_free + 0) + ldw (0x03, sp), x +00111$: + ldw x, (0x09, sp) + jreq 00103$ + ldw y, (0x0d, sp) + ldw (0x07, sp), y + ldw x, (0x09, sp) + cpw x, (0x07, sp) + jrnc 00103$ + ldw y, (0x09, sp) + ldw (0x01, sp), y + ldw x, (0x09, sp) + incw x + incw x + ldw (0x03, sp), x + ldw x, (x) + ldw (0x09, sp), x + jra 00111$ +00103$: +; ../free.c: 60: next_free = h; + ldw y, (0x09, sp) + ldw (0x05, sp), y +; ../free.c: 62: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free)); + ldw x, (0x0d, sp) + decw x + decw x +; ../free.c: 65: h->next_free = next_free; + ldw (0x07, sp), x + incw x + incw x + ldw (0x09, sp), x + ldw y, (0x05, sp) + ldw (x), y +; ../free.c: 66: *f = h; + ldw x, (0x03, sp) + ldw y, (0x07, sp) + ldw (x), y +; ../free.c: 68: if(next_free == h->next) // Merge with next block + ldw x, (0x07, sp) + ldw x, (x) + cpw x, (0x05, sp) + jrne 00105$ +; ../free.c: 70: h->next_free = h->next->next_free; + ldw x, (0x2, x) + ldw y, (0x09, sp) + ldw (y), x +; ../free.c: 71: h->next = h->next->next; + ldw x, (0x07, sp) + ldw x, (x) + ldw x, (x) + ldw y, (0x07, sp) + ldw (y), x +00105$: +; ../free.c: 74: if (prev_free && prev_free->next == h) // Merge with previous block + ldw x, (0x01, sp) + jreq 00113$ + ldw x, (x) + cpw x, (0x07, sp) + jrne 00113$ +; ../free.c: 76: prev_free->next = h->next; + ldw x, (0x07, sp) + ldw x, (x) + ldw y, (0x01, sp) + ldw (y), x +; ../free.c: 77: prev_free->next_free = h->next_free; + ldw x, (0x01, sp) + incw x + incw x + ldw y, (0x09, sp) + ldw y, (y) + ldw (x), y +00113$: +; ../free.c: 79: } + addw sp, #10 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/free.lst b/device/lib/stm8/free.lst new file mode 100644 index 0000000..07fcd6c --- /dev/null +++ b/device/lib/stm8/free.lst @@ -0,0 +1,144 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module free + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _free + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../free.c: 50: void free(void *ptr) + 50 ; ----------------------------------------- + 51 ; function free + 52 ; ----------------------------------------- + 000000 53 _free: + 000000 52 0A [ 2] 54 sub sp, #10 + 55 ; ../free.c: 55: if(!ptr) + 000002 1E 0D [ 2] 56 ldw x, (0x0d, sp) + 57 ; ../free.c: 56: return; + 000004 27 6E [ 1] 58 jreq 00113$ + 59 ; ../free.c: 58: prev_free = 0; + 000006 5F [ 1] 60 clrw x + 000007 1F 01 [ 2] 61 ldw (0x01, sp), x + 62 ; ../free.c: 59: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h && h < ptr; prev_free = h, f = &(h->next_free), h = h->next_free); // Find adjacent blocks in free list + 000009 CEu00u00 [ 2] 63 ldw x, ___sdcc_heap_free+0 + 00000C 1F 09 [ 2] 64 ldw (0x09, sp), x + 00000E AEr00r00 [ 2] 65 ldw x, #(___sdcc_heap_free + 0) + 000011 1F 03 [ 2] 66 ldw (0x03, sp), x + 000013 67 00111$: + 000013 1E 09 [ 2] 68 ldw x, (0x09, sp) + 000015 27 19 [ 1] 69 jreq 00103$ + 000017 16 0D [ 2] 70 ldw y, (0x0d, sp) + 000019 17 07 [ 2] 71 ldw (0x07, sp), y + 00001B 1E 09 [ 2] 72 ldw x, (0x09, sp) + 00001D 13 07 [ 2] 73 cpw x, (0x07, sp) + 00001F 24 0F [ 1] 74 jrnc 00103$ + 000021 16 09 [ 2] 75 ldw y, (0x09, sp) + 000023 17 01 [ 2] 76 ldw (0x01, sp), y + 000025 1E 09 [ 2] 77 ldw x, (0x09, sp) + 000027 5C [ 1] 78 incw x + 000028 5C [ 1] 79 incw x + 000029 1F 03 [ 2] 80 ldw (0x03, sp), x + 00002B FE [ 2] 81 ldw x, (x) + 00002C 1F 09 [ 2] 82 ldw (0x09, sp), x + 00002E 20 E3 [ 2] 83 jra 00111$ + 000030 84 00103$: + 85 ; ../free.c: 60: next_free = h; + 000030 16 09 [ 2] 86 ldw y, (0x09, sp) + 000032 17 05 [ 2] 87 ldw (0x05, sp), y + 88 ; ../free.c: 62: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free)); + 000034 1E 0D [ 2] 89 ldw x, (0x0d, sp) + 000036 5A [ 2] 90 decw x + 000037 5A [ 2] 91 decw x + 92 ; ../free.c: 65: h->next_free = next_free; + 000038 1F 07 [ 2] 93 ldw (0x07, sp), x + 00003A 5C [ 1] 94 incw x + 00003B 5C [ 1] 95 incw x + 00003C 1F 09 [ 2] 96 ldw (0x09, sp), x + 00003E 16 05 [ 2] 97 ldw y, (0x05, sp) + 000040 FF [ 2] 98 ldw (x), y + 99 ; ../free.c: 66: *f = h; + 000041 1E 03 [ 2] 100 ldw x, (0x03, sp) + 000043 16 07 [ 2] 101 ldw y, (0x07, sp) + 000045 FF [ 2] 102 ldw (x), y + 103 ; ../free.c: 68: if(next_free == h->next) // Merge with next block + 000046 1E 07 [ 2] 104 ldw x, (0x07, sp) + 000048 FE [ 2] 105 ldw x, (x) + 000049 13 05 [ 2] 106 cpw x, (0x05, sp) + 00004B 26 0E [ 1] 107 jrne 00105$ + 108 ; ../free.c: 70: h->next_free = h->next->next_free; + 00004D EE 02 [ 2] 109 ldw x, (0x2, x) + 00004F 16 09 [ 2] 110 ldw y, (0x09, sp) + 000051 90 FF [ 2] 111 ldw (y), x + 112 ; ../free.c: 71: h->next = h->next->next; + 000053 1E 07 [ 2] 113 ldw x, (0x07, sp) + 000055 FE [ 2] 114 ldw x, (x) + 000056 FE [ 2] 115 ldw x, (x) + 000057 16 07 [ 2] 116 ldw y, (0x07, sp) + 000059 90 FF [ 2] 117 ldw (y), x + 00005B 118 00105$: + 119 ; ../free.c: 74: if (prev_free && prev_free->next == h) // Merge with previous block + 00005B 1E 01 [ 2] 120 ldw x, (0x01, sp) + 00005D 27 15 [ 1] 121 jreq 00113$ + 00005F FE [ 2] 122 ldw x, (x) + 000060 13 07 [ 2] 123 cpw x, (0x07, sp) + 000062 26 10 [ 1] 124 jrne 00113$ + 125 ; ../free.c: 76: prev_free->next = h->next; + 000064 1E 07 [ 2] 126 ldw x, (0x07, sp) + 000066 FE [ 2] 127 ldw x, (x) + 000067 16 01 [ 2] 128 ldw y, (0x01, sp) + 000069 90 FF [ 2] 129 ldw (y), x + 130 ; ../free.c: 77: prev_free->next_free = h->next_free; + 00006B 1E 01 [ 2] 131 ldw x, (0x01, sp) + 00006D 5C [ 1] 132 incw x + 00006E 5C [ 1] 133 incw x + 00006F 16 09 [ 2] 134 ldw y, (0x09, sp) + 000071 90 FE [ 2] 135 ldw y, (y) + 000073 FF [ 2] 136 ldw (x), y + 000074 137 00113$: + 138 ; ../free.c: 79: } + 000074 5B 0A [ 2] 139 addw sp, #10 + 000076 81 [ 4] 140 ret + 141 .area CODE + 142 .area CONST + 143 .area INITIALIZER + 144 .area CABS (ABS) diff --git a/device/lib/stm8/free.rel b/device/lib/stm8/free.rel new file mode 100644 index 0000000..ac79f3f --- /dev/null +++ b/device/lib/stm8/free.rel @@ -0,0 +1,52 @@ +XH3 +H B areas 3 global symbols +M free +O -mstm8 +S .__.ABS. Def000000 +S ___sdcc_heap_free Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 77 flags 0 addr 0 +S _free Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 1E 0D 27 6E 5F 1F 01 CE 00 00 1F +R 00 00 00 09 12 0D 00 01 +T 00 00 0D 09 AE 00 00 1F 03 +R 00 00 00 09 02 05 00 01 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 1E 09 27 19 16 0D 17 07 1E 09 13 07 24 +R 00 00 00 09 +T 00 00 20 0F 16 09 17 01 1E 09 5C 5C 1F 03 FE 1F +R 00 00 00 09 +T 00 00 2D 09 20 E3 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 16 09 17 05 1E 0D 5A 5A 1F 07 5C 5C 1F +R 00 00 00 09 +T 00 00 3D 09 16 05 FF 1E 03 16 07 FF 1E 07 FE 13 +R 00 00 00 09 +T 00 00 4A 05 26 0E EE 02 16 09 90 FF 1E 07 FE FE +R 00 00 00 09 +T 00 00 57 16 07 90 FF +R 00 00 00 09 +T 00 00 5B +R 00 00 00 09 +T 00 00 5B 1E 01 27 15 FE 13 07 26 10 1E 07 FE 16 +R 00 00 00 09 +T 00 00 68 01 90 FF 1E 01 5C 5C 16 09 90 FE FF +R 00 00 00 09 +T 00 00 74 +R 00 00 00 09 +T 00 00 74 5B 0A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/free.sym b/device/lib/stm8/free.sym new file mode 100644 index 0000000..0aea47f --- /dev/null +++ b/device/lib/stm8/free.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___sdcc_heap_free ****** GX + 9 _free 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 77 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/frexpf.asm b/device/lib/stm8/frexpf.asm new file mode 100644 index 0000000..67d5534 --- /dev/null +++ b/device/lib/stm8/frexpf.asm @@ -0,0 +1,128 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module frexpf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _frexpf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../frexpf.c: 34: float frexpf(float x, int *pw2) +; ----------------------------------------- +; function frexpf +; ----------------------------------------- +_frexpf: + sub sp, #8 +; ../frexpf.c: 39: fl.f=x; + ldw y, (0x0d, sp) + ldw (0x03, sp), y + ldw y, (0x0b, sp) + ldw (0x01, sp), y +; ../frexpf.c: 41: i = ( fl.l >> 23) & 0x000000ff; + ldw y, (0x03, sp) + ldw x, (0x01, sp) + clr a + tnzw x + jrpl 00103$ + dec a +00103$: + push a + rrwa x + rrwa y + ld a, (1, sp) + rrwa x + rrwa y + ld a, (1, sp) + rrwa x + rrwa y + sll a + rlcw y + rlcw x + pop a + clr a + clrw x +; ../frexpf.c: 42: i -= 0x7e; + ld yh, a + subw y, #0x007e + ld a, xl + sbc a, #0x00 + rlwa x + sbc a, #0x00 + ldw (0x07, sp), y + exg a, xl + ld (0x06, sp), a + exg a, xl + ld (0x05, sp), a +; ../frexpf.c: 43: *pw2 = i; + ldw x, (0x0f, sp) + ldw y, (0x07, sp) + ldw (x), y +; ../frexpf.c: 44: fl.l &= 0x807fffff; /* strip all exponent bits */ + ldw y, (0x03, sp) + ldw x, (0x01, sp) + ld a, xl + and a, #0x7f + rlwa x + and a, #0x80 + ld xh, a + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../frexpf.c: 45: fl.l |= 0x3f000000; /* mantissa between 0.5 and 1 */ + ld a, (0x04, sp) + ld a, (0x03, sp) + ld a, (0x02, sp) + ld a, (0x01, sp) + ld a, xh + or a, #0x3f + ld xh, a + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../frexpf.c: 46: return(fl.f); + ldw x, (0x03, sp) + ldw y, (0x01, sp) +; ../frexpf.c: 47: } + addw sp, #8 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/frexpf.lst b/device/lib/stm8/frexpf.lst new file mode 100644 index 0000000..3c989df --- /dev/null +++ b/device/lib/stm8/frexpf.lst @@ -0,0 +1,128 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module frexpf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _frexpf + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../frexpf.c: 34: float frexpf(float x, int *pw2) + 50 ; ----------------------------------------- + 51 ; function frexpf + 52 ; ----------------------------------------- + 000000 53 _frexpf: + 000000 52 08 [ 2] 54 sub sp, #8 + 55 ; ../frexpf.c: 39: fl.f=x; + 000002 16 0D [ 2] 56 ldw y, (0x0d, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 0B [ 2] 58 ldw y, (0x0b, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../frexpf.c: 41: i = ( fl.l >> 23) & 0x000000ff; + 00000A 16 03 [ 2] 61 ldw y, (0x03, sp) + 00000C 1E 01 [ 2] 62 ldw x, (0x01, sp) + 00000E 4F [ 1] 63 clr a + 00000F 5D [ 2] 64 tnzw x + 000010 2A 01 [ 1] 65 jrpl 00103$ + 000012 4A [ 1] 66 dec a + 000013 67 00103$: + 000013 88 [ 1] 68 push a + 000014 01 [ 1] 69 rrwa x + 000015 90 01 [ 1] 70 rrwa y + 000017 7B 01 [ 1] 71 ld a, (1, sp) + 000019 01 [ 1] 72 rrwa x + 00001A 90 01 [ 1] 73 rrwa y + 00001C 7B 01 [ 1] 74 ld a, (1, sp) + 00001E 01 [ 1] 75 rrwa x + 00001F 90 01 [ 1] 76 rrwa y + 000021 48 [ 1] 77 sll a + 000022 90 59 [ 2] 78 rlcw y + 000024 59 [ 2] 79 rlcw x + 000025 84 [ 1] 80 pop a + 000026 4F [ 1] 81 clr a + 000027 5F [ 1] 82 clrw x + 83 ; ../frexpf.c: 42: i -= 0x7e; + 000028 90 95 [ 1] 84 ld yh, a + 00002A 72 A2 00 7E [ 2] 85 subw y, #0x007e + 00002E 9F [ 1] 86 ld a, xl + 00002F A2 00 [ 1] 87 sbc a, #0x00 + 000031 02 [ 1] 88 rlwa x + 000032 A2 00 [ 1] 89 sbc a, #0x00 + 000034 17 07 [ 2] 90 ldw (0x07, sp), y + 000036 41 [ 1] 91 exg a, xl + 000037 6B 06 [ 1] 92 ld (0x06, sp), a + 000039 41 [ 1] 93 exg a, xl + 00003A 6B 05 [ 1] 94 ld (0x05, sp), a + 95 ; ../frexpf.c: 43: *pw2 = i; + 00003C 1E 0F [ 2] 96 ldw x, (0x0f, sp) + 00003E 16 07 [ 2] 97 ldw y, (0x07, sp) + 000040 FF [ 2] 98 ldw (x), y + 99 ; ../frexpf.c: 44: fl.l &= 0x807fffff; /* strip all exponent bits */ + 000041 16 03 [ 2] 100 ldw y, (0x03, sp) + 000043 1E 01 [ 2] 101 ldw x, (0x01, sp) + 000045 9F [ 1] 102 ld a, xl + 000046 A4 7F [ 1] 103 and a, #0x7f + 000048 02 [ 1] 104 rlwa x + 000049 A4 80 [ 1] 105 and a, #0x80 + 00004B 95 [ 1] 106 ld xh, a + 00004C 17 03 [ 2] 107 ldw (0x03, sp), y + 00004E 1F 01 [ 2] 108 ldw (0x01, sp), x + 109 ; ../frexpf.c: 45: fl.l |= 0x3f000000; /* mantissa between 0.5 and 1 */ + 000050 7B 04 [ 1] 110 ld a, (0x04, sp) + 000052 7B 03 [ 1] 111 ld a, (0x03, sp) + 000054 7B 02 [ 1] 112 ld a, (0x02, sp) + 000056 7B 01 [ 1] 113 ld a, (0x01, sp) + 000058 9E [ 1] 114 ld a, xh + 000059 AA 3F [ 1] 115 or a, #0x3f + 00005B 95 [ 1] 116 ld xh, a + 00005C 17 03 [ 2] 117 ldw (0x03, sp), y + 00005E 1F 01 [ 2] 118 ldw (0x01, sp), x + 119 ; ../frexpf.c: 46: return(fl.f); + 000060 1E 03 [ 2] 120 ldw x, (0x03, sp) + 000062 16 01 [ 2] 121 ldw y, (0x01, sp) + 122 ; ../frexpf.c: 47: } + 000064 5B 08 [ 2] 123 addw sp, #8 + 000066 81 [ 4] 124 ret + 125 .area CODE + 126 .area CONST + 127 .area INITIALIZER + 128 .area CABS (ABS) diff --git a/device/lib/stm8/frexpf.rel b/device/lib/stm8/frexpf.rel new file mode 100644 index 0000000..ae91282 --- /dev/null +++ b/device/lib/stm8/frexpf.rel @@ -0,0 +1,39 @@ +XH3 +H B areas 2 global symbols +M frexpf +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 67 flags 0 addr 0 +S _frexpf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 08 16 0D 17 03 16 0B 17 01 16 03 1E +R 00 00 00 09 +T 00 00 0D 01 4F 5D 2A 01 4A +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 88 01 90 01 7B 01 01 90 01 7B 01 01 90 +R 00 00 00 09 +T 00 00 20 01 48 90 59 59 84 4F 5F 90 95 72 A2 +R 00 00 00 09 +T 00 00 2C 00 7E 9F A2 00 02 A2 00 17 07 41 6B 06 +R 00 00 00 09 +T 00 00 39 41 6B 05 1E 0F 16 07 FF 16 03 1E 01 9F +R 00 00 00 09 +T 00 00 46 A4 7F 02 A4 80 95 17 03 1F 01 7B 04 7B +R 00 00 00 09 +T 00 00 53 03 7B 02 7B 01 9E AA 3F 95 17 03 1F 01 +R 00 00 00 09 +T 00 00 60 1E 03 16 01 5B 08 81 +R 00 00 00 09 diff --git a/device/lib/stm8/frexpf.sym b/device/lib/stm8/frexpf.sym new file mode 100644 index 0000000..848eb1c --- /dev/null +++ b/device/lib/stm8/frexpf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _frexpf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 67 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/gets.asm b/device/lib/stm8/gets.asm new file mode 100644 index 0000000..23ab5d2 --- /dev/null +++ b/device/lib/stm8/gets.asm @@ -0,0 +1,148 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module gets + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _gets + .globl _putchar + .globl _getchar +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../gets.c: 32: gets (char *s) +; ----------------------------------------- +; function gets +; ----------------------------------------- +_gets: + sub sp, #2 +; ../gets.c: 35: unsigned int count = 0; + clrw x + ldw (0x01, sp), x +; ../gets.c: 37: while (1) +00109$: +; ../gets.c: 39: c = getchar (); + call _getchar + ld a, xl +; ../gets.c: 40: switch(c) + cp a, #0x08 + jreq 00101$ +; ../gets.c: 57: *s = 0; + ldw x, (0x05, sp) +; ../gets.c: 40: switch(c) + cp a, #0x0a + jreq 00105$ + cp a, #0x0d + jreq 00105$ + jra 00106$ +; ../gets.c: 42: case '\b': /* backspace */ +00101$: +; ../gets.c: 43: if (count) + ldw x, (0x01, sp) + jreq 00109$ +; ../gets.c: 45: putchar ('\b'); + push #0x08 + push #0x00 + call _putchar + addw sp, #2 +; ../gets.c: 46: putchar (' '); + push #0x20 + push #0x00 + call _putchar + addw sp, #2 +; ../gets.c: 47: putchar ('\b'); + push #0x08 + push #0x00 + call _putchar + addw sp, #2 +; ../gets.c: 48: --s; + ldw x, (0x05, sp) + decw x + ldw (0x05, sp), x +; ../gets.c: 49: --count; + ldw x, (0x01, sp) + decw x + ldw (0x01, sp), x +; ../gets.c: 51: break; + jra 00109$ +; ../gets.c: 54: case '\r': /* CR or LF */ +00105$: +; ../gets.c: 55: putchar ('\r'); + pushw x + push #0x0d + push #0x00 + call _putchar + addw sp, #2 + push #0x0a + push #0x00 + call _putchar + addw sp, #2 + popw x +; ../gets.c: 57: *s = 0; + clr (x) +; ../gets.c: 58: return s; + jra 00111$ +; ../gets.c: 60: default: +00106$: +; ../gets.c: 61: *s++ = c; + ld (x), a + incw x + ldw (0x05, sp), x +; ../gets.c: 62: ++count; + ldw x, (0x01, sp) + incw x + ldw (0x01, sp), x +; ../gets.c: 63: putchar (c); + clrw x + ld xl, a + pushw x + call _putchar + addw sp, #2 +; ../gets.c: 65: } + jra 00109$ +00111$: +; ../gets.c: 67: } + addw sp, #2 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/gets.lst b/device/lib/stm8/gets.lst new file mode 100644 index 0000000..602ac3a --- /dev/null +++ b/device/lib/stm8/gets.lst @@ -0,0 +1,148 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module gets + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _gets + 12 .globl _putchar + 13 .globl _getchar + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../gets.c: 32: gets (char *s) + 52 ; ----------------------------------------- + 53 ; function gets + 54 ; ----------------------------------------- + 000000 55 _gets: + 000000 52 02 [ 2] 56 sub sp, #2 + 57 ; ../gets.c: 35: unsigned int count = 0; + 000002 5F [ 1] 58 clrw x + 000003 1F 01 [ 2] 59 ldw (0x01, sp), x + 60 ; ../gets.c: 37: while (1) + 000005 61 00109$: + 62 ; ../gets.c: 39: c = getchar (); + 000005 CDr00r00 [ 4] 63 call _getchar + 000008 9F [ 1] 64 ld a, xl + 65 ; ../gets.c: 40: switch(c) + 000009 A1 08 [ 1] 66 cp a, #0x08 + 00000B 27 0C [ 1] 67 jreq 00101$ + 68 ; ../gets.c: 57: *s = 0; + 00000D 1E 05 [ 2] 69 ldw x, (0x05, sp) + 70 ; ../gets.c: 40: switch(c) + 00000F A1 0A [ 1] 71 cp a, #0x0a + 000011 27 31 [ 1] 72 jreq 00105$ + 000013 A1 0D [ 1] 73 cp a, #0x0d + 000015 27 2D [ 1] 74 jreq 00105$ + 000017 20 42 [ 2] 75 jra 00106$ + 76 ; ../gets.c: 42: case '\b': /* backspace */ + 000019 77 00101$: + 78 ; ../gets.c: 43: if (count) + 000019 1E 01 [ 2] 79 ldw x, (0x01, sp) + 00001B 27 E8 [ 1] 80 jreq 00109$ + 81 ; ../gets.c: 45: putchar ('\b'); + 00001D 4B 08 [ 1] 82 push #0x08 + 00001F 4B 00 [ 1] 83 push #0x00 + 000021 CDr00r00 [ 4] 84 call _putchar + 000024 5B 02 [ 2] 85 addw sp, #2 + 86 ; ../gets.c: 46: putchar (' '); + 000026 4B 20 [ 1] 87 push #0x20 + 000028 4B 00 [ 1] 88 push #0x00 + 00002A CDr00r00 [ 4] 89 call _putchar + 00002D 5B 02 [ 2] 90 addw sp, #2 + 91 ; ../gets.c: 47: putchar ('\b'); + 00002F 4B 08 [ 1] 92 push #0x08 + 000031 4B 00 [ 1] 93 push #0x00 + 000033 CDr00r00 [ 4] 94 call _putchar + 000036 5B 02 [ 2] 95 addw sp, #2 + 96 ; ../gets.c: 48: --s; + 000038 1E 05 [ 2] 97 ldw x, (0x05, sp) + 00003A 5A [ 2] 98 decw x + 00003B 1F 05 [ 2] 99 ldw (0x05, sp), x + 100 ; ../gets.c: 49: --count; + 00003D 1E 01 [ 2] 101 ldw x, (0x01, sp) + 00003F 5A [ 2] 102 decw x + 000040 1F 01 [ 2] 103 ldw (0x01, sp), x + 104 ; ../gets.c: 51: break; + 000042 20 C1 [ 2] 105 jra 00109$ + 106 ; ../gets.c: 54: case '\r': /* CR or LF */ + 000044 107 00105$: + 108 ; ../gets.c: 55: putchar ('\r'); + 000044 89 [ 2] 109 pushw x + 000045 4B 0D [ 1] 110 push #0x0d + 000047 4B 00 [ 1] 111 push #0x00 + 000049 CDr00r00 [ 4] 112 call _putchar + 00004C 5B 02 [ 2] 113 addw sp, #2 + 00004E 4B 0A [ 1] 114 push #0x0a + 000050 4B 00 [ 1] 115 push #0x00 + 000052 CDr00r00 [ 4] 116 call _putchar + 000055 5B 02 [ 2] 117 addw sp, #2 + 000057 85 [ 2] 118 popw x + 119 ; ../gets.c: 57: *s = 0; + 000058 7F [ 1] 120 clr (x) + 121 ; ../gets.c: 58: return s; + 000059 20 13 [ 2] 122 jra 00111$ + 123 ; ../gets.c: 60: default: + 00005B 124 00106$: + 125 ; ../gets.c: 61: *s++ = c; + 00005B F7 [ 1] 126 ld (x), a + 00005C 5C [ 1] 127 incw x + 00005D 1F 05 [ 2] 128 ldw (0x05, sp), x + 129 ; ../gets.c: 62: ++count; + 00005F 1E 01 [ 2] 130 ldw x, (0x01, sp) + 000061 5C [ 1] 131 incw x + 000062 1F 01 [ 2] 132 ldw (0x01, sp), x + 133 ; ../gets.c: 63: putchar (c); + 000064 5F [ 1] 134 clrw x + 000065 97 [ 1] 135 ld xl, a + 000066 89 [ 2] 136 pushw x + 000067 CDr00r00 [ 4] 137 call _putchar + 00006A 5B 02 [ 2] 138 addw sp, #2 + 139 ; ../gets.c: 65: } + 00006C 20 97 [ 2] 140 jra 00109$ + 00006E 141 00111$: + 142 ; ../gets.c: 67: } + 00006E 5B 02 [ 2] 143 addw sp, #2 + 000070 81 [ 4] 144 ret + 145 .area CODE + 146 .area CONST + 147 .area INITIALIZER + 148 .area CABS (ABS) diff --git a/device/lib/stm8/gets.rel b/device/lib/stm8/gets.rel new file mode 100644 index 0000000..0e83b9a --- /dev/null +++ b/device/lib/stm8/gets.rel @@ -0,0 +1,55 @@ +XH3 +H B areas 4 global symbols +M gets +O -mstm8 +S _putchar Ref000000 +S .__.ABS. Def000000 +S _getchar Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 71 flags 0 addr 0 +S _gets Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 02 5F 1F 01 +R 00 00 00 09 +T 00 00 05 +R 00 00 00 09 +T 00 00 05 CD 00 00 9F A1 08 27 0C 1E 05 A1 0A 27 +R 00 00 00 09 02 04 00 02 +T 00 00 12 31 A1 0D 27 2D 20 42 +R 00 00 00 09 +T 00 00 19 +R 00 00 00 09 +T 00 00 19 1E 01 27 E8 4B 08 4B 00 CD 00 00 5B 02 +R 00 00 00 09 02 0C 00 00 +T 00 00 26 4B 20 4B 00 CD 00 00 5B 02 4B 08 4B 00 +R 00 00 00 09 02 08 00 00 +T 00 00 33 CD 00 00 5B 02 1E 05 5A 1F 05 1E 01 5A +R 00 00 00 09 02 04 00 00 +T 00 00 40 1F 01 20 C1 +R 00 00 00 09 +T 00 00 44 +R 00 00 00 09 +T 00 00 44 89 4B 0D 4B 00 CD 00 00 5B 02 4B 0A 4B +R 00 00 00 09 02 09 00 00 +T 00 00 51 00 CD 00 00 5B 02 85 7F 20 13 +R 00 00 00 09 02 05 00 00 +T 00 00 5B +R 00 00 00 09 +T 00 00 5B F7 5C 1F 05 1E 01 5C 1F 01 5F 97 89 CD +R 00 00 00 09 +T 00 00 68 00 00 5B 02 20 97 +R 00 00 00 09 02 03 00 00 +T 00 00 6E +R 00 00 00 09 +T 00 00 6E 5B 02 81 +R 00 00 00 09 diff --git a/device/lib/stm8/gets.sym b/device/lib/stm8/gets.sym new file mode 100644 index 0000000..7eb0974 --- /dev/null +++ b/device/lib/stm8/gets.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _getchar ****** GX + 9 _gets 000000 GR + _putchar ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 71 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/heap.lst b/device/lib/stm8/heap.lst new file mode 100644 index 0000000..734a22d --- /dev/null +++ b/device/lib/stm8/heap.lst @@ -0,0 +1,41 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; heap.s + 3 ; + 4 ; Copyright (C) 2014, Ben Shi + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl ___sdcc_heap_init + 30 .globl ___sdcc_heap + 31 .globl ___sdcc_heap_end + 32 + 33 .area GSINIT + 000000 CDr00r00 [ 4] 34 call ___sdcc_heap_init + 35 + 36 .area DATA + 37 ; For now just allocate 1024 bytes for the heap. + 000000 38 ___sdcc_heap:: + 000000 39 .ds 1023 + 0003FF 40 ___sdcc_heap_end:: + 0003FF 41 .ds 1 diff --git a/device/lib/stm8/heap.rel b/device/lib/stm8/heap.rel new file mode 100644 index 0000000..54dcda7 --- /dev/null +++ b/device/lib/stm8/heap.rel @@ -0,0 +1,19 @@ +XH3 +H 3 areas 4 global symbols +S ___sdcc_heap_init Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A GSINIT size 3 flags 0 addr 0 +A DATA size 400 flags 0 addr 0 +S ___sdcc_heap_end Def0003FF +S ___sdcc_heap Def000000 +T 00 00 00 CD 00 00 +R 00 00 00 01 02 04 00 00 +T 00 00 00 +R 00 00 00 02 +T 00 00 00 +R 00 00 00 02 +T 00 03 FF +R 00 00 00 02 +T 00 03 FF +R 00 00 00 02 diff --git a/device/lib/stm8/heap.s b/device/lib/stm8/heap.s new file mode 100644 index 0000000..b968e60 --- /dev/null +++ b/device/lib/stm8/heap.s @@ -0,0 +1,41 @@ +;-------------------------------------------------------------------------- +; heap.s +; +; Copyright (C) 2014, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl ___sdcc_heap_init + .globl ___sdcc_heap + .globl ___sdcc_heap_end + + .area GSINIT + call ___sdcc_heap_init + + .area DATA + ; For now just allocate 1024 bytes for the heap. +___sdcc_heap:: + .ds 1023 +___sdcc_heap_end:: + .ds 1 diff --git a/device/lib/stm8/heap.sym b/device/lib/stm8/heap.sym new file mode 100644 index 0000000..3c27b43 --- /dev/null +++ b/device/lib/stm8/heap.sym @@ -0,0 +1,18 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 2 ___sdcc_ 000000 GR | 2 ___sdcc_ 0003FF GR + ___sdcc_ ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 GSINIT size 3 flags 0 + 2 DATA size 400 flags 0 + diff --git a/device/lib/stm8/isalnum.asm b/device/lib/stm8/isalnum.asm new file mode 100644 index 0000000..a87edb6 --- /dev/null +++ b/device/lib/stm8/isalnum.asm @@ -0,0 +1,83 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isalnum + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isalpha + .globl _isalnum +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../isalnum.c: 37: int isalnum (int c) +; ----------------------------------------- +; function isalnum +; ----------------------------------------- +_isalnum: +; ../isalnum.c: 39: return (isalpha (c) || isdigit (c)); + ldw x, (0x03, sp) + pushw x + call _isalpha + addw sp, #2 + tnzw x + jrne 00105$ + ldw x, (0x03, sp) +; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + ld a, xl + cp a, #0x30 + jrc 00109$ + cp a, #0x39 + jrule 00105$ +00109$: +; ../isalnum.c: 39: return (isalpha (c) || isdigit (c)); + clr a + .byte 0xc5 +00105$: + ld a, #0x01 +00106$: + clrw x + ld xl, a +; ../isalnum.c: 40: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isalnum.lst b/device/lib/stm8/isalnum.lst new file mode 100644 index 0000000..9fb6937 --- /dev/null +++ b/device/lib/stm8/isalnum.lst @@ -0,0 +1,83 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isalnum + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isalpha + 12 .globl _isalnum + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../isalnum.c: 37: int isalnum (int c) + 51 ; ----------------------------------------- + 52 ; function isalnum + 53 ; ----------------------------------------- + 000000 54 _isalnum: + 55 ; ../isalnum.c: 39: return (isalpha (c) || isdigit (c)); + 000000 1E 03 [ 2] 56 ldw x, (0x03, sp) + 000002 89 [ 2] 57 pushw x + 000003 CDr00r00 [ 4] 58 call _isalpha + 000006 5B 02 [ 2] 59 addw sp, #2 + 000008 5D [ 2] 60 tnzw x + 000009 26 0D [ 1] 61 jrne 00105$ + 00000B 1E 03 [ 2] 62 ldw x, (0x03, sp) + 63 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 00000D 9F [ 1] 64 ld a, xl + 00000E A1 30 [ 1] 65 cp a, #0x30 + 000010 25 04 [ 1] 66 jrc 00109$ + 000012 A1 39 [ 1] 67 cp a, #0x39 + 000014 23 02 [ 2] 68 jrule 00105$ + 000016 69 00109$: + 70 ; ../isalnum.c: 39: return (isalpha (c) || isdigit (c)); + 000016 4F [ 1] 71 clr a + 000017 C5 72 .byte 0xc5 + 000018 73 00105$: + 000018 A6 01 [ 1] 74 ld a, #0x01 + 00001A 75 00106$: + 00001A 5F [ 1] 76 clrw x + 00001B 97 [ 1] 77 ld xl, a + 78 ; ../isalnum.c: 40: } + 00001C 81 [ 4] 79 ret + 80 .area CODE + 81 .area CONST + 82 .area INITIALIZER + 83 .area CABS (ABS) diff --git a/device/lib/stm8/isalnum.rel b/device/lib/stm8/isalnum.rel new file mode 100644 index 0000000..b929f37 --- /dev/null +++ b/device/lib/stm8/isalnum.rel @@ -0,0 +1,36 @@ +XH3 +H B areas 3 global symbols +M isalnum +O -mstm8 +S _isalpha Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1D flags 0 addr 0 +S _isalnum Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 89 CD 00 00 5B 02 5D 26 0D 1E 03 +R 00 00 00 09 02 07 00 00 +T 00 00 0D 9F A1 30 25 04 A1 39 23 02 +R 00 00 00 09 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 4F C5 +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 A6 01 +R 00 00 00 09 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isalnum.sym b/device/lib/stm8/isalnum.sym new file mode 100644 index 0000000..f1cab47 --- /dev/null +++ b/device/lib/stm8/isalnum.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isalnum 000000 GR + _isalpha ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isalpha.asm b/device/lib/stm8/isalpha.asm new file mode 100644 index 0000000..ada6070 --- /dev/null +++ b/device/lib/stm8/isalpha.asm @@ -0,0 +1,82 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isalpha + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isalpha +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../isalpha.c: 37: int isalpha (int c) +; ----------------------------------------- +; function isalpha +; ----------------------------------------- +_isalpha: +; ../isalpha.c: 39: return (isupper (c) || islower (c)); + ldw x, (0x03, sp) +; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z'); + ld a, xl + cp a, #0x41 + jrc 00110$ + cp a, #0x5a + jrule 00106$ +00110$: +; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z'); + cp a, #0x61 + jrc 00113$ + cp a, #0x7a + jrule 00106$ +00113$: +; ../isalpha.c: 39: return (isupper (c) || islower (c)); + clr a + .byte 0xc5 +00106$: + ld a, #0x01 +00107$: + clrw x + ld xl, a +; ../isalpha.c: 40: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isalpha.lst b/device/lib/stm8/isalpha.lst new file mode 100644 index 0000000..7876843 --- /dev/null +++ b/device/lib/stm8/isalpha.lst @@ -0,0 +1,82 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isalpha + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isalpha + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../isalpha.c: 37: int isalpha (int c) + 50 ; ----------------------------------------- + 51 ; function isalpha + 52 ; ----------------------------------------- + 000000 53 _isalpha: + 54 ; ../isalpha.c: 39: return (isupper (c) || islower (c)); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 56 ; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z'); + 000002 9F [ 1] 57 ld a, xl + 000003 A1 41 [ 1] 58 cp a, #0x41 + 000005 25 04 [ 1] 59 jrc 00110$ + 000007 A1 5A [ 1] 60 cp a, #0x5a + 000009 23 0A [ 2] 61 jrule 00106$ + 00000B 62 00110$: + 63 ; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z'); + 00000B A1 61 [ 1] 64 cp a, #0x61 + 00000D 25 04 [ 1] 65 jrc 00113$ + 00000F A1 7A [ 1] 66 cp a, #0x7a + 000011 23 02 [ 2] 67 jrule 00106$ + 000013 68 00113$: + 69 ; ../isalpha.c: 39: return (isupper (c) || islower (c)); + 000013 4F [ 1] 70 clr a + 000014 C5 71 .byte 0xc5 + 000015 72 00106$: + 000015 A6 01 [ 1] 73 ld a, #0x01 + 000017 74 00107$: + 000017 5F [ 1] 75 clrw x + 000018 97 [ 1] 76 ld xl, a + 77 ; ../isalpha.c: 40: } + 000019 81 [ 4] 78 ret + 79 .area CODE + 80 .area CONST + 81 .area INITIALIZER + 82 .area CABS (ABS) diff --git a/device/lib/stm8/isalpha.rel b/device/lib/stm8/isalpha.rel new file mode 100644 index 0000000..967a99e --- /dev/null +++ b/device/lib/stm8/isalpha.rel @@ -0,0 +1,37 @@ +XH3 +H B areas 2 global symbols +M isalpha +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1A flags 0 addr 0 +S _isalpha Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 9F A1 41 25 04 A1 5A 23 0A +R 00 00 00 09 +T 00 00 0B +R 00 00 00 09 +T 00 00 0B A1 61 25 04 A1 7A 23 02 +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 4F C5 +R 00 00 00 09 +T 00 00 15 +R 00 00 00 09 +T 00 00 15 A6 01 +R 00 00 00 09 +T 00 00 17 +R 00 00 00 09 +T 00 00 17 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isalpha.sym b/device/lib/stm8/isalpha.sym new file mode 100644 index 0000000..45c6885 --- /dev/null +++ b/device/lib/stm8/isalpha.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isalpha 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isblank.asm b/device/lib/stm8/isblank.asm new file mode 100644 index 0000000..bb22a30 --- /dev/null +++ b/device/lib/stm8/isblank.asm @@ -0,0 +1,72 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isblank + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isblank +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ./../../include/ctype.h: 51: inline int isblank (int c) +; ----------------------------------------- +; function isblank +; ----------------------------------------- +_isblank: +; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + ld a, (0x04, sp) + cp a, #0x20 + jreq 00104$ + cp a, #0x09 + jreq 00104$ + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ./../../include/ctype.h: 54: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isblank.lst b/device/lib/stm8/isblank.lst new file mode 100644 index 0000000..f841caa --- /dev/null +++ b/device/lib/stm8/isblank.lst @@ -0,0 +1,72 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isblank + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isblank + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ./../../include/ctype.h: 51: inline int isblank (int c) + 50 ; ----------------------------------------- + 51 ; function isblank + 52 ; ----------------------------------------- + 000000 53 _isblank: + 54 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + 000000 7B 04 [ 1] 55 ld a, (0x04, sp) + 000002 A1 20 [ 1] 56 cp a, #0x20 + 000004 27 06 [ 1] 57 jreq 00104$ + 000006 A1 09 [ 1] 58 cp a, #0x09 + 000008 27 02 [ 1] 59 jreq 00104$ + 00000A 4F [ 1] 60 clr a + 00000B C5 61 .byte 0xc5 + 00000C 62 00104$: + 00000C A6 01 [ 1] 63 ld a, #0x01 + 00000E 64 00105$: + 00000E 5F [ 1] 65 clrw x + 00000F 97 [ 1] 66 ld xl, a + 67 ; ./../../include/ctype.h: 54: } + 000010 81 [ 4] 68 ret + 69 .area CODE + 70 .area CONST + 71 .area INITIALIZER + 72 .area CABS (ABS) diff --git a/device/lib/stm8/isblank.rel b/device/lib/stm8/isblank.rel new file mode 100644 index 0000000..d656d8a --- /dev/null +++ b/device/lib/stm8/isblank.rel @@ -0,0 +1,29 @@ +XH3 +H B areas 2 global symbols +M isblank +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 11 flags 0 addr 0 +S _isblank Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 04 A1 20 27 06 A1 09 27 02 4F C5 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C A6 01 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isblank.sym b/device/lib/stm8/isblank.sym new file mode 100644 index 0000000..9196205 --- /dev/null +++ b/device/lib/stm8/isblank.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isblank 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 11 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/iscntrl.asm b/device/lib/stm8/iscntrl.asm new file mode 100644 index 0000000..d9e9fed --- /dev/null +++ b/device/lib/stm8/iscntrl.asm @@ -0,0 +1,72 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module iscntrl + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _iscntrl +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../iscntrl.c: 33: int iscntrl (int c) +; ----------------------------------------- +; function iscntrl +; ----------------------------------------- +_iscntrl: +; ../iscntrl.c: 35: return (c < ' ' || c == 0x7f); + ldw x, (0x03, sp) + cpw x, #0x0020 + jrslt 00104$ + cpw x, #0x007f + jreq 00104$ + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../iscntrl.c: 36: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/iscntrl.lst b/device/lib/stm8/iscntrl.lst new file mode 100644 index 0000000..f5296a6 --- /dev/null +++ b/device/lib/stm8/iscntrl.lst @@ -0,0 +1,72 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module iscntrl + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _iscntrl + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../iscntrl.c: 33: int iscntrl (int c) + 50 ; ----------------------------------------- + 51 ; function iscntrl + 52 ; ----------------------------------------- + 000000 53 _iscntrl: + 54 ; ../iscntrl.c: 35: return (c < ' ' || c == 0x7f); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 000002 A3 00 20 [ 2] 56 cpw x, #0x0020 + 000005 2F 07 [ 1] 57 jrslt 00104$ + 000007 A3 00 7F [ 2] 58 cpw x, #0x007f + 00000A 27 02 [ 1] 59 jreq 00104$ + 00000C 4F [ 1] 60 clr a + 00000D C5 61 .byte 0xc5 + 00000E 62 00104$: + 00000E A6 01 [ 1] 63 ld a, #0x01 + 000010 64 00105$: + 000010 5F [ 1] 65 clrw x + 000011 97 [ 1] 66 ld xl, a + 67 ; ../iscntrl.c: 36: } + 000012 81 [ 4] 68 ret + 69 .area CODE + 70 .area CONST + 71 .area INITIALIZER + 72 .area CABS (ABS) diff --git a/device/lib/stm8/iscntrl.rel b/device/lib/stm8/iscntrl.rel new file mode 100644 index 0000000..e5afb3a --- /dev/null +++ b/device/lib/stm8/iscntrl.rel @@ -0,0 +1,31 @@ +XH3 +H B areas 2 global symbols +M iscntrl +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 13 flags 0 addr 0 +S _iscntrl Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 A3 00 20 2F 07 A3 00 7F 27 02 4F +R 00 00 00 09 +T 00 00 0D C5 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E A6 01 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/iscntrl.sym b/device/lib/stm8/iscntrl.sym new file mode 100644 index 0000000..95997e6 --- /dev/null +++ b/device/lib/stm8/iscntrl.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _iscntrl 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 13 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isdigit.asm b/device/lib/stm8/isdigit.asm new file mode 100644 index 0000000..ee3e7ec --- /dev/null +++ b/device/lib/stm8/isdigit.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isdigit + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isdigit +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ./../../include/ctype.h: 60: inline int isdigit (int c) +; ----------------------------------------- +; function isdigit +; ----------------------------------------- +_isdigit: +; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + ld a, (0x04, sp) + cp a, #0x30 + jrc 00103$ + cp a, #0x39 + jrule 00104$ +00103$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ./../../include/ctype.h: 63: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isdigit.lst b/device/lib/stm8/isdigit.lst new file mode 100644 index 0000000..c44ea63 --- /dev/null +++ b/device/lib/stm8/isdigit.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isdigit + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isdigit + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ./../../include/ctype.h: 60: inline int isdigit (int c) + 50 ; ----------------------------------------- + 51 ; function isdigit + 52 ; ----------------------------------------- + 000000 53 _isdigit: + 54 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 000000 7B 04 [ 1] 55 ld a, (0x04, sp) + 000002 A1 30 [ 1] 56 cp a, #0x30 + 000004 25 04 [ 1] 57 jrc 00103$ + 000006 A1 39 [ 1] 58 cp a, #0x39 + 000008 23 02 [ 2] 59 jrule 00104$ + 00000A 60 00103$: + 00000A 4F [ 1] 61 clr a + 00000B C5 62 .byte 0xc5 + 00000C 63 00104$: + 00000C A6 01 [ 1] 64 ld a, #0x01 + 00000E 65 00105$: + 00000E 5F [ 1] 66 clrw x + 00000F 97 [ 1] 67 ld xl, a + 68 ; ./../../include/ctype.h: 63: } + 000010 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/isdigit.rel b/device/lib/stm8/isdigit.rel new file mode 100644 index 0000000..e773332 --- /dev/null +++ b/device/lib/stm8/isdigit.rel @@ -0,0 +1,33 @@ +XH3 +H B areas 2 global symbols +M isdigit +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 11 flags 0 addr 0 +S _isdigit Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 04 A1 30 25 04 A1 39 23 02 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 4F C5 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C A6 01 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isdigit.sym b/device/lib/stm8/isdigit.sym new file mode 100644 index 0000000..969a593 --- /dev/null +++ b/device/lib/stm8/isdigit.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isdigit 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 11 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isgraph.asm b/device/lib/stm8/isgraph.asm new file mode 100644 index 0000000..ca29ac7 --- /dev/null +++ b/device/lib/stm8/isgraph.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isgraph + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isgraph +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../isgraph.c: 33: int isgraph (int c) +; ----------------------------------------- +; function isgraph +; ----------------------------------------- +_isgraph: +; ../isgraph.c: 35: return (c > ' ' && c <= '~'); + ldw x, (0x03, sp) + cpw x, #0x0020 + jrsle 00103$ + cpw x, #0x007e + jrsle 00104$ +00103$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../isgraph.c: 36: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isgraph.lst b/device/lib/stm8/isgraph.lst new file mode 100644 index 0000000..ca008f5 --- /dev/null +++ b/device/lib/stm8/isgraph.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isgraph + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isgraph + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../isgraph.c: 33: int isgraph (int c) + 50 ; ----------------------------------------- + 51 ; function isgraph + 52 ; ----------------------------------------- + 000000 53 _isgraph: + 54 ; ../isgraph.c: 35: return (c > ' ' && c <= '~'); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 000002 A3 00 20 [ 2] 56 cpw x, #0x0020 + 000005 2D 05 [ 1] 57 jrsle 00103$ + 000007 A3 00 7E [ 2] 58 cpw x, #0x007e + 00000A 2D 02 [ 1] 59 jrsle 00104$ + 00000C 60 00103$: + 00000C 4F [ 1] 61 clr a + 00000D C5 62 .byte 0xc5 + 00000E 63 00104$: + 00000E A6 01 [ 1] 64 ld a, #0x01 + 000010 65 00105$: + 000010 5F [ 1] 66 clrw x + 000011 97 [ 1] 67 ld xl, a + 68 ; ../isgraph.c: 36: } + 000012 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/isgraph.rel b/device/lib/stm8/isgraph.rel new file mode 100644 index 0000000..7fe7236 --- /dev/null +++ b/device/lib/stm8/isgraph.rel @@ -0,0 +1,33 @@ +XH3 +H B areas 2 global symbols +M isgraph +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 13 flags 0 addr 0 +S _isgraph Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 A3 00 20 2D 05 A3 00 7E 2D 02 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C 4F C5 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E A6 01 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isgraph.sym b/device/lib/stm8/isgraph.sym new file mode 100644 index 0000000..29f5059 --- /dev/null +++ b/device/lib/stm8/isgraph.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isgraph 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 13 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isinf.asm b/device/lib/stm8/isinf.asm new file mode 100644 index 0000000..0bebfce --- /dev/null +++ b/device/lib/stm8/isinf.asm @@ -0,0 +1,83 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isinf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isinf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../isinf.c: 33: int isinf (float f) +; ----------------------------------------- +; function isinf +; ----------------------------------------- +_isinf: +; ../isinf.c: 35: unsigned long *pl = (unsigned long *) &f; + ldw x, sp + addw x, #3 +; ../isinf.c: 36: return *pl == 0x7f800000 || *pl == 0xff800000; + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + tnzw y + jrne 00117$ + cpw x, #0x7f80 + jreq 00104$ +00117$: + tnzw y + jrne 00120$ + cpw x, #0xff80 + jreq 00104$ +00120$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../isinf.c: 37: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isinf.lst b/device/lib/stm8/isinf.lst new file mode 100644 index 0000000..408f193 --- /dev/null +++ b/device/lib/stm8/isinf.lst @@ -0,0 +1,83 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isinf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isinf + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../isinf.c: 33: int isinf (float f) + 50 ; ----------------------------------------- + 51 ; function isinf + 52 ; ----------------------------------------- + 000000 53 _isinf: + 54 ; ../isinf.c: 35: unsigned long *pl = (unsigned long *) &f; + 000000 96 [ 1] 55 ldw x, sp + 000001 1C 00 03 [ 2] 56 addw x, #3 + 57 ; ../isinf.c: 36: return *pl == 0x7f800000 || *pl == 0xff800000; + 000004 90 93 [ 1] 58 ldw y, x + 000006 90 EE 02 [ 2] 59 ldw y, (0x2, y) + 000009 FE [ 2] 60 ldw x, (x) + 00000A 90 5D [ 2] 61 tnzw y + 00000C 26 05 [ 1] 62 jrne 00117$ + 00000E A3 7F 80 [ 2] 63 cpw x, #0x7f80 + 000011 27 0B [ 1] 64 jreq 00104$ + 000013 65 00117$: + 000013 90 5D [ 2] 66 tnzw y + 000015 26 05 [ 1] 67 jrne 00120$ + 000017 A3 FF 80 [ 2] 68 cpw x, #0xff80 + 00001A 27 02 [ 1] 69 jreq 00104$ + 00001C 70 00120$: + 00001C 4F [ 1] 71 clr a + 00001D C5 72 .byte 0xc5 + 00001E 73 00104$: + 00001E A6 01 [ 1] 74 ld a, #0x01 + 000020 75 00105$: + 000020 5F [ 1] 76 clrw x + 000021 97 [ 1] 77 ld xl, a + 78 ; ../isinf.c: 37: } + 000022 81 [ 4] 79 ret + 80 .area CODE + 81 .area CONST + 82 .area INITIALIZER + 83 .area CABS (ABS) diff --git a/device/lib/stm8/isinf.rel b/device/lib/stm8/isinf.rel new file mode 100644 index 0000000..99e9738 --- /dev/null +++ b/device/lib/stm8/isinf.rel @@ -0,0 +1,39 @@ +XH3 +H B areas 2 global symbols +M isinf +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 23 flags 0 addr 0 +S _isinf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 96 1C 00 03 90 93 90 EE 02 FE 90 5D 26 +R 00 00 00 09 +T 00 00 0D 05 A3 7F 80 27 0B +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 90 5D 26 05 A3 FF 80 27 02 +R 00 00 00 09 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 4F C5 +R 00 00 00 09 +T 00 00 1E +R 00 00 00 09 +T 00 00 1E A6 01 +R 00 00 00 09 +T 00 00 20 +R 00 00 00 09 +T 00 00 20 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isinf.sym b/device/lib/stm8/isinf.sym new file mode 100644 index 0000000..bbf8f20 --- /dev/null +++ b/device/lib/stm8/isinf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isinf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 23 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/islower.asm b/device/lib/stm8/islower.asm new file mode 100644 index 0000000..4e3157a --- /dev/null +++ b/device/lib/stm8/islower.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module islower + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _islower +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ./../../include/ctype.h: 69: inline int islower (int c) +; ----------------------------------------- +; function islower +; ----------------------------------------- +_islower: +; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z'); + ld a, (0x04, sp) + cp a, #0x61 + jrc 00103$ + cp a, #0x7a + jrule 00104$ +00103$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ./../../include/ctype.h: 72: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/islower.lst b/device/lib/stm8/islower.lst new file mode 100644 index 0000000..1fc795b --- /dev/null +++ b/device/lib/stm8/islower.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module islower + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _islower + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ./../../include/ctype.h: 69: inline int islower (int c) + 50 ; ----------------------------------------- + 51 ; function islower + 52 ; ----------------------------------------- + 000000 53 _islower: + 54 ; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z'); + 000000 7B 04 [ 1] 55 ld a, (0x04, sp) + 000002 A1 61 [ 1] 56 cp a, #0x61 + 000004 25 04 [ 1] 57 jrc 00103$ + 000006 A1 7A [ 1] 58 cp a, #0x7a + 000008 23 02 [ 2] 59 jrule 00104$ + 00000A 60 00103$: + 00000A 4F [ 1] 61 clr a + 00000B C5 62 .byte 0xc5 + 00000C 63 00104$: + 00000C A6 01 [ 1] 64 ld a, #0x01 + 00000E 65 00105$: + 00000E 5F [ 1] 66 clrw x + 00000F 97 [ 1] 67 ld xl, a + 68 ; ./../../include/ctype.h: 72: } + 000010 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/islower.rel b/device/lib/stm8/islower.rel new file mode 100644 index 0000000..4886792 --- /dev/null +++ b/device/lib/stm8/islower.rel @@ -0,0 +1,33 @@ +XH3 +H B areas 2 global symbols +M islower +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 11 flags 0 addr 0 +S _islower Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 04 A1 61 25 04 A1 7A 23 02 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 4F C5 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C A6 01 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/islower.sym b/device/lib/stm8/islower.sym new file mode 100644 index 0000000..1980d64 --- /dev/null +++ b/device/lib/stm8/islower.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _islower 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 11 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isnan.asm b/device/lib/stm8/isnan.asm new file mode 100644 index 0000000..5922e2a --- /dev/null +++ b/device/lib/stm8/isnan.asm @@ -0,0 +1,85 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isnan + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isnan +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../isnan.c: 33: int isnan (float f) +; ----------------------------------------- +; function isnan +; ----------------------------------------- +_isnan: + sub sp, #4 +; ../isnan.c: 35: unsigned long *pl = (unsigned long *) &f; + ldw x, sp + addw x, #7 +; ../isnan.c: 37: return (*pl & 0x7fffffff) > 0x7f800000; + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ldw (0x03, sp), y + exg a, xl + ld (0x02, sp), a + exg a, xl + ld a, xh + and a, #0x7f + ld (0x01, sp), a + clrw x + cpw x, (0x03, sp) + ld a, #0x80 + sbc a, (0x02, sp) + ld a, #0x7f + sbc a, (0x01, sp) + clr a + rlc a + clrw x + ld xl, a +; ../isnan.c: 38: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isnan.lst b/device/lib/stm8/isnan.lst new file mode 100644 index 0000000..5242147 --- /dev/null +++ b/device/lib/stm8/isnan.lst @@ -0,0 +1,85 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isnan + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isnan + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../isnan.c: 33: int isnan (float f) + 50 ; ----------------------------------------- + 51 ; function isnan + 52 ; ----------------------------------------- + 000000 53 _isnan: + 000000 52 04 [ 2] 54 sub sp, #4 + 55 ; ../isnan.c: 35: unsigned long *pl = (unsigned long *) &f; + 000002 96 [ 1] 56 ldw x, sp + 000003 1C 00 07 [ 2] 57 addw x, #7 + 58 ; ../isnan.c: 37: return (*pl & 0x7fffffff) > 0x7f800000; + 000006 90 93 [ 1] 59 ldw y, x + 000008 90 EE 02 [ 2] 60 ldw y, (0x2, y) + 00000B FE [ 2] 61 ldw x, (x) + 00000C 17 03 [ 2] 62 ldw (0x03, sp), y + 00000E 41 [ 1] 63 exg a, xl + 00000F 6B 02 [ 1] 64 ld (0x02, sp), a + 000011 41 [ 1] 65 exg a, xl + 000012 9E [ 1] 66 ld a, xh + 000013 A4 7F [ 1] 67 and a, #0x7f + 000015 6B 01 [ 1] 68 ld (0x01, sp), a + 000017 5F [ 1] 69 clrw x + 000018 13 03 [ 2] 70 cpw x, (0x03, sp) + 00001A A6 80 [ 1] 71 ld a, #0x80 + 00001C 12 02 [ 1] 72 sbc a, (0x02, sp) + 00001E A6 7F [ 1] 73 ld a, #0x7f + 000020 12 01 [ 1] 74 sbc a, (0x01, sp) + 000022 4F [ 1] 75 clr a + 000023 49 [ 1] 76 rlc a + 000024 5F [ 1] 77 clrw x + 000025 97 [ 1] 78 ld xl, a + 79 ; ../isnan.c: 38: } + 000026 5B 04 [ 2] 80 addw sp, #4 + 000028 81 [ 4] 81 ret + 82 .area CODE + 83 .area CONST + 84 .area INITIALIZER + 85 .area CABS (ABS) diff --git a/device/lib/stm8/isnan.rel b/device/lib/stm8/isnan.rel new file mode 100644 index 0000000..5c0abaf --- /dev/null +++ b/device/lib/stm8/isnan.rel @@ -0,0 +1,27 @@ +XH3 +H B areas 2 global symbols +M isnan +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 29 flags 0 addr 0 +S _isnan Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 96 1C 00 07 90 93 90 EE 02 FE 17 +R 00 00 00 09 +T 00 00 0D 03 41 6B 02 41 9E A4 7F 6B 01 5F 13 03 +R 00 00 00 09 +T 00 00 1A A6 80 12 02 A6 7F 12 01 4F 49 5F 97 5B +R 00 00 00 09 +T 00 00 27 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isnan.sym b/device/lib/stm8/isnan.sym new file mode 100644 index 0000000..2894d02 --- /dev/null +++ b/device/lib/stm8/isnan.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isnan 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 29 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isprint.asm b/device/lib/stm8/isprint.asm new file mode 100644 index 0000000..0b41932 --- /dev/null +++ b/device/lib/stm8/isprint.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isprint + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isprint +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../isprint.c: 33: int isprint (int c) +; ----------------------------------------- +; function isprint +; ----------------------------------------- +_isprint: +; ../isprint.c: 35: return (c >= ' ' && c <= '~'); + ldw x, (0x03, sp) + cpw x, #0x0020 + jrslt 00103$ + cpw x, #0x007e + jrsle 00104$ +00103$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../isprint.c: 36: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isprint.lst b/device/lib/stm8/isprint.lst new file mode 100644 index 0000000..6562654 --- /dev/null +++ b/device/lib/stm8/isprint.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isprint + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isprint + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../isprint.c: 33: int isprint (int c) + 50 ; ----------------------------------------- + 51 ; function isprint + 52 ; ----------------------------------------- + 000000 53 _isprint: + 54 ; ../isprint.c: 35: return (c >= ' ' && c <= '~'); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 000002 A3 00 20 [ 2] 56 cpw x, #0x0020 + 000005 2F 05 [ 1] 57 jrslt 00103$ + 000007 A3 00 7E [ 2] 58 cpw x, #0x007e + 00000A 2D 02 [ 1] 59 jrsle 00104$ + 00000C 60 00103$: + 00000C 4F [ 1] 61 clr a + 00000D C5 62 .byte 0xc5 + 00000E 63 00104$: + 00000E A6 01 [ 1] 64 ld a, #0x01 + 000010 65 00105$: + 000010 5F [ 1] 66 clrw x + 000011 97 [ 1] 67 ld xl, a + 68 ; ../isprint.c: 36: } + 000012 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/isprint.rel b/device/lib/stm8/isprint.rel new file mode 100644 index 0000000..9b15fb6 --- /dev/null +++ b/device/lib/stm8/isprint.rel @@ -0,0 +1,33 @@ +XH3 +H B areas 2 global symbols +M isprint +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 13 flags 0 addr 0 +S _isprint Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 A3 00 20 2F 05 A3 00 7E 2D 02 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C 4F C5 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E A6 01 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isprint.sym b/device/lib/stm8/isprint.sym new file mode 100644 index 0000000..9f150ee --- /dev/null +++ b/device/lib/stm8/isprint.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isprint 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 13 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/ispunct.asm b/device/lib/stm8/ispunct.asm new file mode 100644 index 0000000..0173e95 --- /dev/null +++ b/device/lib/stm8/ispunct.asm @@ -0,0 +1,89 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module ispunct + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isalnum + .globl _isspace + .globl _isprint + .globl _ispunct +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../ispunct.c: 33: int ispunct (int c) +; ----------------------------------------- +; function ispunct +; ----------------------------------------- +_ispunct: +; ../ispunct.c: 35: return (isprint (c) && !isspace (c) && !isalnum (c)); + ldw x, (0x03, sp) + pushw x + call _isprint + addw sp, #2 + tnzw x + jreq 00103$ + ldw x, (0x03, sp) + pushw x + call _isspace + addw sp, #2 + tnzw x + jrne 00103$ + ldw x, (0x03, sp) + pushw x + call _isalnum + addw sp, #2 + tnzw x + jreq 00104$ +00103$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../ispunct.c: 36: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/ispunct.lst b/device/lib/stm8/ispunct.lst new file mode 100644 index 0000000..e5e484d --- /dev/null +++ b/device/lib/stm8/ispunct.lst @@ -0,0 +1,89 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module ispunct + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isalnum + 12 .globl _isspace + 13 .globl _isprint + 14 .globl _ispunct + 15 ;-------------------------------------------------------- + 16 ; ram data + 17 ;-------------------------------------------------------- + 18 .area DATA + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../ispunct.c: 33: int ispunct (int c) + 53 ; ----------------------------------------- + 54 ; function ispunct + 55 ; ----------------------------------------- + 000000 56 _ispunct: + 57 ; ../ispunct.c: 35: return (isprint (c) && !isspace (c) && !isalnum (c)); + 000000 1E 03 [ 2] 58 ldw x, (0x03, sp) + 000002 89 [ 2] 59 pushw x + 000003 CDr00r00 [ 4] 60 call _isprint + 000006 5B 02 [ 2] 61 addw sp, #2 + 000008 5D [ 2] 62 tnzw x + 000009 27 16 [ 1] 63 jreq 00103$ + 00000B 1E 03 [ 2] 64 ldw x, (0x03, sp) + 00000D 89 [ 2] 65 pushw x + 00000E CDr00r00 [ 4] 66 call _isspace + 000011 5B 02 [ 2] 67 addw sp, #2 + 000013 5D [ 2] 68 tnzw x + 000014 26 0B [ 1] 69 jrne 00103$ + 000016 1E 03 [ 2] 70 ldw x, (0x03, sp) + 000018 89 [ 2] 71 pushw x + 000019 CDr00r00 [ 4] 72 call _isalnum + 00001C 5B 02 [ 2] 73 addw sp, #2 + 00001E 5D [ 2] 74 tnzw x + 00001F 27 02 [ 1] 75 jreq 00104$ + 000021 76 00103$: + 000021 4F [ 1] 77 clr a + 000022 C5 78 .byte 0xc5 + 000023 79 00104$: + 000023 A6 01 [ 1] 80 ld a, #0x01 + 000025 81 00105$: + 000025 5F [ 1] 82 clrw x + 000026 97 [ 1] 83 ld xl, a + 84 ; ../ispunct.c: 36: } + 000027 81 [ 4] 85 ret + 86 .area CODE + 87 .area CONST + 88 .area INITIALIZER + 89 .area CABS (ABS) diff --git a/device/lib/stm8/ispunct.rel b/device/lib/stm8/ispunct.rel new file mode 100644 index 0000000..78c3239 --- /dev/null +++ b/device/lib/stm8/ispunct.rel @@ -0,0 +1,40 @@ +XH3 +H B areas 5 global symbols +M ispunct +O -mstm8 +S _isspace Ref000000 +S _isalnum Ref000000 +S .__.ABS. Def000000 +S _isprint Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 28 flags 0 addr 0 +S _ispunct Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 89 CD 00 00 5B 02 5D 27 16 1E 03 +R 00 00 00 09 02 07 00 03 +T 00 00 0D 89 CD 00 00 5B 02 5D 26 0B 1E 03 89 CD +R 00 00 00 09 02 05 00 00 +T 00 00 1A 00 00 5B 02 5D 27 02 +R 00 00 00 09 02 03 00 01 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 4F C5 +R 00 00 00 09 +T 00 00 23 +R 00 00 00 09 +T 00 00 23 A6 01 +R 00 00 00 09 +T 00 00 25 +R 00 00 00 09 +T 00 00 25 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/ispunct.sym b/device/lib/stm8/ispunct.sym new file mode 100644 index 0000000..90a5243 --- /dev/null +++ b/device/lib/stm8/ispunct.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _isalnum ****** GX + _isprint ****** GX + 9 _ispunct 000000 GR + _isspace ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 28 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isspace.asm b/device/lib/stm8/isspace.asm new file mode 100644 index 0000000..7d5cebb --- /dev/null +++ b/device/lib/stm8/isspace.asm @@ -0,0 +1,85 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isspace + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isspace +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../isspace.c: 37: int isspace (int c) +; ----------------------------------------- +; function isspace +; ----------------------------------------- +_isspace: +; ../isspace.c: 39: return (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'); + ldw x, (0x03, sp) + cpw x, #0x0020 + jreq 00104$ + ldw x, (0x03, sp) + cpw x, #0x000c + jreq 00104$ + ldw x, (0x03, sp) + cpw x, #0x000a + jreq 00104$ + ldw x, (0x03, sp) + cpw x, #0x000d + jreq 00104$ + ldw x, (0x03, sp) + cpw x, #0x0009 + jreq 00104$ + ldw x, (0x03, sp) + cpw x, #0x000b + jreq 00104$ + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../isspace.c: 40: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isspace.lst b/device/lib/stm8/isspace.lst new file mode 100644 index 0000000..8a714c0 --- /dev/null +++ b/device/lib/stm8/isspace.lst @@ -0,0 +1,85 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isspace + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isspace + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../isspace.c: 37: int isspace (int c) + 50 ; ----------------------------------------- + 51 ; function isspace + 52 ; ----------------------------------------- + 000000 53 _isspace: + 54 ; ../isspace.c: 39: return (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 000002 A3 00 20 [ 2] 56 cpw x, #0x0020 + 000005 27 25 [ 1] 57 jreq 00104$ + 000007 1E 03 [ 2] 58 ldw x, (0x03, sp) + 000009 A3 00 0C [ 2] 59 cpw x, #0x000c + 00000C 27 1E [ 1] 60 jreq 00104$ + 00000E 1E 03 [ 2] 61 ldw x, (0x03, sp) + 000010 A3 00 0A [ 2] 62 cpw x, #0x000a + 000013 27 17 [ 1] 63 jreq 00104$ + 000015 1E 03 [ 2] 64 ldw x, (0x03, sp) + 000017 A3 00 0D [ 2] 65 cpw x, #0x000d + 00001A 27 10 [ 1] 66 jreq 00104$ + 00001C 1E 03 [ 2] 67 ldw x, (0x03, sp) + 00001E A3 00 09 [ 2] 68 cpw x, #0x0009 + 000021 27 09 [ 1] 69 jreq 00104$ + 000023 1E 03 [ 2] 70 ldw x, (0x03, sp) + 000025 A3 00 0B [ 2] 71 cpw x, #0x000b + 000028 27 02 [ 1] 72 jreq 00104$ + 00002A 4F [ 1] 73 clr a + 00002B C5 74 .byte 0xc5 + 00002C 75 00104$: + 00002C A6 01 [ 1] 76 ld a, #0x01 + 00002E 77 00105$: + 00002E 5F [ 1] 78 clrw x + 00002F 97 [ 1] 79 ld xl, a + 80 ; ../isspace.c: 40: } + 000030 81 [ 4] 81 ret + 82 .area CODE + 83 .area CONST + 84 .area INITIALIZER + 85 .area CABS (ABS) diff --git a/device/lib/stm8/isspace.rel b/device/lib/stm8/isspace.rel new file mode 100644 index 0000000..5eabf8a --- /dev/null +++ b/device/lib/stm8/isspace.rel @@ -0,0 +1,35 @@ +XH3 +H B areas 2 global symbols +M isspace +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 31 flags 0 addr 0 +S _isspace Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 A3 00 20 27 25 1E 03 A3 00 0C 27 +R 00 00 00 09 +T 00 00 0D 1E 1E 03 A3 00 0A 27 17 1E 03 A3 00 0D +R 00 00 00 09 +T 00 00 1A 27 10 1E 03 A3 00 09 27 09 1E 03 A3 +R 00 00 00 09 +T 00 00 26 00 0B 27 02 4F C5 +R 00 00 00 09 +T 00 00 2C +R 00 00 00 09 +T 00 00 2C A6 01 +R 00 00 00 09 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isspace.sym b/device/lib/stm8/isspace.sym new file mode 100644 index 0000000..2fb2f16 --- /dev/null +++ b/device/lib/stm8/isspace.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isspace 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 31 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isupper.asm b/device/lib/stm8/isupper.asm new file mode 100644 index 0000000..2f15891 --- /dev/null +++ b/device/lib/stm8/isupper.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isupper + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isupper +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ./../../include/ctype.h: 78: inline int isupper (int c) +; ----------------------------------------- +; function isupper +; ----------------------------------------- +_isupper: +; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z'); + ld a, (0x04, sp) + cp a, #0x41 + jrc 00103$ + cp a, #0x5a + jrule 00104$ +00103$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ./../../include/ctype.h: 81: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isupper.lst b/device/lib/stm8/isupper.lst new file mode 100644 index 0000000..616000d --- /dev/null +++ b/device/lib/stm8/isupper.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isupper + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isupper + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ./../../include/ctype.h: 78: inline int isupper (int c) + 50 ; ----------------------------------------- + 51 ; function isupper + 52 ; ----------------------------------------- + 000000 53 _isupper: + 54 ; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z'); + 000000 7B 04 [ 1] 55 ld a, (0x04, sp) + 000002 A1 41 [ 1] 56 cp a, #0x41 + 000004 25 04 [ 1] 57 jrc 00103$ + 000006 A1 5A [ 1] 58 cp a, #0x5a + 000008 23 02 [ 2] 59 jrule 00104$ + 00000A 60 00103$: + 00000A 4F [ 1] 61 clr a + 00000B C5 62 .byte 0xc5 + 00000C 63 00104$: + 00000C A6 01 [ 1] 64 ld a, #0x01 + 00000E 65 00105$: + 00000E 5F [ 1] 66 clrw x + 00000F 97 [ 1] 67 ld xl, a + 68 ; ./../../include/ctype.h: 81: } + 000010 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/isupper.rel b/device/lib/stm8/isupper.rel new file mode 100644 index 0000000..8ae58e6 --- /dev/null +++ b/device/lib/stm8/isupper.rel @@ -0,0 +1,33 @@ +XH3 +H B areas 2 global symbols +M isupper +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 11 flags 0 addr 0 +S _isupper Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 04 A1 41 25 04 A1 5A 23 02 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 4F C5 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C A6 01 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isupper.sym b/device/lib/stm8/isupper.sym new file mode 100644 index 0000000..36605ab --- /dev/null +++ b/device/lib/stm8/isupper.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isupper 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 11 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/isxdigit.asm b/device/lib/stm8/isxdigit.asm new file mode 100644 index 0000000..17ac59d --- /dev/null +++ b/device/lib/stm8/isxdigit.asm @@ -0,0 +1,85 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module isxdigit + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _isxdigit +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../isxdigit.c: 33: int isxdigit (int c) +; ----------------------------------------- +; function isxdigit +; ----------------------------------------- +_isxdigit: +; ../isxdigit.c: 35: return (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F'); + ldw x, (0x03, sp) + cpw x, #0x0030 + jrslt 00111$ + cpw x, #0x0039 + jrsle 00104$ +00111$: + ldw x, (0x03, sp) + cpw x, #0x0061 + jrslt 00108$ + cpw x, #0x0066 + jrsle 00104$ +00108$: + ldw x, (0x03, sp) + cpw x, #0x0041 + jrslt 00103$ + cpw x, #0x0046 + jrsle 00104$ +00103$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../isxdigit.c: 36: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/isxdigit.lst b/device/lib/stm8/isxdigit.lst new file mode 100644 index 0000000..80aa722 --- /dev/null +++ b/device/lib/stm8/isxdigit.lst @@ -0,0 +1,85 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module isxdigit + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _isxdigit + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../isxdigit.c: 33: int isxdigit (int c) + 50 ; ----------------------------------------- + 51 ; function isxdigit + 52 ; ----------------------------------------- + 000000 53 _isxdigit: + 54 ; ../isxdigit.c: 35: return (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F'); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 000002 A3 00 30 [ 2] 56 cpw x, #0x0030 + 000005 2F 05 [ 1] 57 jrslt 00111$ + 000007 A3 00 39 [ 2] 58 cpw x, #0x0039 + 00000A 2D 1A [ 1] 59 jrsle 00104$ + 00000C 60 00111$: + 00000C 1E 03 [ 2] 61 ldw x, (0x03, sp) + 00000E A3 00 61 [ 2] 62 cpw x, #0x0061 + 000011 2F 05 [ 1] 63 jrslt 00108$ + 000013 A3 00 66 [ 2] 64 cpw x, #0x0066 + 000016 2D 0E [ 1] 65 jrsle 00104$ + 000018 66 00108$: + 000018 1E 03 [ 2] 67 ldw x, (0x03, sp) + 00001A A3 00 41 [ 2] 68 cpw x, #0x0041 + 00001D 2F 05 [ 1] 69 jrslt 00103$ + 00001F A3 00 46 [ 2] 70 cpw x, #0x0046 + 000022 2D 02 [ 1] 71 jrsle 00104$ + 000024 72 00103$: + 000024 4F [ 1] 73 clr a + 000025 C5 74 .byte 0xc5 + 000026 75 00104$: + 000026 A6 01 [ 1] 76 ld a, #0x01 + 000028 77 00105$: + 000028 5F [ 1] 78 clrw x + 000029 97 [ 1] 79 ld xl, a + 80 ; ../isxdigit.c: 36: } + 00002A 81 [ 4] 81 ret + 82 .area CODE + 83 .area CONST + 84 .area INITIALIZER + 85 .area CABS (ABS) diff --git a/device/lib/stm8/isxdigit.rel b/device/lib/stm8/isxdigit.rel new file mode 100644 index 0000000..4aab3d2 --- /dev/null +++ b/device/lib/stm8/isxdigit.rel @@ -0,0 +1,41 @@ +XH3 +H B areas 2 global symbols +M isxdigit +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 2B flags 0 addr 0 +S _isxdigit Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 A3 00 30 2F 05 A3 00 39 2D 1A +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C 1E 03 A3 00 61 2F 05 A3 00 66 2D 0E +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 1E 03 A3 00 41 2F 05 A3 00 46 2D 02 +R 00 00 00 09 +T 00 00 24 +R 00 00 00 09 +T 00 00 24 4F C5 +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 A6 01 +R 00 00 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/isxdigit.sym b/device/lib/stm8/isxdigit.sym new file mode 100644 index 0000000..a82eff3 --- /dev/null +++ b/device/lib/stm8/isxdigit.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _isxdigit 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 2B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/labs.asm b/device/lib/stm8/labs.asm new file mode 100644 index 0000000..507148d --- /dev/null +++ b/device/lib/stm8/labs.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module labs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _labs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../labs.c: 63: long int labs(long int j) +; ----------------------------------------- +; function labs +; ----------------------------------------- +_labs: +; ../labs.c: 65: return (j < 0) ? -j : j; + tnz (0x03, sp) + jrpl 00103$ + ldw x, (0x05, sp) + negw x + ldw y, (0x03, sp) + jrnc 00111$ + incw y +00111$: + negw y + ret +00103$: + ldw x, (0x05, sp) + ldw y, (0x03, sp) +; ../labs.c: 66: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/labs.lst b/device/lib/stm8/labs.lst new file mode 100644 index 0000000..471a03b --- /dev/null +++ b/device/lib/stm8/labs.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module labs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _labs + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../labs.c: 63: long int labs(long int j) + 50 ; ----------------------------------------- + 51 ; function labs + 52 ; ----------------------------------------- + 000000 53 _labs: + 54 ; ../labs.c: 65: return (j < 0) ? -j : j; + 000000 0D 03 [ 1] 55 tnz (0x03, sp) + 000002 2A 0C [ 1] 56 jrpl 00103$ + 000004 1E 05 [ 2] 57 ldw x, (0x05, sp) + 000006 50 [ 2] 58 negw x + 000007 16 03 [ 2] 59 ldw y, (0x03, sp) + 000009 24 02 [ 1] 60 jrnc 00111$ + 00000B 90 5C [ 1] 61 incw y + 00000D 62 00111$: + 00000D 90 50 [ 2] 63 negw y + 00000F 81 [ 4] 64 ret + 000010 65 00103$: + 000010 1E 05 [ 2] 66 ldw x, (0x05, sp) + 000012 16 03 [ 2] 67 ldw y, (0x03, sp) + 68 ; ../labs.c: 66: } + 000014 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/labs.rel b/device/lib/stm8/labs.rel new file mode 100644 index 0000000..36feddb --- /dev/null +++ b/device/lib/stm8/labs.rel @@ -0,0 +1,29 @@ +XH3 +H B areas 2 global symbols +M labs +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 15 flags 0 addr 0 +S _labs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 0D 03 2A 0C 1E 05 50 16 03 24 02 90 5C +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 90 50 81 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 1E 05 16 03 81 +R 00 00 00 09 diff --git a/device/lib/stm8/labs.sym b/device/lib/stm8/labs.sym new file mode 100644 index 0000000..16f3c01 --- /dev/null +++ b/device/lib/stm8/labs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _labs 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 15 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/ldexpf.asm b/device/lib/stm8/ldexpf.asm new file mode 100644 index 0000000..d2f677d --- /dev/null +++ b/device/lib/stm8/ldexpf.asm @@ -0,0 +1,155 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module ldexpf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _ldexpf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../ldexpf.c: 34: float ldexpf(float x, int pw2) +; ----------------------------------------- +; function ldexpf +; ----------------------------------------- +_ldexpf: + sub sp, #16 +; ../ldexpf.c: 39: fl.f = x; + ldw y, (0x15, sp) + ldw (0x03, sp), y + ldw y, (0x13, sp) + ldw (0x01, sp), y +; ../ldexpf.c: 41: e=(fl.l >> 23) & 0x000000ff; + ldw y, (0x03, sp) + ldw x, (0x01, sp) + clr a + tnzw x + jrpl 00103$ + dec a +00103$: + push a + rrwa x + rrwa y + ld a, (1, sp) + rrwa x + rrwa y + ld a, (1, sp) + rrwa x + rrwa y + sll a + rlcw y + rlcw x + pop a + clr a + clrw x + exg a, yl + ld (0x0c, sp), a + exg a, yl + ld (0x0b, sp), a + ldw (0x09, sp), x +; ../ldexpf.c: 42: e+=pw2; + ldw x, (0x17, sp) + ldw (0x0f, sp), x + clrw x + tnz (0x0f, sp) + jrpl 00104$ + decw x +00104$: + ldw y, (0x0f, sp) + addw y, (0x0b, sp) + ld a, xl + adc a, (0x0a, sp) + rlwa x + adc a, (0x09, sp) +; ../ldexpf.c: 43: fl.l= ((e & 0xff) << 23) | (fl.l & 0x807fffff); + clr a + ld yh, a + clrw x + exg a, xl + ld a, yl + exg a, xl + rlwa x + ld a, yh + rrwa x + clrw y + ld a, #0x07 +00105$: + sllw x + dec a + jrne 00105$ + ldw (0x07, sp), y + ldw (0x05, sp), x + ldw y, (0x03, sp) + ldw (0x0b, sp), y + ldw y, (0x01, sp) + ldw (0x09, sp), y + ld a, (0x0b, sp) + ld (0x0f, sp), a + ld a, (0x0c, sp) + ld (0x10, sp), a + ld a, (0x0a, sp) + and a, #0x7f + ld (0x0e, sp), a + ld a, (0x09, sp) + and a, #0x80 + or a, (0x05, sp) + ld yh, a + ld a, (0x08, sp) + or a, (0x10, sp) + ld xl, a + ld a, (0x07, sp) + or a, (0x0f, sp) + ld xh, a + ld a, (0x06, sp) + or a, (0x0e, sp) + ld yl, a + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../ldexpf.c: 45: return(fl.f); + ldw x, (0x03, sp) + ldw y, (0x01, sp) +; ../ldexpf.c: 46: } + addw sp, #16 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/ldexpf.lst b/device/lib/stm8/ldexpf.lst new file mode 100644 index 0000000..263330f --- /dev/null +++ b/device/lib/stm8/ldexpf.lst @@ -0,0 +1,155 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module ldexpf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _ldexpf + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../ldexpf.c: 34: float ldexpf(float x, int pw2) + 50 ; ----------------------------------------- + 51 ; function ldexpf + 52 ; ----------------------------------------- + 000000 53 _ldexpf: + 000000 52 10 [ 2] 54 sub sp, #16 + 55 ; ../ldexpf.c: 39: fl.f = x; + 000002 16 15 [ 2] 56 ldw y, (0x15, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 13 [ 2] 58 ldw y, (0x13, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../ldexpf.c: 41: e=(fl.l >> 23) & 0x000000ff; + 00000A 16 03 [ 2] 61 ldw y, (0x03, sp) + 00000C 1E 01 [ 2] 62 ldw x, (0x01, sp) + 00000E 4F [ 1] 63 clr a + 00000F 5D [ 2] 64 tnzw x + 000010 2A 01 [ 1] 65 jrpl 00103$ + 000012 4A [ 1] 66 dec a + 000013 67 00103$: + 000013 88 [ 1] 68 push a + 000014 01 [ 1] 69 rrwa x + 000015 90 01 [ 1] 70 rrwa y + 000017 7B 01 [ 1] 71 ld a, (1, sp) + 000019 01 [ 1] 72 rrwa x + 00001A 90 01 [ 1] 73 rrwa y + 00001C 7B 01 [ 1] 74 ld a, (1, sp) + 00001E 01 [ 1] 75 rrwa x + 00001F 90 01 [ 1] 76 rrwa y + 000021 48 [ 1] 77 sll a + 000022 90 59 [ 2] 78 rlcw y + 000024 59 [ 2] 79 rlcw x + 000025 84 [ 1] 80 pop a + 000026 4F [ 1] 81 clr a + 000027 5F [ 1] 82 clrw x + 000028 61 [ 1] 83 exg a, yl + 000029 6B 0C [ 1] 84 ld (0x0c, sp), a + 00002B 61 [ 1] 85 exg a, yl + 00002C 6B 0B [ 1] 86 ld (0x0b, sp), a + 00002E 1F 09 [ 2] 87 ldw (0x09, sp), x + 88 ; ../ldexpf.c: 42: e+=pw2; + 000030 1E 17 [ 2] 89 ldw x, (0x17, sp) + 000032 1F 0F [ 2] 90 ldw (0x0f, sp), x + 000034 5F [ 1] 91 clrw x + 000035 0D 0F [ 1] 92 tnz (0x0f, sp) + 000037 2A 01 [ 1] 93 jrpl 00104$ + 000039 5A [ 2] 94 decw x + 00003A 95 00104$: + 00003A 16 0F [ 2] 96 ldw y, (0x0f, sp) + 00003C 72 F9 0B [ 2] 97 addw y, (0x0b, sp) + 00003F 9F [ 1] 98 ld a, xl + 000040 19 0A [ 1] 99 adc a, (0x0a, sp) + 000042 02 [ 1] 100 rlwa x + 000043 19 09 [ 1] 101 adc a, (0x09, sp) + 102 ; ../ldexpf.c: 43: fl.l= ((e & 0xff) << 23) | (fl.l & 0x807fffff); + 000045 4F [ 1] 103 clr a + 000046 90 95 [ 1] 104 ld yh, a + 000048 5F [ 1] 105 clrw x + 000049 41 [ 1] 106 exg a, xl + 00004A 90 9F [ 1] 107 ld a, yl + 00004C 41 [ 1] 108 exg a, xl + 00004D 02 [ 1] 109 rlwa x + 00004E 90 9E [ 1] 110 ld a, yh + 000050 01 [ 1] 111 rrwa x + 000051 90 5F [ 1] 112 clrw y + 000053 A6 07 [ 1] 113 ld a, #0x07 + 000055 114 00105$: + 000055 58 [ 2] 115 sllw x + 000056 4A [ 1] 116 dec a + 000057 26 FC [ 1] 117 jrne 00105$ + 000059 17 07 [ 2] 118 ldw (0x07, sp), y + 00005B 1F 05 [ 2] 119 ldw (0x05, sp), x + 00005D 16 03 [ 2] 120 ldw y, (0x03, sp) + 00005F 17 0B [ 2] 121 ldw (0x0b, sp), y + 000061 16 01 [ 2] 122 ldw y, (0x01, sp) + 000063 17 09 [ 2] 123 ldw (0x09, sp), y + 000065 7B 0B [ 1] 124 ld a, (0x0b, sp) + 000067 6B 0F [ 1] 125 ld (0x0f, sp), a + 000069 7B 0C [ 1] 126 ld a, (0x0c, sp) + 00006B 6B 10 [ 1] 127 ld (0x10, sp), a + 00006D 7B 0A [ 1] 128 ld a, (0x0a, sp) + 00006F A4 7F [ 1] 129 and a, #0x7f + 000071 6B 0E [ 1] 130 ld (0x0e, sp), a + 000073 7B 09 [ 1] 131 ld a, (0x09, sp) + 000075 A4 80 [ 1] 132 and a, #0x80 + 000077 1A 05 [ 1] 133 or a, (0x05, sp) + 000079 90 95 [ 1] 134 ld yh, a + 00007B 7B 08 [ 1] 135 ld a, (0x08, sp) + 00007D 1A 10 [ 1] 136 or a, (0x10, sp) + 00007F 97 [ 1] 137 ld xl, a + 000080 7B 07 [ 1] 138 ld a, (0x07, sp) + 000082 1A 0F [ 1] 139 or a, (0x0f, sp) + 000084 95 [ 1] 140 ld xh, a + 000085 7B 06 [ 1] 141 ld a, (0x06, sp) + 000087 1A 0E [ 1] 142 or a, (0x0e, sp) + 000089 90 97 [ 1] 143 ld yl, a + 00008B 1F 03 [ 2] 144 ldw (0x03, sp), x + 00008D 17 01 [ 2] 145 ldw (0x01, sp), y + 146 ; ../ldexpf.c: 45: return(fl.f); + 00008F 1E 03 [ 2] 147 ldw x, (0x03, sp) + 000091 16 01 [ 2] 148 ldw y, (0x01, sp) + 149 ; ../ldexpf.c: 46: } + 000093 5B 10 [ 2] 150 addw sp, #16 + 000095 81 [ 4] 151 ret + 152 .area CODE + 153 .area CONST + 154 .area INITIALIZER + 155 .area CABS (ABS) diff --git a/device/lib/stm8/ldexpf.rel b/device/lib/stm8/ldexpf.rel new file mode 100644 index 0000000..182cb98 --- /dev/null +++ b/device/lib/stm8/ldexpf.rel @@ -0,0 +1,51 @@ +XH3 +H B areas 2 global symbols +M ldexpf +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 96 flags 0 addr 0 +S _ldexpf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 10 16 15 17 03 16 13 17 01 16 03 1E +R 00 00 00 09 +T 00 00 0D 01 4F 5D 2A 01 4A +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 88 01 90 01 7B 01 01 90 01 7B 01 01 90 +R 00 00 00 09 +T 00 00 20 01 48 90 59 59 84 4F 5F 61 6B 0C 61 6B +R 00 00 00 09 +T 00 00 2D 0B 1F 09 1E 17 1F 0F 5F 0D 0F 2A 01 5A +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 16 0F 72 F9 0B 9F 19 0A 02 19 09 4F 90 +R 00 00 00 09 +T 00 00 47 95 5F 41 90 9F 41 02 90 9E 01 90 5F A6 +R 00 00 00 09 +T 00 00 54 07 +R 00 00 00 09 +T 00 00 55 +R 00 00 00 09 +T 00 00 55 58 4A 26 FC 17 07 1F 05 16 03 17 0B 16 +R 00 00 00 09 +T 00 00 62 01 17 09 7B 0B 6B 0F 7B 0C 6B 10 7B 0A +R 00 00 00 09 +T 00 00 6F A4 7F 6B 0E 7B 09 A4 80 1A 05 90 95 7B +R 00 00 00 09 +T 00 00 7C 08 1A 10 97 7B 07 1A 0F 95 7B 06 1A 0E +R 00 00 00 09 +T 00 00 89 90 97 1F 03 17 01 1E 03 16 01 5B 10 81 +R 00 00 00 09 diff --git a/device/lib/stm8/ldexpf.sym b/device/lib/stm8/ldexpf.sym new file mode 100644 index 0000000..6eeb201 --- /dev/null +++ b/device/lib/stm8/ldexpf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _ldexpf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 96 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/log10f.asm b/device/lib/stm8/log10f.asm new file mode 100644 index 0000000..c976eb5 --- /dev/null +++ b/device/lib/stm8/log10f.asm @@ -0,0 +1,75 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module log10f + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _logf + .globl _log10f +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../log10f.c: 34: float log10f(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function log10f +; ----------------------------------------- +_log10f: +; ../log10f.c: 36: return logf(x)*0.4342944819; + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + call _logf + addw sp, #4 + pushw x + pushw y + push #0xd9 + push #0x5b + push #0xde + push #0x3e + call ___fsmul + addw sp, #8 +; ../log10f.c: 37: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/log10f.lst b/device/lib/stm8/log10f.lst new file mode 100644 index 0000000..9aec0df --- /dev/null +++ b/device/lib/stm8/log10f.lst @@ -0,0 +1,75 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module log10f + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _logf + 12 .globl _log10f + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../log10f.c: 34: float log10f(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function log10f + 53 ; ----------------------------------------- + 000000 54 _log10f: + 55 ; ../log10f.c: 36: return logf(x)*0.4342944819; + 000000 1E 05 [ 2] 56 ldw x, (0x05, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 05 [ 2] 58 ldw x, (0x05, sp) + 000005 89 [ 2] 59 pushw x + 000006 CDr00r00 [ 4] 60 call _logf + 000009 5B 04 [ 2] 61 addw sp, #4 + 00000B 89 [ 2] 62 pushw x + 00000C 90 89 [ 2] 63 pushw y + 00000E 4B D9 [ 1] 64 push #0xd9 + 000010 4B 5B [ 1] 65 push #0x5b + 000012 4B DE [ 1] 66 push #0xde + 000014 4B 3E [ 1] 67 push #0x3e + 000016 CDr00r00 [ 4] 68 call ___fsmul + 000019 5B 08 [ 2] 69 addw sp, #8 + 70 ; ../log10f.c: 37: } + 00001B 81 [ 4] 71 ret + 72 .area CODE + 73 .area CONST + 74 .area INITIALIZER + 75 .area CABS (ABS) diff --git a/device/lib/stm8/log10f.rel b/device/lib/stm8/log10f.rel new file mode 100644 index 0000000..5a63864 --- /dev/null +++ b/device/lib/stm8/log10f.rel @@ -0,0 +1,27 @@ +XH3 +H B areas 4 global symbols +M log10f +O -mstm8 +S ___fsmul Ref000000 +S _logf Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1C flags 0 addr 0 +S _log10f Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 05 89 1E 05 89 CD 00 00 5B 04 89 90 +R 00 00 00 09 02 0A 00 01 +T 00 00 0D 89 4B D9 4B 5B 4B DE 4B 3E CD 00 00 5B +R 00 00 00 09 02 0D 00 00 +T 00 00 1A 08 81 +R 00 00 00 09 diff --git a/device/lib/stm8/log10f.sym b/device/lib/stm8/log10f.sym new file mode 100644 index 0000000..16f591f --- /dev/null +++ b/device/lib/stm8/log10f.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsmul ****** GX + 9 _log10f 000000 GR + _logf ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/logf.asm b/device/lib/stm8/logf.asm new file mode 100644 index 0000000..360bd29 --- /dev/null +++ b/device/lib/stm8/logf.asm @@ -0,0 +1,341 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module logf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _frexpf + .globl _logf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../logf.c: 216: float logf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function logf +; ----------------------------------------- +_logf: + sub sp, #14 +; ../logf.c: 226: if (x<=0.0) + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + clrw x + pushw x + clrw x + pushw x + call ___fslt + addw sp, #8 + ld (0x0e, sp), a + jrne 00102$ +; ../logf.c: 228: errno=EDOM; + ldw x, #0x0021 + ldw _errno+0, x +; ../logf.c: 229: return 0.0; + clrw x + clrw y + jp 00106$ +00102$: +; ../logf.c: 231: f=frexpf(x, &n); + ldw x, sp + incw x + pushw x + ldw x, (0x15, sp) + pushw x + ldw x, (0x15, sp) + pushw x + call _frexpf + addw sp, #6 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../logf.c: 232: znum=f-0.5; + clrw x + pushw x + push #0x00 + push #0x3f + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../logf.c: 233: if (f>C0) + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + push #0xf3 + push #0x04 + push #0x35 + push #0x3f + call ___fslt + addw sp, #8 + ld (0x0e, sp), a + jreq 00104$ +; ../logf.c: 235: znum-=0.5; + clrw x + pushw x + push #0x00 + push #0x3f + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../logf.c: 236: zden=(f*0.5)+0.5; + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + clrw x + pushw x + push #0x00 + push #0x3f + call ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + jra 00105$ +00104$: +; ../logf.c: 240: n--; + ldw x, (0x01, sp) + decw x + ldw (0x01, sp), x +; ../logf.c: 241: zden=znum*0.5+0.5; + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + clrw x + pushw x + push #0x00 + push #0x3f + call ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y +00105$: +; ../logf.c: 243: z=znum/zden; + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fsdiv + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw y, (0x0d, sp) + ldw (0x05, sp), y + ldw y, (0x0b, sp) + ldw (0x03, sp), y +; ../logf.c: 244: w=z*z; + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y +; ../logf.c: 246: Rz=z+z*(w*A(w)/B(w)); + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + push #0x3d + push #0x7e + push #0x0d + push #0xbf + call ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y + push #0x3a + push #0x3f + push #0xd4 + push #0xc0 + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fsdiv + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw y, (0x0d, sp) + ldw (0x05, sp), y + ldw y, (0x0b, sp) + ldw (0x03, sp), y +; ../logf.c: 247: xn=n; + ldw x, (0x01, sp) + pushw x + call ___sint2fs + addw sp, #2 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw y, (0x0d, sp) + ldw (0x09, sp), y + ldw y, (0x0b, sp) + ldw (0x07, sp), y +; ../logf.c: 248: return ((xn*C2+Rz)+xn*C1); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + push #0x83 + push #0x80 + push #0x5e + push #0xb9 + call ___fsmul + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + push #0x00 + push #0x80 + push #0x31 + push #0x3f + call ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw x, (0x0d, sp) + ldw y, (0x0b, sp) +00106$: +; ../logf.c: 249: } + addw sp, #14 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/logf.lst b/device/lib/stm8/logf.lst new file mode 100644 index 0000000..0a97583 --- /dev/null +++ b/device/lib/stm8/logf.lst @@ -0,0 +1,341 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module logf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _frexpf + 12 .globl _logf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../logf.c: 216: float logf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function logf + 53 ; ----------------------------------------- + 000000 54 _logf: + 000000 52 0E [ 2] 55 sub sp, #14 + 56 ; ../logf.c: 226: if (x<=0.0) + 000002 1E 13 [ 2] 57 ldw x, (0x13, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 13 [ 2] 59 ldw x, (0x13, sp) + 000007 89 [ 2] 60 pushw x + 000008 5F [ 1] 61 clrw x + 000009 89 [ 2] 62 pushw x + 00000A 5F [ 1] 63 clrw x + 00000B 89 [ 2] 64 pushw x + 00000C CDr00r00 [ 4] 65 call ___fslt + 00000F 5B 08 [ 2] 66 addw sp, #8 + 000011 6B 0E [ 1] 67 ld (0x0e, sp), a + 000013 26 0C [ 1] 68 jrne 00102$ + 69 ; ../logf.c: 228: errno=EDOM; + 000015 AE 00 21 [ 2] 70 ldw x, #0x0021 + 000018 CFu00u00 [ 2] 71 ldw _errno+0, x + 72 ; ../logf.c: 229: return 0.0; + 00001B 5F [ 1] 73 clrw x + 00001C 90 5F [ 1] 74 clrw y + 00001E CCr01rDC [ 2] 75 jp 00106$ + 000021 76 00102$: + 77 ; ../logf.c: 231: f=frexpf(x, &n); + 000021 96 [ 1] 78 ldw x, sp + 000022 5C [ 1] 79 incw x + 000023 89 [ 2] 80 pushw x + 000024 1E 15 [ 2] 81 ldw x, (0x15, sp) + 000026 89 [ 2] 82 pushw x + 000027 1E 15 [ 2] 83 ldw x, (0x15, sp) + 000029 89 [ 2] 84 pushw x + 00002A CDr00r00 [ 4] 85 call _frexpf + 00002D 5B 06 [ 2] 86 addw sp, #6 + 00002F 1F 05 [ 2] 87 ldw (0x05, sp), x + 000031 17 03 [ 2] 88 ldw (0x03, sp), y + 89 ; ../logf.c: 232: znum=f-0.5; + 000033 5F [ 1] 90 clrw x + 000034 89 [ 2] 91 pushw x + 000035 4B 00 [ 1] 92 push #0x00 + 000037 4B 3F [ 1] 93 push #0x3f + 000039 1E 09 [ 2] 94 ldw x, (0x09, sp) + 00003B 89 [ 2] 95 pushw x + 00003C 1E 09 [ 2] 96 ldw x, (0x09, sp) + 00003E 89 [ 2] 97 pushw x + 00003F CDr00r00 [ 4] 98 call ___fssub + 000042 5B 08 [ 2] 99 addw sp, #8 + 000044 1F 09 [ 2] 100 ldw (0x09, sp), x + 000046 17 07 [ 2] 101 ldw (0x07, sp), y + 102 ; ../logf.c: 233: if (f>C0) + 000048 1E 05 [ 2] 103 ldw x, (0x05, sp) + 00004A 89 [ 2] 104 pushw x + 00004B 1E 05 [ 2] 105 ldw x, (0x05, sp) + 00004D 89 [ 2] 106 pushw x + 00004E 4B F3 [ 1] 107 push #0xf3 + 000050 4B 04 [ 1] 108 push #0x04 + 000052 4B 35 [ 1] 109 push #0x35 + 000054 4B 3F [ 1] 110 push #0x3f + 000056 CDr00r00 [ 4] 111 call ___fslt + 000059 5B 08 [ 2] 112 addw sp, #8 + 00005B 6B 0E [ 1] 113 ld (0x0e, sp), a + 00005D 27 3C [ 1] 114 jreq 00104$ + 115 ; ../logf.c: 235: znum-=0.5; + 00005F 5F [ 1] 116 clrw x + 000060 89 [ 2] 117 pushw x + 000061 4B 00 [ 1] 118 push #0x00 + 000063 4B 3F [ 1] 119 push #0x3f + 000065 1E 0D [ 2] 120 ldw x, (0x0d, sp) + 000067 89 [ 2] 121 pushw x + 000068 1E 0D [ 2] 122 ldw x, (0x0d, sp) + 00006A 89 [ 2] 123 pushw x + 00006B CDr00r00 [ 4] 124 call ___fssub + 00006E 5B 08 [ 2] 125 addw sp, #8 + 000070 1F 09 [ 2] 126 ldw (0x09, sp), x + 000072 17 07 [ 2] 127 ldw (0x07, sp), y + 128 ; ../logf.c: 236: zden=(f*0.5)+0.5; + 000074 1E 05 [ 2] 129 ldw x, (0x05, sp) + 000076 89 [ 2] 130 pushw x + 000077 1E 05 [ 2] 131 ldw x, (0x05, sp) + 000079 89 [ 2] 132 pushw x + 00007A 5F [ 1] 133 clrw x + 00007B 89 [ 2] 134 pushw x + 00007C 4B 00 [ 1] 135 push #0x00 + 00007E 4B 3F [ 1] 136 push #0x3f + 000080 CDr00r00 [ 4] 137 call ___fsmul + 000083 5B 08 [ 2] 138 addw sp, #8 + 000085 4B 00 [ 1] 139 push #0x00 + 000087 4B 00 [ 1] 140 push #0x00 + 000089 4B 00 [ 1] 141 push #0x00 + 00008B 4B 3F [ 1] 142 push #0x3f + 00008D 89 [ 2] 143 pushw x + 00008E 90 89 [ 2] 144 pushw y + 000090 CDr00r00 [ 4] 145 call ___fsadd + 000093 5B 08 [ 2] 146 addw sp, #8 + 000095 1F 0D [ 2] 147 ldw (0x0d, sp), x + 000097 17 0B [ 2] 148 ldw (0x0b, sp), y + 000099 20 2A [ 2] 149 jra 00105$ + 00009B 150 00104$: + 151 ; ../logf.c: 240: n--; + 00009B 1E 01 [ 2] 152 ldw x, (0x01, sp) + 00009D 5A [ 2] 153 decw x + 00009E 1F 01 [ 2] 154 ldw (0x01, sp), x + 155 ; ../logf.c: 241: zden=znum*0.5+0.5; + 0000A0 1E 09 [ 2] 156 ldw x, (0x09, sp) + 0000A2 89 [ 2] 157 pushw x + 0000A3 1E 09 [ 2] 158 ldw x, (0x09, sp) + 0000A5 89 [ 2] 159 pushw x + 0000A6 5F [ 1] 160 clrw x + 0000A7 89 [ 2] 161 pushw x + 0000A8 4B 00 [ 1] 162 push #0x00 + 0000AA 4B 3F [ 1] 163 push #0x3f + 0000AC CDr00r00 [ 4] 164 call ___fsmul + 0000AF 5B 08 [ 2] 165 addw sp, #8 + 0000B1 4B 00 [ 1] 166 push #0x00 + 0000B3 4B 00 [ 1] 167 push #0x00 + 0000B5 4B 00 [ 1] 168 push #0x00 + 0000B7 4B 3F [ 1] 169 push #0x3f + 0000B9 89 [ 2] 170 pushw x + 0000BA 90 89 [ 2] 171 pushw y + 0000BC CDr00r00 [ 4] 172 call ___fsadd + 0000BF 5B 08 [ 2] 173 addw sp, #8 + 0000C1 1F 0D [ 2] 174 ldw (0x0d, sp), x + 0000C3 17 0B [ 2] 175 ldw (0x0b, sp), y + 0000C5 176 00105$: + 177 ; ../logf.c: 243: z=znum/zden; + 0000C5 1E 0D [ 2] 178 ldw x, (0x0d, sp) + 0000C7 89 [ 2] 179 pushw x + 0000C8 1E 0D [ 2] 180 ldw x, (0x0d, sp) + 0000CA 89 [ 2] 181 pushw x + 0000CB 1E 0D [ 2] 182 ldw x, (0x0d, sp) + 0000CD 89 [ 2] 183 pushw x + 0000CE 1E 0D [ 2] 184 ldw x, (0x0d, sp) + 0000D0 89 [ 2] 185 pushw x + 0000D1 CDr00r00 [ 4] 186 call ___fsdiv + 0000D4 5B 08 [ 2] 187 addw sp, #8 + 0000D6 1F 0D [ 2] 188 ldw (0x0d, sp), x + 0000D8 17 0B [ 2] 189 ldw (0x0b, sp), y + 0000DA 16 0D [ 2] 190 ldw y, (0x0d, sp) + 0000DC 17 05 [ 2] 191 ldw (0x05, sp), y + 0000DE 16 0B [ 2] 192 ldw y, (0x0b, sp) + 0000E0 17 03 [ 2] 193 ldw (0x03, sp), y + 194 ; ../logf.c: 244: w=z*z; + 0000E2 1E 05 [ 2] 195 ldw x, (0x05, sp) + 0000E4 89 [ 2] 196 pushw x + 0000E5 1E 05 [ 2] 197 ldw x, (0x05, sp) + 0000E7 89 [ 2] 198 pushw x + 0000E8 1E 09 [ 2] 199 ldw x, (0x09, sp) + 0000EA 89 [ 2] 200 pushw x + 0000EB 1E 09 [ 2] 201 ldw x, (0x09, sp) + 0000ED 89 [ 2] 202 pushw x + 0000EE CDr00r00 [ 4] 203 call ___fsmul + 0000F1 5B 08 [ 2] 204 addw sp, #8 + 0000F3 1F 0D [ 2] 205 ldw (0x0d, sp), x + 0000F5 17 0B [ 2] 206 ldw (0x0b, sp), y + 207 ; ../logf.c: 246: Rz=z+z*(w*A(w)/B(w)); + 0000F7 1E 0D [ 2] 208 ldw x, (0x0d, sp) + 0000F9 89 [ 2] 209 pushw x + 0000FA 1E 0D [ 2] 210 ldw x, (0x0d, sp) + 0000FC 89 [ 2] 211 pushw x + 0000FD 4B 3D [ 1] 212 push #0x3d + 0000FF 4B 7E [ 1] 213 push #0x7e + 000101 4B 0D [ 1] 214 push #0x0d + 000103 4B BF [ 1] 215 push #0xbf + 000105 CDr00r00 [ 4] 216 call ___fsmul + 000108 5B 08 [ 2] 217 addw sp, #8 + 00010A 1F 09 [ 2] 218 ldw (0x09, sp), x + 00010C 17 07 [ 2] 219 ldw (0x07, sp), y + 00010E 4B 3A [ 1] 220 push #0x3a + 000110 4B 3F [ 1] 221 push #0x3f + 000112 4B D4 [ 1] 222 push #0xd4 + 000114 4B C0 [ 1] 223 push #0xc0 + 000116 1E 11 [ 2] 224 ldw x, (0x11, sp) + 000118 89 [ 2] 225 pushw x + 000119 1E 11 [ 2] 226 ldw x, (0x11, sp) + 00011B 89 [ 2] 227 pushw x + 00011C CDr00r00 [ 4] 228 call ___fsadd + 00011F 5B 08 [ 2] 229 addw sp, #8 + 000121 1F 0D [ 2] 230 ldw (0x0d, sp), x + 000123 17 0B [ 2] 231 ldw (0x0b, sp), y + 000125 1E 0D [ 2] 232 ldw x, (0x0d, sp) + 000127 89 [ 2] 233 pushw x + 000128 1E 0D [ 2] 234 ldw x, (0x0d, sp) + 00012A 89 [ 2] 235 pushw x + 00012B 1E 0D [ 2] 236 ldw x, (0x0d, sp) + 00012D 89 [ 2] 237 pushw x + 00012E 1E 0D [ 2] 238 ldw x, (0x0d, sp) + 000130 89 [ 2] 239 pushw x + 000131 CDr00r00 [ 4] 240 call ___fsdiv + 000134 5B 08 [ 2] 241 addw sp, #8 + 000136 1F 0D [ 2] 242 ldw (0x0d, sp), x + 000138 17 0B [ 2] 243 ldw (0x0b, sp), y + 00013A 1E 0D [ 2] 244 ldw x, (0x0d, sp) + 00013C 89 [ 2] 245 pushw x + 00013D 1E 0D [ 2] 246 ldw x, (0x0d, sp) + 00013F 89 [ 2] 247 pushw x + 000140 1E 09 [ 2] 248 ldw x, (0x09, sp) + 000142 89 [ 2] 249 pushw x + 000143 1E 09 [ 2] 250 ldw x, (0x09, sp) + 000145 89 [ 2] 251 pushw x + 000146 CDr00r00 [ 4] 252 call ___fsmul + 000149 5B 08 [ 2] 253 addw sp, #8 + 00014B 1F 0D [ 2] 254 ldw (0x0d, sp), x + 00014D 17 0B [ 2] 255 ldw (0x0b, sp), y + 00014F 1E 0D [ 2] 256 ldw x, (0x0d, sp) + 000151 89 [ 2] 257 pushw x + 000152 1E 0D [ 2] 258 ldw x, (0x0d, sp) + 000154 89 [ 2] 259 pushw x + 000155 1E 09 [ 2] 260 ldw x, (0x09, sp) + 000157 89 [ 2] 261 pushw x + 000158 1E 09 [ 2] 262 ldw x, (0x09, sp) + 00015A 89 [ 2] 263 pushw x + 00015B CDr00r00 [ 4] 264 call ___fsadd + 00015E 5B 08 [ 2] 265 addw sp, #8 + 000160 1F 0D [ 2] 266 ldw (0x0d, sp), x + 000162 17 0B [ 2] 267 ldw (0x0b, sp), y + 000164 16 0D [ 2] 268 ldw y, (0x0d, sp) + 000166 17 05 [ 2] 269 ldw (0x05, sp), y + 000168 16 0B [ 2] 270 ldw y, (0x0b, sp) + 00016A 17 03 [ 2] 271 ldw (0x03, sp), y + 272 ; ../logf.c: 247: xn=n; + 00016C 1E 01 [ 2] 273 ldw x, (0x01, sp) + 00016E 89 [ 2] 274 pushw x + 00016F CDr00r00 [ 4] 275 call ___sint2fs + 000172 5B 02 [ 2] 276 addw sp, #2 + 000174 1F 0D [ 2] 277 ldw (0x0d, sp), x + 000176 17 0B [ 2] 278 ldw (0x0b, sp), y + 000178 16 0D [ 2] 279 ldw y, (0x0d, sp) + 00017A 17 09 [ 2] 280 ldw (0x09, sp), y + 00017C 16 0B [ 2] 281 ldw y, (0x0b, sp) + 00017E 17 07 [ 2] 282 ldw (0x07, sp), y + 283 ; ../logf.c: 248: return ((xn*C2+Rz)+xn*C1); + 000180 1E 09 [ 2] 284 ldw x, (0x09, sp) + 000182 89 [ 2] 285 pushw x + 000183 1E 09 [ 2] 286 ldw x, (0x09, sp) + 000185 89 [ 2] 287 pushw x + 000186 4B 83 [ 1] 288 push #0x83 + 000188 4B 80 [ 1] 289 push #0x80 + 00018A 4B 5E [ 1] 290 push #0x5e + 00018C 4B B9 [ 1] 291 push #0xb9 + 00018E CDr00r00 [ 4] 292 call ___fsmul + 000191 5B 08 [ 2] 293 addw sp, #8 + 000193 1F 0D [ 2] 294 ldw (0x0d, sp), x + 000195 17 0B [ 2] 295 ldw (0x0b, sp), y + 000197 1E 05 [ 2] 296 ldw x, (0x05, sp) + 000199 89 [ 2] 297 pushw x + 00019A 1E 05 [ 2] 298 ldw x, (0x05, sp) + 00019C 89 [ 2] 299 pushw x + 00019D 1E 11 [ 2] 300 ldw x, (0x11, sp) + 00019F 89 [ 2] 301 pushw x + 0001A0 1E 11 [ 2] 302 ldw x, (0x11, sp) + 0001A2 89 [ 2] 303 pushw x + 0001A3 CDr00r00 [ 4] 304 call ___fsadd + 0001A6 5B 08 [ 2] 305 addw sp, #8 + 0001A8 1F 0D [ 2] 306 ldw (0x0d, sp), x + 0001AA 17 0B [ 2] 307 ldw (0x0b, sp), y + 0001AC 1E 09 [ 2] 308 ldw x, (0x09, sp) + 0001AE 89 [ 2] 309 pushw x + 0001AF 1E 09 [ 2] 310 ldw x, (0x09, sp) + 0001B1 89 [ 2] 311 pushw x + 0001B2 4B 00 [ 1] 312 push #0x00 + 0001B4 4B 80 [ 1] 313 push #0x80 + 0001B6 4B 31 [ 1] 314 push #0x31 + 0001B8 4B 3F [ 1] 315 push #0x3f + 0001BA CDr00r00 [ 4] 316 call ___fsmul + 0001BD 5B 08 [ 2] 317 addw sp, #8 + 0001BF 1F 09 [ 2] 318 ldw (0x09, sp), x + 0001C1 17 07 [ 2] 319 ldw (0x07, sp), y + 0001C3 1E 09 [ 2] 320 ldw x, (0x09, sp) + 0001C5 89 [ 2] 321 pushw x + 0001C6 1E 09 [ 2] 322 ldw x, (0x09, sp) + 0001C8 89 [ 2] 323 pushw x + 0001C9 1E 11 [ 2] 324 ldw x, (0x11, sp) + 0001CB 89 [ 2] 325 pushw x + 0001CC 1E 11 [ 2] 326 ldw x, (0x11, sp) + 0001CE 89 [ 2] 327 pushw x + 0001CF CDr00r00 [ 4] 328 call ___fsadd + 0001D2 5B 08 [ 2] 329 addw sp, #8 + 0001D4 1F 0D [ 2] 330 ldw (0x0d, sp), x + 0001D6 17 0B [ 2] 331 ldw (0x0b, sp), y + 0001D8 1E 0D [ 2] 332 ldw x, (0x0d, sp) + 0001DA 16 0B [ 2] 333 ldw y, (0x0b, sp) + 0001DC 334 00106$: + 335 ; ../logf.c: 249: } + 0001DC 5B 0E [ 2] 336 addw sp, #14 + 0001DE 81 [ 4] 337 ret + 338 .area CODE + 339 .area CONST + 340 .area INITIALIZER + 341 .area CABS (ABS) diff --git a/device/lib/stm8/logf.rel b/device/lib/stm8/logf.rel new file mode 100644 index 0000000..d87ef86 --- /dev/null +++ b/device/lib/stm8/logf.rel @@ -0,0 +1,115 @@ +XH3 +H B areas A global symbols +M logf +O -mstm8 +S ___fssub Ref000000 +S ___fsmul Ref000000 +S _errno Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S ___sint2fs Ref000000 +S _frexpf Ref000000 +S ___fsdiv Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1DF flags 0 addr 0 +S _logf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0E 1E 13 89 1E 13 89 5F 89 5F 89 CD +R 00 00 00 09 +T 00 00 0D 00 00 5B 08 6B 0E 26 0C AE 00 21 CF +R 00 00 00 09 02 03 00 03 +T 00 00 19 00 00 5F 90 5F CC 01 DC +R 00 00 00 09 12 03 00 02 00 09 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 96 5C 89 1E 15 89 1E 15 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 07 +T 00 00 2E 06 1F 05 17 03 5F 89 4B 00 4B 3F 1E 09 +R 00 00 00 09 +T 00 00 3B 89 1E 09 89 CD 00 00 5B 08 1F 09 17 07 +R 00 00 00 09 02 08 00 00 +T 00 00 48 1E 05 89 1E 05 89 4B F3 4B 04 4B 35 4B +R 00 00 00 09 +T 00 00 55 3F CD 00 00 5B 08 6B 0E 27 3C 5F 89 4B +R 00 00 00 09 02 05 00 03 +T 00 00 62 00 4B 3F 1E 0D 89 1E 0D 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 00 +T 00 00 6F 08 1F 09 17 07 1E 05 89 1E 05 89 5F 89 +R 00 00 00 09 +T 00 00 7C 4B 00 4B 3F CD 00 00 5B 08 4B 00 4B 00 +R 00 00 00 09 02 08 00 01 +T 00 00 89 4B 00 4B 3F 89 90 89 CD 00 00 5B 08 1F +R 00 00 00 09 02 0B 00 05 +T 00 00 96 0D 17 0B 20 2A +R 00 00 00 09 +T 00 00 9B +R 00 00 00 09 +T 00 00 9B 1E 01 5A 1F 01 1E 09 89 1E 09 89 5F 89 +R 00 00 00 09 +T 00 00 A8 4B 00 4B 3F CD 00 00 5B 08 4B 00 4B 00 +R 00 00 00 09 02 08 00 01 +T 00 00 B5 4B 00 4B 3F 89 90 89 CD 00 00 5B 08 1F +R 00 00 00 09 02 0B 00 05 +T 00 00 C2 0D 17 0B +R 00 00 00 09 +T 00 00 C5 +R 00 00 00 09 +T 00 00 C5 1E 0D 89 1E 0D 89 1E 0D 89 1E 0D 89 CD +R 00 00 00 09 +T 00 00 D2 00 00 5B 08 1F 0D 17 0B 16 0D 17 05 16 +R 00 00 00 09 02 03 00 08 +T 00 00 DF 0B 17 03 1E 05 89 1E 05 89 1E 09 89 1E +R 00 00 00 09 +T 00 00 EC 09 89 CD 00 00 5B 08 1F 0D 17 0B 1E 0D +R 00 00 00 09 02 06 00 01 +T 00 00 F9 89 1E 0D 89 4B 3D 4B 7E 4B 0D 4B BF CD +R 00 00 00 09 +T 00 01 06 00 00 5B 08 1F 09 17 07 4B 3A 4B 3F 4B +R 00 00 00 09 02 03 00 01 +T 00 01 13 D4 4B C0 1E 11 89 1E 11 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 05 +T 00 01 20 08 1F 0D 17 0B 1E 0D 89 1E 0D 89 1E 0D +R 00 00 00 09 +T 00 01 2D 89 1E 0D 89 CD 00 00 5B 08 1F 0D 17 0B +R 00 00 00 09 02 08 00 08 +T 00 01 3A 1E 0D 89 1E 0D 89 1E 09 89 1E 09 89 CD +R 00 00 00 09 +T 00 01 47 00 00 5B 08 1F 0D 17 0B 1E 0D 89 1E 0D +R 00 00 00 09 02 03 00 01 +T 00 01 54 89 1E 09 89 1E 09 89 CD 00 00 5B 08 1F +R 00 00 00 09 02 0B 00 05 +T 00 01 61 0D 17 0B 16 0D 17 05 16 0B 17 03 1E 01 +R 00 00 00 09 +T 00 01 6E 89 CD 00 00 5B 02 1F 0D 17 0B 16 0D 17 +R 00 00 00 09 02 05 00 06 +T 00 01 7B 09 16 0B 17 07 1E 09 89 1E 09 89 4B 83 +R 00 00 00 09 +T 00 01 88 4B 80 4B 5E 4B B9 CD 00 00 5B 08 1F 0D +R 00 00 00 09 02 0A 00 01 +T 00 01 95 17 0B 1E 05 89 1E 05 89 1E 11 89 1E 11 +R 00 00 00 09 +T 00 01 A2 89 CD 00 00 5B 08 1F 0D 17 0B 1E 09 89 +R 00 00 00 09 02 05 00 05 +T 00 01 AF 1E 09 89 4B 00 4B 80 4B 31 4B 3F CD +R 00 00 00 09 +T 00 01 BB 00 00 5B 08 1F 09 17 07 1E 09 89 1E 09 +R 00 00 00 09 02 03 00 01 +T 00 01 C8 89 1E 11 89 1E 11 89 CD 00 00 5B 08 1F +R 00 00 00 09 02 0B 00 05 +T 00 01 D5 0D 17 0B 1E 0D 16 0B +R 00 00 00 09 +T 00 01 DC +R 00 00 00 09 +T 00 01 DC 5B 0E 81 +R 00 00 00 09 diff --git a/device/lib/stm8/logf.sym b/device/lib/stm8/logf.sym new file mode 100644 index 0000000..c4ae3a7 --- /dev/null +++ b/device/lib/stm8/logf.sym @@ -0,0 +1,37 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + ___fsdiv ****** GX + ___fslt ****** GX + ___fsmul ****** GX + ___fssub ****** GX + ___sint2fs ****** GX + _errno ****** GX + _frexpf ****** GX + 9 _logf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1DF flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/malloc.asm b/device/lib/stm8/malloc.asm new file mode 100644 index 0000000..42a73a5 --- /dev/null +++ b/device/lib/stm8/malloc.asm @@ -0,0 +1,182 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module malloc + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___sdcc_heap_init + .globl ___sdcc_heap_free + .globl _malloc +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +___sdcc_heap_free:: + .ds 2 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../malloc.c: 65: void __sdcc_heap_init(void) +; ----------------------------------------- +; function __sdcc_heap_init +; ----------------------------------------- +___sdcc_heap_init: +; ../malloc.c: 67: __sdcc_heap_free = HEAP_START; + ldw x, #(___sdcc_heap + 0) + ldw ___sdcc_heap_free+0, x +; ../malloc.c: 68: __sdcc_heap_free->next = HEAP_END; + ldw x, #___sdcc_heap_end+0 + ldw [___sdcc_heap_free+0], x +; ../malloc.c: 69: __sdcc_heap_free->next_free = 0; + ldw x, ___sdcc_heap_free+0 + incw x + incw x + clr (0x1, x) + clr (x) +; ../malloc.c: 70: } + ret +; ../malloc.c: 75: void *malloc(size_t size) +; ----------------------------------------- +; function malloc +; ----------------------------------------- +_malloc: + sub sp, #12 +; ../malloc.c: 86: if(!size || size + offsetof(struct header, next_free) < size) + ldw x, (0x0f, sp) + jreq 00101$ + incw x + incw x + cpw x, (0x0f, sp) + jrnc 00102$ +00101$: +; ../malloc.c: 87: return(0); + clrw x + jra 00115$ +00102$: +; ../malloc.c: 88: size += offsetof(struct header, next_free); +; ../malloc.c: 89: if(size < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks. + ldw (0x0f, sp), x + cpw x, #0x0004 + jrnc 00105$ +; ../malloc.c: 90: size = sizeof(struct header); + ldw x, #0x0004 + ldw (0x0f, sp), x +00105$: +; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free) + ldw x, ___sdcc_heap_free+0 + ldw (0x01, sp), x + ldw x, #(___sdcc_heap_free + 0) + ldw (0x03, sp), x +00113$: +; ../malloc.c: 94: size_t blocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h; + ldw x, (0x01, sp) + jreq 00111$ + ldw x, (x) + ldw (0x05, sp), x + ldw y, x + ldw x, (0x01, sp) + ldw (0x07, sp), x + subw y, (0x07, sp) +; ../malloc.c: 101: newheader->next_free = h->next_free; + ldw x, (0x01, sp) + incw x + incw x + ldw (0x09, sp), x +; ../malloc.c: 95: if(blocksize >= size) // Found free block of sufficient size. + exgw x, y + cpw x, (0x0f, sp) + exgw x, y + jrc 00114$ +; ../malloc.c: 97: if(blocksize >= size + sizeof(struct header)) // It is worth creating a new free block + ldw x, (0x0f, sp) + addw x, #0x0004 + ldw (0x0b, sp), x + ldw x, y + cpw x, (0x0b, sp) + jrc 00107$ +; ../malloc.c: 99: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + size); + ldw x, (0x07, sp) + addw x, (0x0f, sp) +; ../malloc.c: 100: newheader->next = h->next; + ldw (0x0b, sp), x + ldw y, (0x05, sp) + ldw (x), y +; ../malloc.c: 101: newheader->next_free = h->next_free; + ldw x, (0x0b, sp) + incw x + incw x + ldw y, (0x09, sp) + ldw y, (y) + ldw (x), y +; ../malloc.c: 102: *f = newheader; + ldw x, (0x03, sp) + ldw y, (0x0b, sp) + ldw (x), y +; ../malloc.c: 103: h->next = newheader; + ldw x, (0x01, sp) + ldw y, (0x0b, sp) + ldw (x), y + jra 00108$ +00107$: +; ../malloc.c: 106: *f = h->next_free; + ldw x, (0x09, sp) + ldw x, (x) + ldw y, (0x03, sp) + ldw (y), x +00108$: +; ../malloc.c: 108: return(&(h->next_free)); + ldw x, (0x09, sp) + jra 00115$ +00114$: +; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free) + ldw y, (0x09, sp) + ldw (0x03, sp), y + ldw x, (0x09, sp) + ldw x, (x) + ldw (0x01, sp), x + jra 00113$ +00111$: +; ../malloc.c: 112: return(0); + clrw x +00115$: +; ../malloc.c: 113: } + addw sp, #12 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/malloc.lst b/device/lib/stm8/malloc.lst new file mode 100644 index 0000000..cdcb2ce --- /dev/null +++ b/device/lib/stm8/malloc.lst @@ -0,0 +1,182 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module malloc + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___sdcc_heap_init + 12 .globl ___sdcc_heap_free + 13 .globl _malloc + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 000000 18 ___sdcc_heap_free:: + 000000 19 .ds 2 + 20 ;-------------------------------------------------------- + 21 ; ram data + 22 ;-------------------------------------------------------- + 23 .area INITIALIZED + 24 ;-------------------------------------------------------- + 25 ; absolute external ram data + 26 ;-------------------------------------------------------- + 27 .area DABS (ABS) + 28 + 29 ; default segment ordering for linker + 30 .area HOME + 31 .area GSINIT + 32 .area GSFINAL + 33 .area CONST + 34 .area INITIALIZER + 35 .area CODE + 36 + 37 ;-------------------------------------------------------- + 38 ; global & static initialisations + 39 ;-------------------------------------------------------- + 40 .area HOME + 41 .area GSINIT + 42 .area GSFINAL + 43 .area GSINIT + 44 ;-------------------------------------------------------- + 45 ; Home + 46 ;-------------------------------------------------------- + 47 .area HOME + 48 .area HOME + 49 ;-------------------------------------------------------- + 50 ; code + 51 ;-------------------------------------------------------- + 52 .area CODE + 53 ; ../malloc.c: 65: void __sdcc_heap_init(void) + 54 ; ----------------------------------------- + 55 ; function __sdcc_heap_init + 56 ; ----------------------------------------- + 000000 57 ___sdcc_heap_init: + 58 ; ../malloc.c: 67: __sdcc_heap_free = HEAP_START; + 000000 AEr00r00 [ 2] 59 ldw x, #(___sdcc_heap + 0) + 000003 CFu00u00 [ 2] 60 ldw ___sdcc_heap_free+0, x + 61 ; ../malloc.c: 68: __sdcc_heap_free->next = HEAP_END; + 000006 AEr00r00 [ 2] 62 ldw x, #___sdcc_heap_end+0 + 000009 72 CFu00u00 [ 5] 63 ldw [___sdcc_heap_free+0], x + 64 ; ../malloc.c: 69: __sdcc_heap_free->next_free = 0; + 00000D CEu00u00 [ 2] 65 ldw x, ___sdcc_heap_free+0 + 000010 5C [ 1] 66 incw x + 000011 5C [ 1] 67 incw x + 000012 6F 01 [ 1] 68 clr (0x1, x) + 000014 7F [ 1] 69 clr (x) + 70 ; ../malloc.c: 70: } + 000015 81 [ 4] 71 ret + 72 ; ../malloc.c: 75: void *malloc(size_t size) + 73 ; ----------------------------------------- + 74 ; function malloc + 75 ; ----------------------------------------- + 000016 76 _malloc: + 000016 52 0C [ 2] 77 sub sp, #12 + 78 ; ../malloc.c: 86: if(!size || size + offsetof(struct header, next_free) < size) + 000018 1E 0F [ 2] 79 ldw x, (0x0f, sp) + 00001A 27 06 [ 1] 80 jreq 00101$ + 00001C 5C [ 1] 81 incw x + 00001D 5C [ 1] 82 incw x + 00001E 13 0F [ 2] 83 cpw x, (0x0f, sp) + 000020 24 03 [ 1] 84 jrnc 00102$ + 000022 85 00101$: + 86 ; ../malloc.c: 87: return(0); + 000022 5F [ 1] 87 clrw x + 000023 20 74 [ 2] 88 jra 00115$ + 000025 89 00102$: + 90 ; ../malloc.c: 88: size += offsetof(struct header, next_free); + 91 ; ../malloc.c: 89: if(size < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks. + 000025 1F 0F [ 2] 92 ldw (0x0f, sp), x + 000027 A3 00 04 [ 2] 93 cpw x, #0x0004 + 00002A 24 05 [ 1] 94 jrnc 00105$ + 95 ; ../malloc.c: 90: size = sizeof(struct header); + 00002C AE 00 04 [ 2] 96 ldw x, #0x0004 + 00002F 1F 0F [ 2] 97 ldw (0x0f, sp), x + 000031 98 00105$: + 99 ; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free) + 000031 CEu00u00 [ 2] 100 ldw x, ___sdcc_heap_free+0 + 000034 1F 01 [ 2] 101 ldw (0x01, sp), x + 000036 AEr00r00 [ 2] 102 ldw x, #(___sdcc_heap_free + 0) + 000039 1F 03 [ 2] 103 ldw (0x03, sp), x + 00003B 104 00113$: + 105 ; ../malloc.c: 94: size_t blocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h; + 00003B 1E 01 [ 2] 106 ldw x, (0x01, sp) + 00003D 27 59 [ 1] 107 jreq 00111$ + 00003F FE [ 2] 108 ldw x, (x) + 000040 1F 05 [ 2] 109 ldw (0x05, sp), x + 000042 90 93 [ 1] 110 ldw y, x + 000044 1E 01 [ 2] 111 ldw x, (0x01, sp) + 000046 1F 07 [ 2] 112 ldw (0x07, sp), x + 000048 72 F2 07 [ 2] 113 subw y, (0x07, sp) + 114 ; ../malloc.c: 101: newheader->next_free = h->next_free; + 00004B 1E 01 [ 2] 115 ldw x, (0x01, sp) + 00004D 5C [ 1] 116 incw x + 00004E 5C [ 1] 117 incw x + 00004F 1F 09 [ 2] 118 ldw (0x09, sp), x + 119 ; ../malloc.c: 95: if(blocksize >= size) // Found free block of sufficient size. + 000051 51 [ 1] 120 exgw x, y + 000052 13 0F [ 2] 121 cpw x, (0x0f, sp) + 000054 51 [ 1] 122 exgw x, y + 000055 25 36 [ 1] 123 jrc 00114$ + 124 ; ../malloc.c: 97: if(blocksize >= size + sizeof(struct header)) // It is worth creating a new free block + 000057 1E 0F [ 2] 125 ldw x, (0x0f, sp) + 000059 1C 00 04 [ 2] 126 addw x, #0x0004 + 00005C 1F 0B [ 2] 127 ldw (0x0b, sp), x + 00005E 93 [ 1] 128 ldw x, y + 00005F 13 0B [ 2] 129 cpw x, (0x0b, sp) + 000061 25 1F [ 1] 130 jrc 00107$ + 131 ; ../malloc.c: 99: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + size); + 000063 1E 07 [ 2] 132 ldw x, (0x07, sp) + 000065 72 FB 0F [ 2] 133 addw x, (0x0f, sp) + 134 ; ../malloc.c: 100: newheader->next = h->next; + 000068 1F 0B [ 2] 135 ldw (0x0b, sp), x + 00006A 16 05 [ 2] 136 ldw y, (0x05, sp) + 00006C FF [ 2] 137 ldw (x), y + 138 ; ../malloc.c: 101: newheader->next_free = h->next_free; + 00006D 1E 0B [ 2] 139 ldw x, (0x0b, sp) + 00006F 5C [ 1] 140 incw x + 000070 5C [ 1] 141 incw x + 000071 16 09 [ 2] 142 ldw y, (0x09, sp) + 000073 90 FE [ 2] 143 ldw y, (y) + 000075 FF [ 2] 144 ldw (x), y + 145 ; ../malloc.c: 102: *f = newheader; + 000076 1E 03 [ 2] 146 ldw x, (0x03, sp) + 000078 16 0B [ 2] 147 ldw y, (0x0b, sp) + 00007A FF [ 2] 148 ldw (x), y + 149 ; ../malloc.c: 103: h->next = newheader; + 00007B 1E 01 [ 2] 150 ldw x, (0x01, sp) + 00007D 16 0B [ 2] 151 ldw y, (0x0b, sp) + 00007F FF [ 2] 152 ldw (x), y + 000080 20 07 [ 2] 153 jra 00108$ + 000082 154 00107$: + 155 ; ../malloc.c: 106: *f = h->next_free; + 000082 1E 09 [ 2] 156 ldw x, (0x09, sp) + 000084 FE [ 2] 157 ldw x, (x) + 000085 16 03 [ 2] 158 ldw y, (0x03, sp) + 000087 90 FF [ 2] 159 ldw (y), x + 000089 160 00108$: + 161 ; ../malloc.c: 108: return(&(h->next_free)); + 000089 1E 09 [ 2] 162 ldw x, (0x09, sp) + 00008B 20 0C [ 2] 163 jra 00115$ + 00008D 164 00114$: + 165 ; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free) + 00008D 16 09 [ 2] 166 ldw y, (0x09, sp) + 00008F 17 03 [ 2] 167 ldw (0x03, sp), y + 000091 1E 09 [ 2] 168 ldw x, (0x09, sp) + 000093 FE [ 2] 169 ldw x, (x) + 000094 1F 01 [ 2] 170 ldw (0x01, sp), x + 000096 20 A3 [ 2] 171 jra 00113$ + 000098 172 00111$: + 173 ; ../malloc.c: 112: return(0); + 000098 5F [ 1] 174 clrw x + 000099 175 00115$: + 176 ; ../malloc.c: 113: } + 000099 5B 0C [ 2] 177 addw sp, #12 + 00009B 81 [ 4] 178 ret + 179 .area CODE + 180 .area CONST + 181 .area INITIALIZER + 182 .area CABS (ABS) diff --git a/device/lib/stm8/malloc.rel b/device/lib/stm8/malloc.rel new file mode 100644 index 0000000..71a386d --- /dev/null +++ b/device/lib/stm8/malloc.rel @@ -0,0 +1,83 @@ +XH3 +H B areas 6 global symbols +M malloc +O -mstm8 +S ___sdcc_heap_end Ref000000 +S .__.ABS. Def000000 +S ___sdcc_heap Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 2 flags 0 addr 0 +S ___sdcc_heap_free Def000000 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 9C flags 0 addr 0 +S ___sdcc_heap_init Def000000 +S _malloc Def000016 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 AE 00 00 CF 00 00 AE +R 00 00 00 09 02 04 00 02 10 07 00 01 +T 00 00 07 00 00 72 CF 00 00 CE +R 00 00 00 09 02 03 00 00 10 07 00 01 +T 00 00 0E 00 00 5C 5C 6F 01 7F 81 +R 00 00 00 09 10 03 00 01 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 52 0C 1E 0F 27 06 5C 5C 13 0F 24 03 +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 5F 20 74 +R 00 00 00 09 +T 00 00 25 +R 00 00 00 09 +T 00 00 25 1F 0F A3 00 04 24 05 AE 00 04 1F 0F +R 00 00 00 09 +T 00 00 31 +R 00 00 00 09 +T 00 00 31 CE 00 00 1F 01 AE 00 00 1F 03 +R 00 00 00 09 10 04 00 01 00 09 00 01 +T 00 00 3B +R 00 00 00 09 +T 00 00 3B 1E 01 27 59 FE 1F 05 90 93 1E 01 1F 07 +R 00 00 00 09 +T 00 00 48 72 F2 07 1E 01 5C 5C 1F 09 51 13 0F 51 +R 00 00 00 09 +T 00 00 55 25 36 1E 0F 1C 00 04 1F 0B 93 13 0B 25 +R 00 00 00 09 +T 00 00 62 1F 1E 07 72 FB 0F 1F 0B 16 05 FF 1E 0B +R 00 00 00 09 +T 00 00 6F 5C 5C 16 09 90 FE FF 1E 03 16 0B FF 1E +R 00 00 00 09 +T 00 00 7C 01 16 0B FF 20 07 +R 00 00 00 09 +T 00 00 82 +R 00 00 00 09 +T 00 00 82 1E 09 FE 16 03 90 FF +R 00 00 00 09 +T 00 00 89 +R 00 00 00 09 +T 00 00 89 1E 09 20 0C +R 00 00 00 09 +T 00 00 8D +R 00 00 00 09 +T 00 00 8D 16 09 17 03 1E 09 FE 1F 01 20 A3 +R 00 00 00 09 +T 00 00 98 +R 00 00 00 09 +T 00 00 98 5F +R 00 00 00 09 +T 00 00 99 +R 00 00 00 09 +T 00 00 99 5B 0C 81 +R 00 00 00 09 diff --git a/device/lib/stm8/malloc.sym b/device/lib/stm8/malloc.sym new file mode 100644 index 0000000..531452a --- /dev/null +++ b/device/lib/stm8/malloc.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___sdcc_heap ****** GX + ___sdcc_heap_end ****** GX + 1 ___sdcc_heap_free 000000 GR + 9 ___sdcc_heap_init 000000 GR + 9 _malloc 000016 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 2 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 9C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mblen.asm b/device/lib/stm8/mblen.asm new file mode 100644 index 0000000..5c6ebed --- /dev/null +++ b/device/lib/stm8/mblen.asm @@ -0,0 +1,142 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mblen + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mblen +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mblen.c: 31: int mblen(const char *s, size_t n) +; ----------------------------------------- +; function mblen +; ----------------------------------------- +_mblen: + sub sp, #5 +; ../mblen.c: 36: if(!s) +; ../mblen.c: 37: return(0); + ldw x, (0x08, sp) + jreq 00119$ +; ../mblen.c: 39: if(!n) +; ../mblen.c: 40: return(-1); + ldw x, (0x0a, sp) + jrne 00104$ + decw x + jra 00119$ +00104$: +; ../mblen.c: 42: c = *s; + ldw y, (0x08, sp) + ld a, (y) +; ../mblen.c: 44: if(!c) + ld xh, a + tnz a + jrne 00106$ +; ../mblen.c: 45: return(0); + clrw x + jra 00119$ +00106$: +; ../mblen.c: 47: if(c <= 0x7f) + ld a, xh + cp a, #0x7f + jrugt 00126$ +; ../mblen.c: 48: return(1); + clrw x + incw x + jra 00119$ +; ../mblen.c: 50: while(c & 0x80) +00126$: + clr a +00109$: + tnzw x + jrpl 00111$ +; ../mblen.c: 52: c <<= 1; + rlwa x + sll a + rrwa x +; ../mblen.c: 53: m++; + inc a + jra 00109$ +00111$: +; ../mblen.c: 56: if(m > n) + ld (0x02, sp), a + clr (0x01, sp) + ldw x, (0x01, sp) + cpw x, (0x0a, sp) + jrule 00129$ +; ../mblen.c: 57: return(-1); + clrw x + decw x + jra 00119$ +; ../mblen.c: 60: while(--m) +00129$: + ld (0x05, sp), a +00116$: + dec (0x05, sp) + tnz (0x05, sp) + jreq 00118$ +; ../mblen.c: 61: if((*++s & 0xc0) != 0x80) + incw y + ld a, (y) + ld (0x04, sp), a + clr (0x03, sp) + ld a, (0x04, sp) + and a, #0xc0 + ld xl, a + clr a + ld xh, a + cpw x, #0x0080 + jreq 00116$ +; ../mblen.c: 62: return(-1); + clrw x + decw x +; ../mblen.c: 64: return(n); + .byte 0xc5 +00118$: + ldw x, (0x01, sp) +00119$: +; ../mblen.c: 65: } + addw sp, #5 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mblen.lst b/device/lib/stm8/mblen.lst new file mode 100644 index 0000000..a308fc5 --- /dev/null +++ b/device/lib/stm8/mblen.lst @@ -0,0 +1,142 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mblen + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mblen + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../mblen.c: 31: int mblen(const char *s, size_t n) + 50 ; ----------------------------------------- + 51 ; function mblen + 52 ; ----------------------------------------- + 000000 53 _mblen: + 000000 52 05 [ 2] 54 sub sp, #5 + 55 ; ../mblen.c: 36: if(!s) + 56 ; ../mblen.c: 37: return(0); + 000002 1E 08 [ 2] 57 ldw x, (0x08, sp) + 000004 27 54 [ 1] 58 jreq 00119$ + 59 ; ../mblen.c: 39: if(!n) + 60 ; ../mblen.c: 40: return(-1); + 000006 1E 0A [ 2] 61 ldw x, (0x0a, sp) + 000008 26 03 [ 1] 62 jrne 00104$ + 00000A 5A [ 2] 63 decw x + 00000B 20 4D [ 2] 64 jra 00119$ + 00000D 65 00104$: + 66 ; ../mblen.c: 42: c = *s; + 00000D 16 08 [ 2] 67 ldw y, (0x08, sp) + 00000F 90 F6 [ 1] 68 ld a, (y) + 69 ; ../mblen.c: 44: if(!c) + 000011 95 [ 1] 70 ld xh, a + 000012 4D [ 1] 71 tnz a + 000013 26 03 [ 1] 72 jrne 00106$ + 73 ; ../mblen.c: 45: return(0); + 000015 5F [ 1] 74 clrw x + 000016 20 42 [ 2] 75 jra 00119$ + 000018 76 00106$: + 77 ; ../mblen.c: 47: if(c <= 0x7f) + 000018 9E [ 1] 78 ld a, xh + 000019 A1 7F [ 1] 79 cp a, #0x7f + 00001B 22 04 [ 1] 80 jrugt 00126$ + 81 ; ../mblen.c: 48: return(1); + 00001D 5F [ 1] 82 clrw x + 00001E 5C [ 1] 83 incw x + 00001F 20 39 [ 2] 84 jra 00119$ + 85 ; ../mblen.c: 50: while(c & 0x80) + 000021 86 00126$: + 000021 4F [ 1] 87 clr a + 000022 88 00109$: + 000022 5D [ 2] 89 tnzw x + 000023 2A 06 [ 1] 90 jrpl 00111$ + 91 ; ../mblen.c: 52: c <<= 1; + 000025 02 [ 1] 92 rlwa x + 000026 48 [ 1] 93 sll a + 000027 01 [ 1] 94 rrwa x + 95 ; ../mblen.c: 53: m++; + 000028 4C [ 1] 96 inc a + 000029 20 F7 [ 2] 97 jra 00109$ + 00002B 98 00111$: + 99 ; ../mblen.c: 56: if(m > n) + 00002B 6B 02 [ 1] 100 ld (0x02, sp), a + 00002D 0F 01 [ 1] 101 clr (0x01, sp) + 00002F 1E 01 [ 2] 102 ldw x, (0x01, sp) + 000031 13 0A [ 2] 103 cpw x, (0x0a, sp) + 000033 23 04 [ 2] 104 jrule 00129$ + 105 ; ../mblen.c: 57: return(-1); + 000035 5F [ 1] 106 clrw x + 000036 5A [ 2] 107 decw x + 000037 20 21 [ 2] 108 jra 00119$ + 109 ; ../mblen.c: 60: while(--m) + 000039 110 00129$: + 000039 6B 05 [ 1] 111 ld (0x05, sp), a + 00003B 112 00116$: + 00003B 0A 05 [ 1] 113 dec (0x05, sp) + 00003D 0D 05 [ 1] 114 tnz (0x05, sp) + 00003F 27 17 [ 1] 115 jreq 00118$ + 116 ; ../mblen.c: 61: if((*++s & 0xc0) != 0x80) + 000041 90 5C [ 1] 117 incw y + 000043 90 F6 [ 1] 118 ld a, (y) + 000045 6B 04 [ 1] 119 ld (0x04, sp), a + 000047 0F 03 [ 1] 120 clr (0x03, sp) + 000049 7B 04 [ 1] 121 ld a, (0x04, sp) + 00004B A4 C0 [ 1] 122 and a, #0xc0 + 00004D 97 [ 1] 123 ld xl, a + 00004E 4F [ 1] 124 clr a + 00004F 95 [ 1] 125 ld xh, a + 000050 A3 00 80 [ 2] 126 cpw x, #0x0080 + 000053 27 E6 [ 1] 127 jreq 00116$ + 128 ; ../mblen.c: 62: return(-1); + 000055 5F [ 1] 129 clrw x + 000056 5A [ 2] 130 decw x + 131 ; ../mblen.c: 64: return(n); + 000057 C5 132 .byte 0xc5 + 000058 133 00118$: + 000058 1E 01 [ 2] 134 ldw x, (0x01, sp) + 00005A 135 00119$: + 136 ; ../mblen.c: 65: } + 00005A 5B 05 [ 2] 137 addw sp, #5 + 00005C 81 [ 4] 138 ret + 139 .area CODE + 140 .area CONST + 141 .area INITIALIZER + 142 .area CABS (ABS) diff --git a/device/lib/stm8/mblen.rel b/device/lib/stm8/mblen.rel new file mode 100644 index 0000000..aea0c40 --- /dev/null +++ b/device/lib/stm8/mblen.rel @@ -0,0 +1,63 @@ +XH3 +H B areas 2 global symbols +M mblen +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 5D flags 0 addr 0 +S _mblen Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 05 1E 08 27 54 1E 0A 26 03 5A 20 4D +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 16 08 90 F6 95 4D 26 03 5F 20 42 +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 9E A1 7F 22 04 5F 5C 20 39 +R 00 00 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 4F +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 5D 2A 06 02 48 01 4C 20 F7 +R 00 00 00 09 +T 00 00 2B +R 00 00 00 09 +T 00 00 2B 6B 02 0F 01 1E 01 13 0A 23 04 5F 5A 20 +R 00 00 00 09 +T 00 00 38 21 +R 00 00 00 09 +T 00 00 39 +R 00 00 00 09 +T 00 00 39 6B 05 +R 00 00 00 09 +T 00 00 3B +R 00 00 00 09 +T 00 00 3B 0A 05 0D 05 27 17 90 5C 90 F6 6B 04 0F +R 00 00 00 09 +T 00 00 48 03 7B 04 A4 C0 97 4F 95 A3 00 80 27 E6 +R 00 00 00 09 +T 00 00 55 5F 5A C5 +R 00 00 00 09 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 1E 01 +R 00 00 00 09 +T 00 00 5A +R 00 00 00 09 +T 00 00 5A 5B 05 81 +R 00 00 00 09 diff --git a/device/lib/stm8/mblen.sym b/device/lib/stm8/mblen.sym new file mode 100644 index 0000000..4b3c7cc --- /dev/null +++ b/device/lib/stm8/mblen.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _mblen 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 5D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mbrlen.asm b/device/lib/stm8/mbrlen.asm new file mode 100644 index 0000000..e6be5fe --- /dev/null +++ b/device/lib/stm8/mbrlen.asm @@ -0,0 +1,76 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mbrlen + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mbrtowc + .globl _mbrlen +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +_mbrlen_sps_65536_10: + .ds 3 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mbrlen.c: 31: size_t mbrlen(const char *restrict s, size_t n, mbstate_t *restrict ps) +; ----------------------------------------- +; function mbrlen +; ----------------------------------------- +_mbrlen: +; ../mbrlen.c: 35: return(mbrtowc(0, s, n, ps ? ps : &sps)); + ldw x, (0x07, sp) + jrne 00104$ + ldw x, #(_mbrlen_sps_65536_10 + 0) +00104$: + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + clrw x + pushw x + call _mbrtowc + addw sp, #8 +; ../mbrlen.c: 36: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mbrlen.lst b/device/lib/stm8/mbrlen.lst new file mode 100644 index 0000000..68b4b3f --- /dev/null +++ b/device/lib/stm8/mbrlen.lst @@ -0,0 +1,76 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mbrlen + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mbrtowc + 12 .globl _mbrlen + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 000000 17 _mbrlen_sps_65536_10: + 000000 18 .ds 3 + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../mbrlen.c: 31: size_t mbrlen(const char *restrict s, size_t n, mbstate_t *restrict ps) + 53 ; ----------------------------------------- + 54 ; function mbrlen + 55 ; ----------------------------------------- + 000000 56 _mbrlen: + 57 ; ../mbrlen.c: 35: return(mbrtowc(0, s, n, ps ? ps : &sps)); + 000000 1E 07 [ 2] 58 ldw x, (0x07, sp) + 000002 26 03 [ 1] 59 jrne 00104$ + 000004 AEr00r00 [ 2] 60 ldw x, #(_mbrlen_sps_65536_10 + 0) + 000007 61 00104$: + 000007 89 [ 2] 62 pushw x + 000008 1E 07 [ 2] 63 ldw x, (0x07, sp) + 00000A 89 [ 2] 64 pushw x + 00000B 1E 07 [ 2] 65 ldw x, (0x07, sp) + 00000D 89 [ 2] 66 pushw x + 00000E 5F [ 1] 67 clrw x + 00000F 89 [ 2] 68 pushw x + 000010 CDr00r00 [ 4] 69 call _mbrtowc + 000013 5B 08 [ 2] 70 addw sp, #8 + 71 ; ../mbrlen.c: 36: } + 000015 81 [ 4] 72 ret + 73 .area CODE + 74 .area CONST + 75 .area INITIALIZER + 76 .area CABS (ABS) diff --git a/device/lib/stm8/mbrlen.rel b/device/lib/stm8/mbrlen.rel new file mode 100644 index 0000000..c6331d4 --- /dev/null +++ b/device/lib/stm8/mbrlen.rel @@ -0,0 +1,32 @@ +XH3 +H B areas 3 global symbols +M mbrlen +O -mstm8 +S _mbrtowc Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 3 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 16 flags 0 addr 0 +S _mbrlen Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 07 26 03 AE 00 00 +R 00 00 00 09 00 08 00 01 +T 00 00 07 +R 00 00 00 09 +T 00 00 07 89 1E 07 89 1E 07 89 5F 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 00 +T 00 00 14 08 81 +R 00 00 00 09 diff --git a/device/lib/stm8/mbrlen.sym b/device/lib/stm8/mbrlen.sym new file mode 100644 index 0000000..bf7480c --- /dev/null +++ b/device/lib/stm8/mbrlen.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _mbrlen 000000 GR + 1 _mbrlen_sps_65536_10 000000 R + _mbrtowc ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 3 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 16 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mbrtoc16.asm b/device/lib/stm8/mbrtoc16.asm new file mode 100644 index 0000000..fb4e1cc --- /dev/null +++ b/device/lib/stm8/mbrtoc16.asm @@ -0,0 +1,231 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mbrtoc16 + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mbrtowc + .globl _mbrtoc16 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +_mbrtoc16_sps_65536_16: + .ds 3 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mbrtoc16.c: 34: size_t mbrtoc16(char16_t *restrict pc16, const char *restrict s, size_t n, mbstate_t *restrict ps) +; ----------------------------------------- +; function mbrtoc16 +; ----------------------------------------- +_mbrtoc16: + sub sp, #14 +; ../mbrtoc16.c: 41: if(!s) + ldw x, (0x13, sp) + jrne 00102$ +; ../mbrtoc16.c: 42: return(mbrtoc16(0, "", 1, ps)); + ldw x, (0x17, sp) + pushw x + push #0x01 + push #0x00 + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + clrw x + pushw x + callr _mbrtoc16 + addw sp, #8 + jp 00119$ +00102$: +; ../mbrtoc16.c: 44: if(!ps) + ldw x, (0x17, sp) + jrne 00104$ +; ../mbrtoc16.c: 45: ps = &sps; + ldw x, #(_mbrtoc16_sps_65536_16 + 0) + ldw (0x17, sp), x +00104$: +; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2])) + ldw y, (0x17, sp) + ldw (0x07, sp), y + ldw x, y + ld a, (x) +; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + ldw y, (0x11, sp) + ldw (0x05, sp), y +; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2])) + ldw x, (0x07, sp) + incw x + ldw (0x09, sp), x + ldw x, (0x07, sp) + incw x + incw x + ldw (0x0b, sp), x + tnz a + jrne 00108$ + ldw x, (0x09, sp) + ld a, (x) + jrne 00107$ + ldw x, (0x0b, sp) + ld a, (x) + jreq 00108$ +00107$: +; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + ldw y, (0x17, sp) + ldw x, y + incw x + ldw (0x07, sp), x + ldw x, y + incw x + incw x + ldw (0x09, sp), x +; ../mbrtoc16.c: 49: if(pc16) + ldw x, (0x11, sp) + jreq 00106$ +; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + ldw x, (0x07, sp) + ld a, (x) + ld (0x0c, sp), a + clr (0x0b, sp) + ldw y, (0x09, sp) + ld a, (y) + ld xh, a + clr (0x0e, sp) + ld a, (0x0e, sp) + ld xl, a + addw x, (0x0b, sp) + ldw y, (0x05, sp) + ldw (y), x +00106$: +; ../mbrtoc16.c: 51: ps->c[1] = ps->c[2] = 0; + ldw x, (0x09, sp) + clr (x) + ldw x, (0x07, sp) + clr (x) +; ../mbrtoc16.c: 52: return(-3); + ldw x, #0xfffd + jra 00119$ +00108$: +; ../mbrtoc16.c: 55: ret = mbrtowc(&codepoint, s, n, ps); + ldw x, sp + incw x + exgw x, y + ldw x, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + pushw y + call _mbrtowc + addw sp, #8 +; ../mbrtoc16.c: 57: if(ret > MB_LEN_MAX) + ldw (0x0d, sp), x + cpw x, #0x0004 + jrule 00112$ +; ../mbrtoc16.c: 58: return(ret); + ldw x, (0x0d, sp) + jra 00119$ +00112$: +; ../mbrtoc16.c: 60: if (codepoint <= 0xffff) // Basic multilingual plane + ldw x, (0x01, sp) + jrne 00116$ +; ../mbrtoc16.c: 62: if(pc16) + ldw x, (0x11, sp) + jreq 00114$ +; ../mbrtoc16.c: 63: *pc16 = codepoint; + ldw y, (0x03, sp) + ldw x, (0x05, sp) + ldw (x), y +00114$: +; ../mbrtoc16.c: 64: return(ret); + ldw x, (0x0d, sp) + jra 00119$ +00116$: +; ../mbrtoc16.c: 67: codepoint -= 0x100000; + ldw y, (0x03, sp) + ldw x, (0x01, sp) + subw x, #0x0010 + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../mbrtoc16.c: 68: if(pc16) + ldw x, (0x11, sp) + jreq 00118$ +; ../mbrtoc16.c: 69: *pc16 = ((codepoint >> 10) & 0x3ff) + 0xd800; + ldw x, (0x02, sp) + ld a, (0x01, sp) + srl a + rrcw x + srl a + rrcw x + ld a, xh + and a, #0x03 + ld xh, a + addw x, #0xd800 + ldw y, (0x05, sp) + ldw (y), x +00118$: +; ../mbrtoc16.c: 70: low_surrogate = (codepoint & 0x3ff) + 0xdc00; + ldw x, (0x03, sp) + ld a, xh + and a, #0x03 + ld xh, a + addw x, #0xdc00 +; ../mbrtoc16.c: 71: ps->c[0] = 0; + ldw y, (0x07, sp) + clr (y) +; ../mbrtoc16.c: 72: ps->c[1] = low_surrogate & 0xff; + ld a, xl + ldw y, (0x09, sp) + ld (y), a +; ../mbrtoc16.c: 73: ps->c[2] = low_surrogate >> 8; + ld a, xh + ldw x, (0x0b, sp) + ld (x), a +; ../mbrtoc16.c: 75: return(ret); + ldw x, (0x0d, sp) +00119$: +; ../mbrtoc16.c: 76: } + addw sp, #14 + ret + .area CODE + .area CONST + .area CONST +___str_0: + .db 0x00 + .area CODE + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mbrtoc16.lst b/device/lib/stm8/mbrtoc16.lst new file mode 100644 index 0000000..656526f --- /dev/null +++ b/device/lib/stm8/mbrtoc16.lst @@ -0,0 +1,231 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mbrtoc16 + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mbrtowc + 12 .globl _mbrtoc16 + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 000000 17 _mbrtoc16_sps_65536_16: + 000000 18 .ds 3 + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../mbrtoc16.c: 34: size_t mbrtoc16(char16_t *restrict pc16, const char *restrict s, size_t n, mbstate_t *restrict ps) + 53 ; ----------------------------------------- + 54 ; function mbrtoc16 + 55 ; ----------------------------------------- + 000000 56 _mbrtoc16: + 000000 52 0E [ 2] 57 sub sp, #14 + 58 ; ../mbrtoc16.c: 41: if(!s) + 000002 1E 13 [ 2] 59 ldw x, (0x13, sp) + 000004 26 14 [ 1] 60 jrne 00102$ + 61 ; ../mbrtoc16.c: 42: return(mbrtoc16(0, "", 1, ps)); + 000006 1E 17 [ 2] 62 ldw x, (0x17, sp) + 000008 89 [ 2] 63 pushw x + 000009 4B 01 [ 1] 64 push #0x01 + 00000B 4B 00 [ 1] 65 push #0x00 + 00000D 4Br00 [ 1] 66 push #<(___str_0 + 0) + 00000F 4Bs00 [ 1] 67 push #((___str_0 + 0) >> 8) + 000011 5F [ 1] 68 clrw x + 000012 89 [ 2] 69 pushw x + 000013 AD EB [ 4] 70 callr _mbrtoc16 + 000015 5B 08 [ 2] 71 addw sp, #8 + 000017 CCr00rE0 [ 2] 72 jp 00119$ + 00001A 73 00102$: + 74 ; ../mbrtoc16.c: 44: if(!ps) + 00001A 1E 17 [ 2] 75 ldw x, (0x17, sp) + 00001C 26 05 [ 1] 76 jrne 00104$ + 77 ; ../mbrtoc16.c: 45: ps = &sps; + 00001E AEr00r00 [ 2] 78 ldw x, #(_mbrtoc16_sps_65536_16 + 0) + 000021 1F 17 [ 2] 79 ldw (0x17, sp), x + 000023 80 00104$: + 81 ; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2])) + 000023 16 17 [ 2] 82 ldw y, (0x17, sp) + 000025 17 07 [ 2] 83 ldw (0x07, sp), y + 000027 93 [ 1] 84 ldw x, y + 000028 F6 [ 1] 85 ld a, (x) + 86 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + 000029 16 11 [ 2] 87 ldw y, (0x11, sp) + 00002B 17 05 [ 2] 88 ldw (0x05, sp), y + 89 ; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2])) + 00002D 1E 07 [ 2] 90 ldw x, (0x07, sp) + 00002F 5C [ 1] 91 incw x + 000030 1F 09 [ 2] 92 ldw (0x09, sp), x + 000032 1E 07 [ 2] 93 ldw x, (0x07, sp) + 000034 5C [ 1] 94 incw x + 000035 5C [ 1] 95 incw x + 000036 1F 0B [ 2] 96 ldw (0x0b, sp), x + 000038 4D [ 1] 97 tnz a + 000039 26 3C [ 1] 98 jrne 00108$ + 00003B 1E 09 [ 2] 99 ldw x, (0x09, sp) + 00003D F6 [ 1] 100 ld a, (x) + 00003E 26 05 [ 1] 101 jrne 00107$ + 000040 1E 0B [ 2] 102 ldw x, (0x0b, sp) + 000042 F6 [ 1] 103 ld a, (x) + 000043 27 32 [ 1] 104 jreq 00108$ + 000045 105 00107$: + 106 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + 000045 16 17 [ 2] 107 ldw y, (0x17, sp) + 000047 93 [ 1] 108 ldw x, y + 000048 5C [ 1] 109 incw x + 000049 1F 07 [ 2] 110 ldw (0x07, sp), x + 00004B 93 [ 1] 111 ldw x, y + 00004C 5C [ 1] 112 incw x + 00004D 5C [ 1] 113 incw x + 00004E 1F 09 [ 2] 114 ldw (0x09, sp), x + 115 ; ../mbrtoc16.c: 49: if(pc16) + 000050 1E 11 [ 2] 116 ldw x, (0x11, sp) + 000052 27 18 [ 1] 117 jreq 00106$ + 118 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + 000054 1E 07 [ 2] 119 ldw x, (0x07, sp) + 000056 F6 [ 1] 120 ld a, (x) + 000057 6B 0C [ 1] 121 ld (0x0c, sp), a + 000059 0F 0B [ 1] 122 clr (0x0b, sp) + 00005B 16 09 [ 2] 123 ldw y, (0x09, sp) + 00005D 90 F6 [ 1] 124 ld a, (y) + 00005F 95 [ 1] 125 ld xh, a + 000060 0F 0E [ 1] 126 clr (0x0e, sp) + 000062 7B 0E [ 1] 127 ld a, (0x0e, sp) + 000064 97 [ 1] 128 ld xl, a + 000065 72 FB 0B [ 2] 129 addw x, (0x0b, sp) + 000068 16 05 [ 2] 130 ldw y, (0x05, sp) + 00006A 90 FF [ 2] 131 ldw (y), x + 00006C 132 00106$: + 133 ; ../mbrtoc16.c: 51: ps->c[1] = ps->c[2] = 0; + 00006C 1E 09 [ 2] 134 ldw x, (0x09, sp) + 00006E 7F [ 1] 135 clr (x) + 00006F 1E 07 [ 2] 136 ldw x, (0x07, sp) + 000071 7F [ 1] 137 clr (x) + 138 ; ../mbrtoc16.c: 52: return(-3); + 000072 AE FF FD [ 2] 139 ldw x, #0xfffd + 000075 20 69 [ 2] 140 jra 00119$ + 000077 141 00108$: + 142 ; ../mbrtoc16.c: 55: ret = mbrtowc(&codepoint, s, n, ps); + 000077 96 [ 1] 143 ldw x, sp + 000078 5C [ 1] 144 incw x + 000079 51 [ 1] 145 exgw x, y + 00007A 1E 17 [ 2] 146 ldw x, (0x17, sp) + 00007C 89 [ 2] 147 pushw x + 00007D 1E 17 [ 2] 148 ldw x, (0x17, sp) + 00007F 89 [ 2] 149 pushw x + 000080 1E 17 [ 2] 150 ldw x, (0x17, sp) + 000082 89 [ 2] 151 pushw x + 000083 90 89 [ 2] 152 pushw y + 000085 CDr00r00 [ 4] 153 call _mbrtowc + 000088 5B 08 [ 2] 154 addw sp, #8 + 155 ; ../mbrtoc16.c: 57: if(ret > MB_LEN_MAX) + 00008A 1F 0D [ 2] 156 ldw (0x0d, sp), x + 00008C A3 00 04 [ 2] 157 cpw x, #0x0004 + 00008F 23 04 [ 2] 158 jrule 00112$ + 159 ; ../mbrtoc16.c: 58: return(ret); + 000091 1E 0D [ 2] 160 ldw x, (0x0d, sp) + 000093 20 4B [ 2] 161 jra 00119$ + 000095 162 00112$: + 163 ; ../mbrtoc16.c: 60: if (codepoint <= 0xffff) // Basic multilingual plane + 000095 1E 01 [ 2] 164 ldw x, (0x01, sp) + 000097 26 0D [ 1] 165 jrne 00116$ + 166 ; ../mbrtoc16.c: 62: if(pc16) + 000099 1E 11 [ 2] 167 ldw x, (0x11, sp) + 00009B 27 05 [ 1] 168 jreq 00114$ + 169 ; ../mbrtoc16.c: 63: *pc16 = codepoint; + 00009D 16 03 [ 2] 170 ldw y, (0x03, sp) + 00009F 1E 05 [ 2] 171 ldw x, (0x05, sp) + 0000A1 FF [ 2] 172 ldw (x), y + 0000A2 173 00114$: + 174 ; ../mbrtoc16.c: 64: return(ret); + 0000A2 1E 0D [ 2] 175 ldw x, (0x0d, sp) + 0000A4 20 3A [ 2] 176 jra 00119$ + 0000A6 177 00116$: + 178 ; ../mbrtoc16.c: 67: codepoint -= 0x100000; + 0000A6 16 03 [ 2] 179 ldw y, (0x03, sp) + 0000A8 1E 01 [ 2] 180 ldw x, (0x01, sp) + 0000AA 1D 00 10 [ 2] 181 subw x, #0x0010 + 0000AD 17 03 [ 2] 182 ldw (0x03, sp), y + 0000AF 1F 01 [ 2] 183 ldw (0x01, sp), x + 184 ; ../mbrtoc16.c: 68: if(pc16) + 0000B1 1E 11 [ 2] 185 ldw x, (0x11, sp) + 0000B3 27 13 [ 1] 186 jreq 00118$ + 187 ; ../mbrtoc16.c: 69: *pc16 = ((codepoint >> 10) & 0x3ff) + 0xd800; + 0000B5 1E 02 [ 2] 188 ldw x, (0x02, sp) + 0000B7 7B 01 [ 1] 189 ld a, (0x01, sp) + 0000B9 44 [ 1] 190 srl a + 0000BA 56 [ 2] 191 rrcw x + 0000BB 44 [ 1] 192 srl a + 0000BC 56 [ 2] 193 rrcw x + 0000BD 9E [ 1] 194 ld a, xh + 0000BE A4 03 [ 1] 195 and a, #0x03 + 0000C0 95 [ 1] 196 ld xh, a + 0000C1 1C D8 00 [ 2] 197 addw x, #0xd800 + 0000C4 16 05 [ 2] 198 ldw y, (0x05, sp) + 0000C6 90 FF [ 2] 199 ldw (y), x + 0000C8 200 00118$: + 201 ; ../mbrtoc16.c: 70: low_surrogate = (codepoint & 0x3ff) + 0xdc00; + 0000C8 1E 03 [ 2] 202 ldw x, (0x03, sp) + 0000CA 9E [ 1] 203 ld a, xh + 0000CB A4 03 [ 1] 204 and a, #0x03 + 0000CD 95 [ 1] 205 ld xh, a + 0000CE 1C DC 00 [ 2] 206 addw x, #0xdc00 + 207 ; ../mbrtoc16.c: 71: ps->c[0] = 0; + 0000D1 16 07 [ 2] 208 ldw y, (0x07, sp) + 0000D3 90 7F [ 1] 209 clr (y) + 210 ; ../mbrtoc16.c: 72: ps->c[1] = low_surrogate & 0xff; + 0000D5 9F [ 1] 211 ld a, xl + 0000D6 16 09 [ 2] 212 ldw y, (0x09, sp) + 0000D8 90 F7 [ 1] 213 ld (y), a + 214 ; ../mbrtoc16.c: 73: ps->c[2] = low_surrogate >> 8; + 0000DA 9E [ 1] 215 ld a, xh + 0000DB 1E 0B [ 2] 216 ldw x, (0x0b, sp) + 0000DD F7 [ 1] 217 ld (x), a + 218 ; ../mbrtoc16.c: 75: return(ret); + 0000DE 1E 0D [ 2] 219 ldw x, (0x0d, sp) + 0000E0 220 00119$: + 221 ; ../mbrtoc16.c: 76: } + 0000E0 5B 0E [ 2] 222 addw sp, #14 + 0000E2 81 [ 4] 223 ret + 224 .area CODE + 225 .area CONST + 226 .area CONST + 000000 227 ___str_0: + 000000 00 228 .db 0x00 + 229 .area CODE + 230 .area INITIALIZER + 231 .area CABS (ABS) diff --git a/device/lib/stm8/mbrtoc16.rel b/device/lib/stm8/mbrtoc16.rel new file mode 100644 index 0000000..0cb9505 --- /dev/null +++ b/device/lib/stm8/mbrtoc16.rel @@ -0,0 +1,92 @@ +XH3 +H B areas 3 global symbols +M mbrtoc16 +O -mstm8 +S _mbrtowc Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 3 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 1 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size E3 flags 0 addr 0 +S _mbrtoc16 Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0E 1E 13 26 14 1E 17 89 4B 01 4B 00 +R 00 00 00 09 +T 00 00 0D 4B 00 00 00 4B 00 00 00 5F 89 AD EB 5B +R 00 00 00 09 F1 09 04 00 07 F1 81 08 00 07 +T 00 00 16 08 CC 00 E0 +R 00 00 00 09 00 05 00 09 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 1E 17 26 05 AE 00 00 1F 17 +R 00 00 00 09 00 08 00 01 +T 00 00 23 +R 00 00 00 09 +T 00 00 23 16 17 17 07 93 F6 16 11 17 05 1E 07 5C +R 00 00 00 09 +T 00 00 30 1F 09 1E 07 5C 5C 1F 0B 4D 26 3C 1E 09 +R 00 00 00 09 +T 00 00 3D F6 26 05 1E 0B F6 27 32 +R 00 00 00 09 +T 00 00 45 +R 00 00 00 09 +T 00 00 45 16 17 93 5C 1F 07 93 5C 5C 1F 09 1E 11 +R 00 00 00 09 +T 00 00 52 27 18 1E 07 F6 6B 0C 0F 0B 16 09 90 F6 +R 00 00 00 09 +T 00 00 5F 95 0F 0E 7B 0E 97 72 FB 0B 16 05 90 FF +R 00 00 00 09 +T 00 00 6C +R 00 00 00 09 +T 00 00 6C 1E 09 7F 1E 07 7F AE FF FD 20 69 +R 00 00 00 09 +T 00 00 77 +R 00 00 00 09 +T 00 00 77 96 5C 51 1E 17 89 1E 17 89 1E 17 89 90 +R 00 00 00 09 +T 00 00 84 89 CD 00 00 5B 08 1F 0D A3 00 04 23 04 +R 00 00 00 09 02 05 00 00 +T 00 00 91 1E 0D 20 4B +R 00 00 00 09 +T 00 00 95 +R 00 00 00 09 +T 00 00 95 1E 01 26 0D 1E 11 27 05 16 03 1E 05 FF +R 00 00 00 09 +T 00 00 A2 +R 00 00 00 09 +T 00 00 A2 1E 0D 20 3A +R 00 00 00 09 +T 00 00 A6 +R 00 00 00 09 +T 00 00 A6 16 03 1E 01 1D 00 10 17 03 1F 01 1E 11 +R 00 00 00 09 +T 00 00 B3 27 13 1E 02 7B 01 44 56 44 56 9E A4 03 +R 00 00 00 09 +T 00 00 C0 95 1C D8 00 16 05 90 FF +R 00 00 00 09 +T 00 00 C8 +R 00 00 00 09 +T 00 00 C8 1E 03 9E A4 03 95 1C DC 00 16 07 90 7F +R 00 00 00 09 +T 00 00 D5 9F 16 09 90 F7 9E 1E 0B F7 1E 0D +R 00 00 00 09 +T 00 00 E0 +R 00 00 00 09 +T 00 00 E0 5B 0E 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 07 +T 00 00 00 00 +R 00 00 00 07 diff --git a/device/lib/stm8/mbrtoc16.sym b/device/lib/stm8/mbrtoc16.sym new file mode 100644 index 0000000..e05578a --- /dev/null +++ b/device/lib/stm8/mbrtoc16.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 7 ___str_0 000000 R + 9 _mbrtoc16 000000 GR + 1 _mbrtoc16_sps_65536_16 000000 R + _mbrtowc ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 3 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 1 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size E3 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mbrtoc32.asm b/device/lib/stm8/mbrtoc32.asm new file mode 100644 index 0000000..c7dbf1e --- /dev/null +++ b/device/lib/stm8/mbrtoc32.asm @@ -0,0 +1,114 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mbrtoc32 + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mbrtowc + .globl _mbrtoc32 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +_mbrtoc32_sps_65536_16: + .ds 3 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mbrtoc32.c: 34: size_t mbrtoc32(char32_t *restrict pc32, const char *restrict s, size_t n, mbstate_t *restrict ps) +; ----------------------------------------- +; function mbrtoc32 +; ----------------------------------------- +_mbrtoc32: + sub sp, #6 +; ../mbrtoc32.c: 40: if(!ps) + ldw x, (0x0f, sp) + jrne 00102$ +; ../mbrtoc32.c: 41: ps = &sps; + ldw x, #(_mbrtoc32_sps_65536_16 + 0) + ldw (0x0f, sp), x +00102$: +; ../mbrtoc32.c: 43: if(!pc32) + ldw x, (0x09, sp) + jrne 00104$ +; ../mbrtoc32.c: 44: return(mbrtowc(0, s, n, ps)); + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + clrw x + pushw x + call _mbrtowc + addw sp, #8 + jra 00107$ +00104$: +; ../mbrtoc32.c: 46: ret = mbrtowc(&wc, s, n, ps); + ldw x, sp + incw x + exgw x, y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + pushw y + call _mbrtowc + addw sp, #8 +; ../mbrtoc32.c: 48: if(ret <= MB_LEN_MAX) + ldw (0x05, sp), x + cpw x, #0x0004 + jrugt 00106$ +; ../mbrtoc32.c: 49: *pc32 = wc; + ldw x, (0x09, sp) + ldw y, (0x03, sp) + ldw (0x2, x), y + ldw y, (0x01, sp) + ldw (x), y +00106$: +; ../mbrtoc32.c: 51: return(ret); + ldw x, (0x05, sp) +00107$: +; ../mbrtoc32.c: 52: } + addw sp, #6 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mbrtoc32.lst b/device/lib/stm8/mbrtoc32.lst new file mode 100644 index 0000000..672f9f9 --- /dev/null +++ b/device/lib/stm8/mbrtoc32.lst @@ -0,0 +1,114 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mbrtoc32 + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mbrtowc + 12 .globl _mbrtoc32 + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 000000 17 _mbrtoc32_sps_65536_16: + 000000 18 .ds 3 + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../mbrtoc32.c: 34: size_t mbrtoc32(char32_t *restrict pc32, const char *restrict s, size_t n, mbstate_t *restrict ps) + 53 ; ----------------------------------------- + 54 ; function mbrtoc32 + 55 ; ----------------------------------------- + 000000 56 _mbrtoc32: + 000000 52 06 [ 2] 57 sub sp, #6 + 58 ; ../mbrtoc32.c: 40: if(!ps) + 000002 1E 0F [ 2] 59 ldw x, (0x0f, sp) + 000004 26 05 [ 1] 60 jrne 00102$ + 61 ; ../mbrtoc32.c: 41: ps = &sps; + 000006 AEr00r00 [ 2] 62 ldw x, #(_mbrtoc32_sps_65536_16 + 0) + 000009 1F 0F [ 2] 63 ldw (0x0f, sp), x + 00000B 64 00102$: + 65 ; ../mbrtoc32.c: 43: if(!pc32) + 00000B 1E 09 [ 2] 66 ldw x, (0x09, sp) + 00000D 26 12 [ 1] 67 jrne 00104$ + 68 ; ../mbrtoc32.c: 44: return(mbrtowc(0, s, n, ps)); + 00000F 1E 0F [ 2] 69 ldw x, (0x0f, sp) + 000011 89 [ 2] 70 pushw x + 000012 1E 0F [ 2] 71 ldw x, (0x0f, sp) + 000014 89 [ 2] 72 pushw x + 000015 1E 0F [ 2] 73 ldw x, (0x0f, sp) + 000017 89 [ 2] 74 pushw x + 000018 5F [ 1] 75 clrw x + 000019 89 [ 2] 76 pushw x + 00001A CDr00r00 [ 4] 77 call _mbrtowc + 00001D 5B 08 [ 2] 78 addw sp, #8 + 00001F 20 25 [ 2] 79 jra 00107$ + 000021 80 00104$: + 81 ; ../mbrtoc32.c: 46: ret = mbrtowc(&wc, s, n, ps); + 000021 96 [ 1] 82 ldw x, sp + 000022 5C [ 1] 83 incw x + 000023 51 [ 1] 84 exgw x, y + 000024 1E 0F [ 2] 85 ldw x, (0x0f, sp) + 000026 89 [ 2] 86 pushw x + 000027 1E 0F [ 2] 87 ldw x, (0x0f, sp) + 000029 89 [ 2] 88 pushw x + 00002A 1E 0F [ 2] 89 ldw x, (0x0f, sp) + 00002C 89 [ 2] 90 pushw x + 00002D 90 89 [ 2] 91 pushw y + 00002F CDr00r00 [ 4] 92 call _mbrtowc + 000032 5B 08 [ 2] 93 addw sp, #8 + 94 ; ../mbrtoc32.c: 48: if(ret <= MB_LEN_MAX) + 000034 1F 05 [ 2] 95 ldw (0x05, sp), x + 000036 A3 00 04 [ 2] 96 cpw x, #0x0004 + 000039 22 09 [ 1] 97 jrugt 00106$ + 98 ; ../mbrtoc32.c: 49: *pc32 = wc; + 00003B 1E 09 [ 2] 99 ldw x, (0x09, sp) + 00003D 16 03 [ 2] 100 ldw y, (0x03, sp) + 00003F EF 02 [ 2] 101 ldw (0x2, x), y + 000041 16 01 [ 2] 102 ldw y, (0x01, sp) + 000043 FF [ 2] 103 ldw (x), y + 000044 104 00106$: + 105 ; ../mbrtoc32.c: 51: return(ret); + 000044 1E 05 [ 2] 106 ldw x, (0x05, sp) + 000046 107 00107$: + 108 ; ../mbrtoc32.c: 52: } + 000046 5B 06 [ 2] 109 addw sp, #6 + 000048 81 [ 4] 110 ret + 111 .area CODE + 112 .area CONST + 113 .area INITIALIZER + 114 .area CABS (ABS) diff --git a/device/lib/stm8/mbrtoc32.rel b/device/lib/stm8/mbrtoc32.rel new file mode 100644 index 0000000..26df1c3 --- /dev/null +++ b/device/lib/stm8/mbrtoc32.rel @@ -0,0 +1,48 @@ +XH3 +H B areas 3 global symbols +M mbrtoc32 +O -mstm8 +S _mbrtowc Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 3 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 49 flags 0 addr 0 +S _mbrtoc32 Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 06 1E 0F 26 05 AE 00 00 1F 0F +R 00 00 00 09 00 0A 00 01 +T 00 00 0B +R 00 00 00 09 +T 00 00 0B 1E 09 26 12 1E 0F 89 1E 0F 89 1E 0F 89 +R 00 00 00 09 +T 00 00 18 5F 89 CD 00 00 5B 08 20 25 +R 00 00 00 09 02 06 00 00 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 96 5C 51 1E 0F 89 1E 0F 89 1E 0F 89 90 +R 00 00 00 09 +T 00 00 2E 89 CD 00 00 5B 08 1F 05 A3 00 04 22 09 +R 00 00 00 09 02 05 00 00 +T 00 00 3B 1E 09 16 03 EF 02 16 01 FF +R 00 00 00 09 +T 00 00 44 +R 00 00 00 09 +T 00 00 44 1E 05 +R 00 00 00 09 +T 00 00 46 +R 00 00 00 09 +T 00 00 46 5B 06 81 +R 00 00 00 09 diff --git a/device/lib/stm8/mbrtoc32.sym b/device/lib/stm8/mbrtoc32.sym new file mode 100644 index 0000000..4af6d18 --- /dev/null +++ b/device/lib/stm8/mbrtoc32.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _mbrtoc32 000000 GR + 1 _mbrtoc32_sps_65536_16 000000 R + _mbrtowc ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 3 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 49 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mbrtowc.asm b/device/lib/stm8/mbrtowc.asm new file mode 100644 index 0000000..2cc00b1 --- /dev/null +++ b/device/lib/stm8/mbrtowc.asm @@ -0,0 +1,407 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mbrtowc + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mbrtowc +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +_mbrtowc_sps_65536_10: + .ds 3 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mbrtowc.c: 32: size_t mbrtowc(wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps) +; ----------------------------------------- +; function mbrtowc +; ----------------------------------------- +_mbrtowc: + sub sp, #17 +; ../mbrtowc.c: 41: if(!s) + ldw x, (0x16, sp) + jrne 00102$ +; ../mbrtowc.c: 42: return(mbrtowc(0, "", 1, ps)); + ldw x, (0x1a, sp) + pushw x + push #0x01 + push #0x00 + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + clrw x + pushw x + callr _mbrtowc + addw sp, #8 + jp 00145$ +00102$: +; ../mbrtowc.c: 43: if(!n) + ldw x, (0x18, sp) + jrne 00280$ + jp 00128$ +00280$: +; ../mbrtowc.c: 45: if(!ps) + ldw x, (0x1a, sp) + jrne 00106$ +; ../mbrtowc.c: 47: ps = &sps; + ldw x, #(_mbrtowc_sps_65536_10 + 0) + ldw (0x1a, sp), x +00106$: +; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++) + ldw x, sp + addw x, #3 + ldw (0x07, sp), x + ldw y, (0x1a, sp) + ldw (0x0f, sp), y + ldw (0x0d, sp), y + clr (0x11, sp) +00131$: + clrw x + ld a, (0x11, sp) + ld xl, a + addw x, (0x0d, sp) + ld a, (x) + jreq 00174$ + push a + ld a, (0x12, sp) + cp a, #0x03 + pop a + jrnc 00174$ +; ../mbrtowc.c: 51: mbseq[i] = ps->c[i]; + clrw x + exg a, xl + ld a, (0x11, sp) + exg a, xl + addw x, (0x07, sp) + ld (x), a +; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++) + inc (0x11, sp) + jra 00131$ +00174$: + ld a, (0x11, sp) + ld (0x09, sp), a +; ../mbrtowc.c: 53: seqlen = 1; + ld a, #0x01 + ld (0x0a, sp), a +; ../mbrtowc.c: 54: first_byte = ps->c[0] ? ps->c[0] : *s; + ldw x, (0x1a, sp) + ld a, (x) + ldw y, (0x16, sp) + ldw (0x0b, sp), y + tnz a + jrne 00148$ + ldw x, (0x0b, sp) + ld a, (x) +00148$: +; ../mbrtowc.c: 56: if(first_byte & 0x80) + ld (0x11, sp), a + jrpl 00112$ +; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen)) + ld a, #0x01 + ld (0x0d, sp), a +00108$: + ldw x, #0x0080 + ld a, (0x0d, sp) + jreq 00287$ +00286$: + sraw x + dec a + jrne 00286$ +00287$: + ld a, (0x11, sp) + ld (0x02, sp), a + clr (0x01, sp) +; ../mbrtowc.c: 59: seqlen++; + ld a, (0x0d, sp) + inc a + ld (0x0e, sp), a +; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen)) + ld a, xl + and a, (0x02, sp) + rlwa x + and a, (0x01, sp) + ld xh, a + tnzw x + jreq 00175$ +; ../mbrtowc.c: 59: seqlen++; + ld a, (0x0e, sp) + ld (0x0d, sp), a + jra 00108$ +00175$: + ld a, (0x0d, sp) + ld (0x0a, sp), a +; ../mbrtowc.c: 60: first_byte &= (0xff >> (seqlen + 1)); + ldw x, #0x00ff + ld a, (0x0e, sp) + jreq 00290$ +00289$: + sraw x + dec a + jrne 00289$ +00290$: + ld a, xl + and a, (0x11, sp) + ld (0x11, sp), a +00112$: +; ../mbrtowc.c: 63: if(seqlen > 4) + ld a, (0x0a, sp) + cp a, #0x04 + jrule 00291$ + jp 00128$ +00291$: +; ../mbrtowc.c: 66: if(i + n < seqlen) // Incomplete multibyte character + ld a, (0x09, sp) + ld (0x0e, sp), a + clr (0x0d, sp) + ldw x, (0x0d, sp) + addw x, (0x18, sp) + ld a, (0x0a, sp) + ld (0x02, sp), a + clr (0x01, sp) + cpw x, (0x01, sp) + jrnc 00164$ +; ../mbrtowc.c: 70: return(-2); + ldw y, (0x0f, sp) + ldw (0x07, sp), y + ldw y, (0x0b, sp) + ldw (0x10, sp), y + ld a, (0x09, sp) + ld (0x0f, sp), a + ldw y, (0x18, sp) + ldw (0x0d, sp), y +00134$: +; ../mbrtowc.c: 68: for(;n-- ; i++) + ldw x, (0x0d, sp) + ldw y, (0x0d, sp) + decw y + ldw (0x0d, sp), y + tnzw x + jreq 00115$ +; ../mbrtowc.c: 69: ps->c[i] = *s++; + clrw x + ld a, (0x0f, sp) + ld xl, a + addw x, (0x07, sp) + ldw y, (0x10, sp) + ld a, (y) + ldw y, (0x10, sp) + incw y + ldw (0x10, sp), y + ld (x), a +; ../mbrtowc.c: 68: for(;n-- ; i++) + inc (0x0f, sp) + jra 00134$ +00115$: +; ../mbrtowc.c: 70: return(-2); + ldw x, #0xfffe + jp 00145$ +; ../mbrtowc.c: 73: for(j = 0; j < i; j++) +00164$: + clr a +00137$: + cp a, (0x09, sp) + jrnc 00118$ +; ../mbrtowc.c: 74: ps->c[j] = 0; + clrw x + ld xl, a + addw x, (0x0f, sp) + clr (x) +; ../mbrtowc.c: 73: for(j = 0; j < i; j++) + inc a + jra 00137$ +00118$: +; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++) + ldw x, #0x0001 + ldw (0x18, sp), x + tnz (0x09, sp) + jreq 00149$ + ldw x, (0x0d, sp) + .byte 0xc5 +00149$: + clrw x + incw x +00150$: + exg a, xl + ld (0x10, sp), a + exg a, xl + ldw y, (0x07, sp) + ldw (0x01, sp), y + ldw y, (0x0b, sp) + ldw x, #0x0001 + ldw (0x0e, sp), x +00140$: + ld a, (0x10, sp) + cp a, (0x0a, sp) + jrnc 00121$ +; ../mbrtowc.c: 78: mbseq[i] = *s++; + clrw x + ld a, (0x10, sp) + ld xl, a + addw x, (0x01, sp) + ld a, (y) + incw y + ld (x), a +; ../mbrtowc.c: 79: if((mbseq[i] & 0xc0) != 0x80) + ld (0x0d, sp), a + clr (0x0c, sp) + ld a, (0x0d, sp) + and a, #0xc0 + ld xl, a + clr a + ld xh, a + cpw x, #0x0080 + jreq 00299$ + jp 00128$ +00299$: +; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++) + inc (0x10, sp) + ldw x, (0x0e, sp) + incw x + ldw (0x0e, sp), x + ldw (0x18, sp), x + jra 00140$ +00121$: +; ../mbrtowc.c: 83: codepoint = first_byte; + clrw x + ld a, (0x11, sp) + ld xl, a + clrw y + ldw (0x0f, sp), x + ldw (0x0d, sp), y +; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--) + ldw x, (0x07, sp) + incw x + ld a, (0x0a, sp) + dec a + ld (0x11, sp), a + ldw (0x0b, sp), x +00143$: + tnz (0x11, sp) + jreq 00122$ +; ../mbrtowc.c: 87: codepoint <<= 6; + ld a, #0x06 +00302$: + sll (0x10, sp) + rlc (0x0f, sp) + rlc (0x0e, sp) + rlc (0x0d, sp) + dec a + jrne 00302$ +; ../mbrtowc.c: 88: codepoint |= (*s & 0x3f); + ldw x, (0x0b, sp) + ld a, (x) + and a, #0x3f + ld xl, a + clr a + ld xh, a + rlc a + clr a + sbc a, #0x00 + ld yl, a + or a, (0x0d, sp) + ld yh, a + ld a, xl + or a, (0x10, sp) + rlwa x + or a, (0x0f, sp) + ld xh, a + ld a, yl + or a, (0x0e, sp) + ld yl, a + ldw (0x0f, sp), x + ldw (0x0d, sp), y +; ../mbrtowc.c: 89: s++; + ldw x, (0x0b, sp) + incw x + ldw (0x0b, sp), x +; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--) + dec (0x11, sp) + jra 00143$ +00122$: +; ../mbrtowc.c: 92: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate. + ldw x, (0x0f, sp) + cpw x, #0xd800 + ld a, (0x0e, sp) + sbc a, #0x00 + ld a, (0x0d, sp) + sbc a, #0x00 + jrc 00124$ + ldw x, #0xdfff + cpw x, (0x0f, sp) + clr a + sbc a, (0x0e, sp) + clr a + sbc a, (0x0d, sp) + jrc 00124$ +; ../mbrtowc.c: 93: return(-1); + clrw x + decw x + jra 00145$ +00124$: +; ../mbrtowc.c: 95: if(pwc) +; ../mbrtowc.c: 96: *pwc = codepoint; + ldw x, (0x14, sp) + jreq 00127$ + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +00127$: +; ../mbrtowc.c: 97: return(n); + ldw x, (0x18, sp) + jra 00145$ +; ../mbrtowc.c: 99: eilseq: +00128$: +; ../mbrtowc.c: 100: errno = EILSEQ; + ldw x, #0x0054 + ldw _errno+0, x +; ../mbrtowc.c: 101: return(-1); + clrw x + decw x +00145$: +; ../mbrtowc.c: 102: } + addw sp, #17 + ret + .area CODE + .area CONST + .area CONST +___str_0: + .db 0x00 + .area CODE + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mbrtowc.lst b/device/lib/stm8/mbrtowc.lst new file mode 100644 index 0000000..539b93e --- /dev/null +++ b/device/lib/stm8/mbrtowc.lst @@ -0,0 +1,407 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mbrtowc + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mbrtowc + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 000000 16 _mbrtowc_sps_65536_10: + 000000 17 .ds 3 + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../mbrtowc.c: 32: size_t mbrtowc(wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps) + 52 ; ----------------------------------------- + 53 ; function mbrtowc + 54 ; ----------------------------------------- + 000000 55 _mbrtowc: + 000000 52 11 [ 2] 56 sub sp, #17 + 57 ; ../mbrtowc.c: 41: if(!s) + 000002 1E 16 [ 2] 58 ldw x, (0x16, sp) + 000004 26 14 [ 1] 59 jrne 00102$ + 60 ; ../mbrtowc.c: 42: return(mbrtowc(0, "", 1, ps)); + 000006 1E 1A [ 2] 61 ldw x, (0x1a, sp) + 000008 89 [ 2] 62 pushw x + 000009 4B 01 [ 1] 63 push #0x01 + 00000B 4B 00 [ 1] 64 push #0x00 + 00000D 4Br00 [ 1] 65 push #<(___str_0 + 0) + 00000F 4Bs00 [ 1] 66 push #((___str_0 + 0) >> 8) + 000011 5F [ 1] 67 clrw x + 000012 89 [ 2] 68 pushw x + 000013 AD EB [ 4] 69 callr _mbrtowc + 000015 5B 08 [ 2] 70 addw sp, #8 + 000017 CCr01rE6 [ 2] 71 jp 00145$ + 00001A 72 00102$: + 73 ; ../mbrtowc.c: 43: if(!n) + 00001A 1E 18 [ 2] 74 ldw x, (0x18, sp) + 00001C 26 03 [ 1] 75 jrne 00280$ + 00001E CCr01rDE [ 2] 76 jp 00128$ + 000021 77 00280$: + 78 ; ../mbrtowc.c: 45: if(!ps) + 000021 1E 1A [ 2] 79 ldw x, (0x1a, sp) + 000023 26 05 [ 1] 80 jrne 00106$ + 81 ; ../mbrtowc.c: 47: ps = &sps; + 000025 AEr00r00 [ 2] 82 ldw x, #(_mbrtowc_sps_65536_10 + 0) + 000028 1F 1A [ 2] 83 ldw (0x1a, sp), x + 00002A 84 00106$: + 85 ; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++) + 00002A 96 [ 1] 86 ldw x, sp + 00002B 1C 00 03 [ 2] 87 addw x, #3 + 00002E 1F 07 [ 2] 88 ldw (0x07, sp), x + 000030 16 1A [ 2] 89 ldw y, (0x1a, sp) + 000032 17 0F [ 2] 90 ldw (0x0f, sp), y + 000034 17 0D [ 2] 91 ldw (0x0d, sp), y + 000036 0F 11 [ 1] 92 clr (0x11, sp) + 000038 93 00131$: + 000038 5F [ 1] 94 clrw x + 000039 7B 11 [ 1] 95 ld a, (0x11, sp) + 00003B 97 [ 1] 96 ld xl, a + 00003C 72 FB 0D [ 2] 97 addw x, (0x0d, sp) + 00003F F6 [ 1] 98 ld a, (x) + 000040 27 15 [ 1] 99 jreq 00174$ + 000042 88 [ 1] 100 push a + 000043 7B 12 [ 1] 101 ld a, (0x12, sp) + 000045 A1 03 [ 1] 102 cp a, #0x03 + 000047 84 [ 1] 103 pop a + 000048 24 0D [ 1] 104 jrnc 00174$ + 105 ; ../mbrtowc.c: 51: mbseq[i] = ps->c[i]; + 00004A 5F [ 1] 106 clrw x + 00004B 41 [ 1] 107 exg a, xl + 00004C 7B 11 [ 1] 108 ld a, (0x11, sp) + 00004E 41 [ 1] 109 exg a, xl + 00004F 72 FB 07 [ 2] 110 addw x, (0x07, sp) + 000052 F7 [ 1] 111 ld (x), a + 112 ; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++) + 000053 0C 11 [ 1] 113 inc (0x11, sp) + 000055 20 E1 [ 2] 114 jra 00131$ + 000057 115 00174$: + 000057 7B 11 [ 1] 116 ld a, (0x11, sp) + 000059 6B 09 [ 1] 117 ld (0x09, sp), a + 118 ; ../mbrtowc.c: 53: seqlen = 1; + 00005B A6 01 [ 1] 119 ld a, #0x01 + 00005D 6B 0A [ 1] 120 ld (0x0a, sp), a + 121 ; ../mbrtowc.c: 54: first_byte = ps->c[0] ? ps->c[0] : *s; + 00005F 1E 1A [ 2] 122 ldw x, (0x1a, sp) + 000061 F6 [ 1] 123 ld a, (x) + 000062 16 16 [ 2] 124 ldw y, (0x16, sp) + 000064 17 0B [ 2] 125 ldw (0x0b, sp), y + 000066 4D [ 1] 126 tnz a + 000067 26 03 [ 1] 127 jrne 00148$ + 000069 1E 0B [ 2] 128 ldw x, (0x0b, sp) + 00006B F6 [ 1] 129 ld a, (x) + 00006C 130 00148$: + 131 ; ../mbrtowc.c: 56: if(first_byte & 0x80) + 00006C 6B 11 [ 1] 132 ld (0x11, sp), a + 00006E 2A 3E [ 1] 133 jrpl 00112$ + 134 ; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen)) + 000070 A6 01 [ 1] 135 ld a, #0x01 + 000072 6B 0D [ 1] 136 ld (0x0d, sp), a + 000074 137 00108$: + 000074 AE 00 80 [ 2] 138 ldw x, #0x0080 + 000077 7B 0D [ 1] 139 ld a, (0x0d, sp) + 000079 27 04 [ 1] 140 jreq 00287$ + 00007B 141 00286$: + 00007B 57 [ 2] 142 sraw x + 00007C 4A [ 1] 143 dec a + 00007D 26 FC [ 1] 144 jrne 00286$ + 00007F 145 00287$: + 00007F 7B 11 [ 1] 146 ld a, (0x11, sp) + 000081 6B 02 [ 1] 147 ld (0x02, sp), a + 000083 0F 01 [ 1] 148 clr (0x01, sp) + 149 ; ../mbrtowc.c: 59: seqlen++; + 000085 7B 0D [ 1] 150 ld a, (0x0d, sp) + 000087 4C [ 1] 151 inc a + 000088 6B 0E [ 1] 152 ld (0x0e, sp), a + 153 ; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen)) + 00008A 9F [ 1] 154 ld a, xl + 00008B 14 02 [ 1] 155 and a, (0x02, sp) + 00008D 02 [ 1] 156 rlwa x + 00008E 14 01 [ 1] 157 and a, (0x01, sp) + 000090 95 [ 1] 158 ld xh, a + 000091 5D [ 2] 159 tnzw x + 000092 27 06 [ 1] 160 jreq 00175$ + 161 ; ../mbrtowc.c: 59: seqlen++; + 000094 7B 0E [ 1] 162 ld a, (0x0e, sp) + 000096 6B 0D [ 1] 163 ld (0x0d, sp), a + 000098 20 DA [ 2] 164 jra 00108$ + 00009A 165 00175$: + 00009A 7B 0D [ 1] 166 ld a, (0x0d, sp) + 00009C 6B 0A [ 1] 167 ld (0x0a, sp), a + 168 ; ../mbrtowc.c: 60: first_byte &= (0xff >> (seqlen + 1)); + 00009E AE 00 FF [ 2] 169 ldw x, #0x00ff + 0000A1 7B 0E [ 1] 170 ld a, (0x0e, sp) + 0000A3 27 04 [ 1] 171 jreq 00290$ + 0000A5 172 00289$: + 0000A5 57 [ 2] 173 sraw x + 0000A6 4A [ 1] 174 dec a + 0000A7 26 FC [ 1] 175 jrne 00289$ + 0000A9 176 00290$: + 0000A9 9F [ 1] 177 ld a, xl + 0000AA 14 11 [ 1] 178 and a, (0x11, sp) + 0000AC 6B 11 [ 1] 179 ld (0x11, sp), a + 0000AE 180 00112$: + 181 ; ../mbrtowc.c: 63: if(seqlen > 4) + 0000AE 7B 0A [ 1] 182 ld a, (0x0a, sp) + 0000B0 A1 04 [ 1] 183 cp a, #0x04 + 0000B2 23 03 [ 2] 184 jrule 00291$ + 0000B4 CCr01rDE [ 2] 185 jp 00128$ + 0000B7 186 00291$: + 187 ; ../mbrtowc.c: 66: if(i + n < seqlen) // Incomplete multibyte character + 0000B7 7B 09 [ 1] 188 ld a, (0x09, sp) + 0000B9 6B 0E [ 1] 189 ld (0x0e, sp), a + 0000BB 0F 0D [ 1] 190 clr (0x0d, sp) + 0000BD 1E 0D [ 2] 191 ldw x, (0x0d, sp) + 0000BF 72 FB 18 [ 2] 192 addw x, (0x18, sp) + 0000C2 7B 0A [ 1] 193 ld a, (0x0a, sp) + 0000C4 6B 02 [ 1] 194 ld (0x02, sp), a + 0000C6 0F 01 [ 1] 195 clr (0x01, sp) + 0000C8 13 01 [ 2] 196 cpw x, (0x01, sp) + 0000CA 24 37 [ 1] 197 jrnc 00164$ + 198 ; ../mbrtowc.c: 70: return(-2); + 0000CC 16 0F [ 2] 199 ldw y, (0x0f, sp) + 0000CE 17 07 [ 2] 200 ldw (0x07, sp), y + 0000D0 16 0B [ 2] 201 ldw y, (0x0b, sp) + 0000D2 17 10 [ 2] 202 ldw (0x10, sp), y + 0000D4 7B 09 [ 1] 203 ld a, (0x09, sp) + 0000D6 6B 0F [ 1] 204 ld (0x0f, sp), a + 0000D8 16 18 [ 2] 205 ldw y, (0x18, sp) + 0000DA 17 0D [ 2] 206 ldw (0x0d, sp), y + 0000DC 207 00134$: + 208 ; ../mbrtowc.c: 68: for(;n-- ; i++) + 0000DC 1E 0D [ 2] 209 ldw x, (0x0d, sp) + 0000DE 16 0D [ 2] 210 ldw y, (0x0d, sp) + 0000E0 90 5A [ 2] 211 decw y + 0000E2 17 0D [ 2] 212 ldw (0x0d, sp), y + 0000E4 5D [ 2] 213 tnzw x + 0000E5 27 16 [ 1] 214 jreq 00115$ + 215 ; ../mbrtowc.c: 69: ps->c[i] = *s++; + 0000E7 5F [ 1] 216 clrw x + 0000E8 7B 0F [ 1] 217 ld a, (0x0f, sp) + 0000EA 97 [ 1] 218 ld xl, a + 0000EB 72 FB 07 [ 2] 219 addw x, (0x07, sp) + 0000EE 16 10 [ 2] 220 ldw y, (0x10, sp) + 0000F0 90 F6 [ 1] 221 ld a, (y) + 0000F2 16 10 [ 2] 222 ldw y, (0x10, sp) + 0000F4 90 5C [ 1] 223 incw y + 0000F6 17 10 [ 2] 224 ldw (0x10, sp), y + 0000F8 F7 [ 1] 225 ld (x), a + 226 ; ../mbrtowc.c: 68: for(;n-- ; i++) + 0000F9 0C 0F [ 1] 227 inc (0x0f, sp) + 0000FB 20 DF [ 2] 228 jra 00134$ + 0000FD 229 00115$: + 230 ; ../mbrtowc.c: 70: return(-2); + 0000FD AE FF FE [ 2] 231 ldw x, #0xfffe + 000100 CCr01rE6 [ 2] 232 jp 00145$ + 233 ; ../mbrtowc.c: 73: for(j = 0; j < i; j++) + 000103 234 00164$: + 000103 4F [ 1] 235 clr a + 000104 236 00137$: + 000104 11 09 [ 1] 237 cp a, (0x09, sp) + 000106 24 09 [ 1] 238 jrnc 00118$ + 239 ; ../mbrtowc.c: 74: ps->c[j] = 0; + 000108 5F [ 1] 240 clrw x + 000109 97 [ 1] 241 ld xl, a + 00010A 72 FB 0F [ 2] 242 addw x, (0x0f, sp) + 00010D 7F [ 1] 243 clr (x) + 244 ; ../mbrtowc.c: 73: for(j = 0; j < i; j++) + 00010E 4C [ 1] 245 inc a + 00010F 20 F3 [ 2] 246 jra 00137$ + 000111 247 00118$: + 248 ; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++) + 000111 AE 00 01 [ 2] 249 ldw x, #0x0001 + 000114 1F 18 [ 2] 250 ldw (0x18, sp), x + 000116 0D 09 [ 1] 251 tnz (0x09, sp) + 000118 27 03 [ 1] 252 jreq 00149$ + 00011A 1E 0D [ 2] 253 ldw x, (0x0d, sp) + 00011C C5 254 .byte 0xc5 + 00011D 255 00149$: + 00011D 5F [ 1] 256 clrw x + 00011E 5C [ 1] 257 incw x + 00011F 258 00150$: + 00011F 41 [ 1] 259 exg a, xl + 000120 6B 10 [ 1] 260 ld (0x10, sp), a + 000122 41 [ 1] 261 exg a, xl + 000123 16 07 [ 2] 262 ldw y, (0x07, sp) + 000125 17 01 [ 2] 263 ldw (0x01, sp), y + 000127 16 0B [ 2] 264 ldw y, (0x0b, sp) + 000129 AE 00 01 [ 2] 265 ldw x, #0x0001 + 00012C 1F 0E [ 2] 266 ldw (0x0e, sp), x + 00012E 267 00140$: + 00012E 7B 10 [ 1] 268 ld a, (0x10, sp) + 000130 11 0A [ 1] 269 cp a, (0x0a, sp) + 000132 24 2A [ 1] 270 jrnc 00121$ + 271 ; ../mbrtowc.c: 78: mbseq[i] = *s++; + 000134 5F [ 1] 272 clrw x + 000135 7B 10 [ 1] 273 ld a, (0x10, sp) + 000137 97 [ 1] 274 ld xl, a + 000138 72 FB 01 [ 2] 275 addw x, (0x01, sp) + 00013B 90 F6 [ 1] 276 ld a, (y) + 00013D 90 5C [ 1] 277 incw y + 00013F F7 [ 1] 278 ld (x), a + 279 ; ../mbrtowc.c: 79: if((mbseq[i] & 0xc0) != 0x80) + 000140 6B 0D [ 1] 280 ld (0x0d, sp), a + 000142 0F 0C [ 1] 281 clr (0x0c, sp) + 000144 7B 0D [ 1] 282 ld a, (0x0d, sp) + 000146 A4 C0 [ 1] 283 and a, #0xc0 + 000148 97 [ 1] 284 ld xl, a + 000149 4F [ 1] 285 clr a + 00014A 95 [ 1] 286 ld xh, a + 00014B A3 00 80 [ 2] 287 cpw x, #0x0080 + 00014E 27 03 [ 1] 288 jreq 00299$ + 000150 CCr01rDE [ 2] 289 jp 00128$ + 000153 290 00299$: + 291 ; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++) + 000153 0C 10 [ 1] 292 inc (0x10, sp) + 000155 1E 0E [ 2] 293 ldw x, (0x0e, sp) + 000157 5C [ 1] 294 incw x + 000158 1F 0E [ 2] 295 ldw (0x0e, sp), x + 00015A 1F 18 [ 2] 296 ldw (0x18, sp), x + 00015C 20 D0 [ 2] 297 jra 00140$ + 00015E 298 00121$: + 299 ; ../mbrtowc.c: 83: codepoint = first_byte; + 00015E 5F [ 1] 300 clrw x + 00015F 7B 11 [ 1] 301 ld a, (0x11, sp) + 000161 97 [ 1] 302 ld xl, a + 000162 90 5F [ 1] 303 clrw y + 000164 1F 0F [ 2] 304 ldw (0x0f, sp), x + 000166 17 0D [ 2] 305 ldw (0x0d, sp), y + 306 ; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--) + 000168 1E 07 [ 2] 307 ldw x, (0x07, sp) + 00016A 5C [ 1] 308 incw x + 00016B 7B 0A [ 1] 309 ld a, (0x0a, sp) + 00016D 4A [ 1] 310 dec a + 00016E 6B 11 [ 1] 311 ld (0x11, sp), a + 000170 1F 0B [ 2] 312 ldw (0x0b, sp), x + 000172 313 00143$: + 000172 0D 11 [ 1] 314 tnz (0x11, sp) + 000174 27 39 [ 1] 315 jreq 00122$ + 316 ; ../mbrtowc.c: 87: codepoint <<= 6; + 000176 A6 06 [ 1] 317 ld a, #0x06 + 000178 318 00302$: + 000178 08 10 [ 1] 319 sll (0x10, sp) + 00017A 09 0F [ 1] 320 rlc (0x0f, sp) + 00017C 09 0E [ 1] 321 rlc (0x0e, sp) + 00017E 09 0D [ 1] 322 rlc (0x0d, sp) + 000180 4A [ 1] 323 dec a + 000181 26 F5 [ 1] 324 jrne 00302$ + 325 ; ../mbrtowc.c: 88: codepoint |= (*s & 0x3f); + 000183 1E 0B [ 2] 326 ldw x, (0x0b, sp) + 000185 F6 [ 1] 327 ld a, (x) + 000186 A4 3F [ 1] 328 and a, #0x3f + 000188 97 [ 1] 329 ld xl, a + 000189 4F [ 1] 330 clr a + 00018A 95 [ 1] 331 ld xh, a + 00018B 49 [ 1] 332 rlc a + 00018C 4F [ 1] 333 clr a + 00018D A2 00 [ 1] 334 sbc a, #0x00 + 00018F 90 97 [ 1] 335 ld yl, a + 000191 1A 0D [ 1] 336 or a, (0x0d, sp) + 000193 90 95 [ 1] 337 ld yh, a + 000195 9F [ 1] 338 ld a, xl + 000196 1A 10 [ 1] 339 or a, (0x10, sp) + 000198 02 [ 1] 340 rlwa x + 000199 1A 0F [ 1] 341 or a, (0x0f, sp) + 00019B 95 [ 1] 342 ld xh, a + 00019C 90 9F [ 1] 343 ld a, yl + 00019E 1A 0E [ 1] 344 or a, (0x0e, sp) + 0001A0 90 97 [ 1] 345 ld yl, a + 0001A2 1F 0F [ 2] 346 ldw (0x0f, sp), x + 0001A4 17 0D [ 2] 347 ldw (0x0d, sp), y + 348 ; ../mbrtowc.c: 89: s++; + 0001A6 1E 0B [ 2] 349 ldw x, (0x0b, sp) + 0001A8 5C [ 1] 350 incw x + 0001A9 1F 0B [ 2] 351 ldw (0x0b, sp), x + 352 ; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--) + 0001AB 0A 11 [ 1] 353 dec (0x11, sp) + 0001AD 20 C3 [ 2] 354 jra 00143$ + 0001AF 355 00122$: + 356 ; ../mbrtowc.c: 92: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate. + 0001AF 1E 0F [ 2] 357 ldw x, (0x0f, sp) + 0001B1 A3 D8 00 [ 2] 358 cpw x, #0xd800 + 0001B4 7B 0E [ 1] 359 ld a, (0x0e, sp) + 0001B6 A2 00 [ 1] 360 sbc a, #0x00 + 0001B8 7B 0D [ 1] 361 ld a, (0x0d, sp) + 0001BA A2 00 [ 1] 362 sbc a, #0x00 + 0001BC 25 11 [ 1] 363 jrc 00124$ + 0001BE AE DF FF [ 2] 364 ldw x, #0xdfff + 0001C1 13 0F [ 2] 365 cpw x, (0x0f, sp) + 0001C3 4F [ 1] 366 clr a + 0001C4 12 0E [ 1] 367 sbc a, (0x0e, sp) + 0001C6 4F [ 1] 368 clr a + 0001C7 12 0D [ 1] 369 sbc a, (0x0d, sp) + 0001C9 25 04 [ 1] 370 jrc 00124$ + 371 ; ../mbrtowc.c: 93: return(-1); + 0001CB 5F [ 1] 372 clrw x + 0001CC 5A [ 2] 373 decw x + 0001CD 20 17 [ 2] 374 jra 00145$ + 0001CF 375 00124$: + 376 ; ../mbrtowc.c: 95: if(pwc) + 377 ; ../mbrtowc.c: 96: *pwc = codepoint; + 0001CF 1E 14 [ 2] 378 ldw x, (0x14, sp) + 0001D1 27 07 [ 1] 379 jreq 00127$ + 0001D3 16 0F [ 2] 380 ldw y, (0x0f, sp) + 0001D5 EF 02 [ 2] 381 ldw (0x2, x), y + 0001D7 16 0D [ 2] 382 ldw y, (0x0d, sp) + 0001D9 FF [ 2] 383 ldw (x), y + 0001DA 384 00127$: + 385 ; ../mbrtowc.c: 97: return(n); + 0001DA 1E 18 [ 2] 386 ldw x, (0x18, sp) + 0001DC 20 08 [ 2] 387 jra 00145$ + 388 ; ../mbrtowc.c: 99: eilseq: + 0001DE 389 00128$: + 390 ; ../mbrtowc.c: 100: errno = EILSEQ; + 0001DE AE 00 54 [ 2] 391 ldw x, #0x0054 + 0001E1 CFu00u00 [ 2] 392 ldw _errno+0, x + 393 ; ../mbrtowc.c: 101: return(-1); + 0001E4 5F [ 1] 394 clrw x + 0001E5 5A [ 2] 395 decw x + 0001E6 396 00145$: + 397 ; ../mbrtowc.c: 102: } + 0001E6 5B 11 [ 2] 398 addw sp, #17 + 0001E8 81 [ 4] 399 ret + 400 .area CODE + 401 .area CONST + 402 .area CONST + 000000 403 ___str_0: + 000000 00 404 .db 0x00 + 405 .area CODE + 406 .area INITIALIZER + 407 .area CABS (ABS) diff --git a/device/lib/stm8/mbrtowc.rel b/device/lib/stm8/mbrtowc.rel new file mode 100644 index 0000000..05f045d --- /dev/null +++ b/device/lib/stm8/mbrtowc.rel @@ -0,0 +1,198 @@ +XH3 +H B areas 3 global symbols +M mbrtowc +O -mstm8 +S _errno Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 3 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 1 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1E9 flags 0 addr 0 +S _mbrtowc Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 11 1E 16 26 14 1E 1A 89 4B 01 4B 00 +R 00 00 00 09 +T 00 00 0D 4B 00 00 00 4B 00 00 00 5F 89 AD EB 5B +R 00 00 00 09 F1 09 04 00 07 F1 81 08 00 07 +T 00 00 16 08 CC 01 E6 +R 00 00 00 09 00 05 00 09 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 1E 18 26 03 CC 01 DE +R 00 00 00 09 00 08 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 1E 1A 26 05 AE 00 00 1F 1A +R 00 00 00 09 00 08 00 01 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 96 1C 00 03 1F 07 16 1A 17 0F 17 0D 0F +R 00 00 00 09 +T 00 00 37 11 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 5F 7B 11 97 72 FB 0D F6 27 15 88 7B 12 +R 00 00 00 09 +T 00 00 45 A1 03 84 24 0D 5F 41 7B 11 41 72 FB 07 +R 00 00 00 09 +T 00 00 52 F7 0C 11 20 E1 +R 00 00 00 09 +T 00 00 57 +R 00 00 00 09 +T 00 00 57 7B 11 6B 09 A6 01 6B 0A 1E 1A F6 16 16 +R 00 00 00 09 +T 00 00 64 17 0B 4D 26 03 1E 0B F6 +R 00 00 00 09 +T 00 00 6C +R 00 00 00 09 +T 00 00 6C 6B 11 2A 3E A6 01 6B 0D +R 00 00 00 09 +T 00 00 74 +R 00 00 00 09 +T 00 00 74 AE 00 80 7B 0D 27 04 +R 00 00 00 09 +T 00 00 7B +R 00 00 00 09 +T 00 00 7B 57 4A 26 FC +R 00 00 00 09 +T 00 00 7F +R 00 00 00 09 +T 00 00 7F 7B 11 6B 02 0F 01 7B 0D 4C 6B 0E 9F 14 +R 00 00 00 09 +T 00 00 8C 02 02 14 01 95 5D 27 06 7B 0E 6B 0D 20 +R 00 00 00 09 +T 00 00 99 DA +R 00 00 00 09 +T 00 00 9A +R 00 00 00 09 +T 00 00 9A 7B 0D 6B 0A AE 00 FF 7B 0E 27 04 +R 00 00 00 09 +T 00 00 A5 +R 00 00 00 09 +T 00 00 A5 57 4A 26 FC +R 00 00 00 09 +T 00 00 A9 +R 00 00 00 09 +T 00 00 A9 9F 14 11 6B 11 +R 00 00 00 09 +T 00 00 AE +R 00 00 00 09 +T 00 00 AE 7B 0A A1 04 23 03 CC 01 DE +R 00 00 00 09 00 0A 00 09 +T 00 00 B7 +R 00 00 00 09 +T 00 00 B7 7B 09 6B 0E 0F 0D 1E 0D 72 FB 18 7B 0A +R 00 00 00 09 +T 00 00 C4 6B 02 0F 01 13 01 24 37 16 0F 17 07 16 +R 00 00 00 09 +T 00 00 D1 0B 17 10 7B 09 6B 0F 16 18 17 0D +R 00 00 00 09 +T 00 00 DC +R 00 00 00 09 +T 00 00 DC 1E 0D 16 0D 90 5A 17 0D 5D 27 16 5F 7B +R 00 00 00 09 +T 00 00 E9 0F 97 72 FB 07 16 10 90 F6 16 10 90 5C +R 00 00 00 09 +T 00 00 F6 17 10 F7 0C 0F 20 DF +R 00 00 00 09 +T 00 00 FD +R 00 00 00 09 +T 00 00 FD AE FF FE CC 01 E6 +R 00 00 00 09 00 07 00 09 +T 00 01 03 +R 00 00 00 09 +T 00 01 03 4F +R 00 00 00 09 +T 00 01 04 +R 00 00 00 09 +T 00 01 04 11 09 24 09 5F 97 72 FB 0F 7F 4C 20 F3 +R 00 00 00 09 +T 00 01 11 +R 00 00 00 09 +T 00 01 11 AE 00 01 1F 18 0D 09 27 03 1E 0D C5 +R 00 00 00 09 +T 00 01 1D +R 00 00 00 09 +T 00 01 1D 5F 5C +R 00 00 00 09 +T 00 01 1F +R 00 00 00 09 +T 00 01 1F 41 6B 10 41 16 07 17 01 16 0B AE 00 01 +R 00 00 00 09 +T 00 01 2C 1F 0E +R 00 00 00 09 +T 00 01 2E +R 00 00 00 09 +T 00 01 2E 7B 10 11 0A 24 2A 5F 7B 10 97 72 FB 01 +R 00 00 00 09 +T 00 01 3B 90 F6 90 5C F7 6B 0D 0F 0C 7B 0D A4 C0 +R 00 00 00 09 +T 00 01 48 97 4F 95 A3 00 80 27 03 CC 01 DE +R 00 00 00 09 00 0C 00 09 +T 00 01 53 +R 00 00 00 09 +T 00 01 53 0C 10 1E 0E 5C 1F 0E 1F 18 20 D0 +R 00 00 00 09 +T 00 01 5E +R 00 00 00 09 +T 00 01 5E 5F 7B 11 97 90 5F 1F 0F 17 0D 1E 07 5C +R 00 00 00 09 +T 00 01 6B 7B 0A 4A 6B 11 1F 0B +R 00 00 00 09 +T 00 01 72 +R 00 00 00 09 +T 00 01 72 0D 11 27 39 A6 06 +R 00 00 00 09 +T 00 01 78 +R 00 00 00 09 +T 00 01 78 08 10 09 0F 09 0E 09 0D 4A 26 F5 1E 0B +R 00 00 00 09 +T 00 01 85 F6 A4 3F 97 4F 95 49 4F A2 00 90 97 1A +R 00 00 00 09 +T 00 01 92 0D 90 95 9F 1A 10 02 1A 0F 95 90 9F 1A +R 00 00 00 09 +T 00 01 9F 0E 90 97 1F 0F 17 0D 1E 0B 5C 1F 0B 0A +R 00 00 00 09 +T 00 01 AC 11 20 C3 +R 00 00 00 09 +T 00 01 AF +R 00 00 00 09 +T 00 01 AF 1E 0F A3 D8 00 7B 0E A2 00 7B 0D A2 00 +R 00 00 00 09 +T 00 01 BC 25 11 AE DF FF 13 0F 4F 12 0E 4F 12 0D +R 00 00 00 09 +T 00 01 C9 25 04 5F 5A 20 17 +R 00 00 00 09 +T 00 01 CF +R 00 00 00 09 +T 00 01 CF 1E 14 27 07 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 01 DA +R 00 00 00 09 +T 00 01 DA 1E 18 20 08 +R 00 00 00 09 +T 00 01 DE +R 00 00 00 09 +T 00 01 DE AE 00 54 CF 00 00 5F 5A +R 00 00 00 09 12 07 00 00 +T 00 01 E6 +R 00 00 00 09 +T 00 01 E6 5B 11 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 07 +T 00 00 00 00 +R 00 00 00 07 diff --git a/device/lib/stm8/mbrtowc.sym b/device/lib/stm8/mbrtowc.sym new file mode 100644 index 0000000..26035c7 --- /dev/null +++ b/device/lib/stm8/mbrtowc.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 7 ___str_0 000000 R + _errno ****** GX + 9 _mbrtowc 000000 GR + 1 _mbrtowc_sps_65536_10 000000 R + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 3 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 1 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1E9 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mbsinit.asm b/device/lib/stm8/mbsinit.asm new file mode 100644 index 0000000..16d38f0 --- /dev/null +++ b/device/lib/stm8/mbsinit.asm @@ -0,0 +1,77 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mbsinit + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mbsinit +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mbsinit.c: 31: int mbsinit(const mbstate_t *ps) +; ----------------------------------------- +; function mbsinit +; ----------------------------------------- +_mbsinit: +; ../mbsinit.c: 33: return(!ps || !ps->c[0] && !ps->c[1] && !ps->c[2]); + ldw x, (0x03, sp) + jreq 00104$ + ld a, (x) + jrne 00103$ + ldw y, x + ld a, (0x1, y) + jrne 00103$ + ld a, (0x2, x) + jreq 00104$ +00103$: + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../mbsinit.c: 34: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mbsinit.lst b/device/lib/stm8/mbsinit.lst new file mode 100644 index 0000000..4e88ee5 --- /dev/null +++ b/device/lib/stm8/mbsinit.lst @@ -0,0 +1,77 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mbsinit + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mbsinit + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../mbsinit.c: 31: int mbsinit(const mbstate_t *ps) + 50 ; ----------------------------------------- + 51 ; function mbsinit + 52 ; ----------------------------------------- + 000000 53 _mbsinit: + 54 ; ../mbsinit.c: 33: return(!ps || !ps->c[0] && !ps->c[1] && !ps->c[2]); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 000002 27 10 [ 1] 56 jreq 00104$ + 000004 F6 [ 1] 57 ld a, (x) + 000005 26 0B [ 1] 58 jrne 00103$ + 000007 90 93 [ 1] 59 ldw y, x + 000009 90 E6 01 [ 1] 60 ld a, (0x1, y) + 00000C 26 04 [ 1] 61 jrne 00103$ + 00000E E6 02 [ 1] 62 ld a, (0x2, x) + 000010 27 02 [ 1] 63 jreq 00104$ + 000012 64 00103$: + 000012 4F [ 1] 65 clr a + 000013 C5 66 .byte 0xc5 + 000014 67 00104$: + 000014 A6 01 [ 1] 68 ld a, #0x01 + 000016 69 00105$: + 000016 5F [ 1] 70 clrw x + 000017 97 [ 1] 71 ld xl, a + 72 ; ../mbsinit.c: 34: } + 000018 81 [ 4] 73 ret + 74 .area CODE + 75 .area CONST + 76 .area INITIALIZER + 77 .area CABS (ABS) diff --git a/device/lib/stm8/mbsinit.rel b/device/lib/stm8/mbsinit.rel new file mode 100644 index 0000000..42e1313 --- /dev/null +++ b/device/lib/stm8/mbsinit.rel @@ -0,0 +1,35 @@ +XH3 +H B areas 2 global symbols +M mbsinit +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 19 flags 0 addr 0 +S _mbsinit Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 27 10 F6 26 0B 90 93 90 E6 01 26 +R 00 00 00 09 +T 00 00 0D 04 E6 02 27 02 +R 00 00 00 09 +T 00 00 12 +R 00 00 00 09 +T 00 00 12 4F C5 +R 00 00 00 09 +T 00 00 14 +R 00 00 00 09 +T 00 00 14 A6 01 +R 00 00 00 09 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 5F 97 81 +R 00 00 00 09 diff --git a/device/lib/stm8/mbsinit.sym b/device/lib/stm8/mbsinit.sym new file mode 100644 index 0000000..94e8166 --- /dev/null +++ b/device/lib/stm8/mbsinit.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _mbsinit 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 19 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mbstoc16s.asm b/device/lib/stm8/mbstoc16s.asm new file mode 100644 index 0000000..3019c43 --- /dev/null +++ b/device/lib/stm8/mbstoc16s.asm @@ -0,0 +1,196 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mbstoc16s + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mbtowc + .globl ___mbstoc16s +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mbstoc16s.c: 44: size_t __mbstoc16s(char16_t *restrict c16s, const char *restrict s, size_t n) +; ----------------------------------------- +; function __mbstoc16s +; ----------------------------------------- +___mbstoc16s: + sub sp, #17 +; ../mbstoc16s.c: 46: size_t m = 0; + clrw x + ldw (0x09, sp), x +; ../mbstoc16s.c: 85: return(m); +00116$: +; ../mbstoc16s.c: 53: l = mbtowc(&codepoint, s, MB_LEN_MAX); + ldw x, sp + addw x, #5 + push #0x04 + push #0x00 + ldw y, (0x18, sp) + pushw y + pushw x + call _mbtowc + addw sp, #6 + ldw (0x0b, sp), x +; ../mbstoc16s.c: 55: if(l < 0) + tnz (0x0b, sp) + jrpl 00106$ +; ../mbstoc16s.c: 56: return(-1); + clrw x + decw x + jp 00118$ +00106$: +; ../mbstoc16s.c: 59: if(m < n) + ldw x, (0x09, sp) + cpw x, (0x18, sp) + clr a + rlc a + ld (0x0d, sp), a +; ../mbstoc16s.c: 60: *c16s = 0; + ldw y, (0x14, sp) +; ../mbstoc16s.c: 57: else if(!l) + ldw x, (0x0b, sp) + jrne 00107$ +; ../mbstoc16s.c: 59: if(m < n) + tnz (0x0d, sp) + jrne 00157$ + jp 00115$ +00157$: +; ../mbstoc16s.c: 60: *c16s = 0; + ldw x, y + clr (0x1, x) + clr (x) +; ../mbstoc16s.c: 61: break; + jp 00115$ +00107$: +; ../mbstoc16s.c: 70: m++; + ldw x, (0x09, sp) + incw x + ldw (0x0e, sp), x +; ../mbstoc16s.c: 69: *c16s++ = codepoint; + ldw x, y + incw x + incw x + ldw (0x10, sp), x +; ../mbstoc16s.c: 64: if (codepoint <= 0xffff) // Basic multilingual plane + ldw x, (0x05, sp) + jrne 00113$ +; ../mbstoc16s.c: 66: if (m >= n) + ld a, (0x0d, sp) + jreq 00115$ +; ../mbstoc16s.c: 69: *c16s++ = codepoint; + ldw x, (0x07, sp) + ldw (0x09, sp), x + ldw x, y + ldw y, (0x09, sp) + ldw (x), y + ldw y, (0x10, sp) + ldw (0x14, sp), y +; ../mbstoc16s.c: 70: m++; + ldw y, (0x0e, sp) + ldw (0x09, sp), y + jra 00114$ +00113$: +; ../mbstoc16s.c: 74: if (m + 1 >= n) + ldw x, (0x0e, sp) + cpw x, (0x18, sp) + jrnc 00115$ +; ../mbstoc16s.c: 77: codepoint -= 0x100000; + ld a, (0x08, sp) + ld (0x04, sp), a + ld a, (0x07, sp) + ldw x, (0x05, sp) + subw x, #0x0010 + ld (0x07, sp), a + ldw (0x05, sp), x + ld a, (0x04, sp) + ld (0x08, sp), a +; ../mbstoc16s.c: 78: *c16s++ = ((codepoint >> 10) & 0x3ff) + 0xd800; + ldw x, (0x06, sp) + ldw (0x03, sp), x + ld a, (0x05, sp) + ld (0x02, sp), a + clr (0x01, sp) + srl (0x02, sp) + rrc (0x03, sp) + rrc (0x04, sp) + srl (0x02, sp) + rrc (0x03, sp) + rrc (0x04, sp) + ld a, (0x04, sp) + ld xl, a + ld a, (0x03, sp) + and a, #0x03 + ld xh, a + addw x, #0xd800 + ldw (y), x + ldw y, (0x10, sp) +; ../mbstoc16s.c: 79: *c16s++ = (codepoint & 0x3ff) + 0xdc00; + ldw (0x14, sp), y + ldw x, (0x07, sp) + ld a, xh + and a, #0x03 + ld xh, a + addw x, #0xdc00 + ldw (y), x + addw y, #0x0002 + ldw (0x14, sp), y +; ../mbstoc16s.c: 80: m += 2; + ldw x, (0x09, sp) + incw x + incw x + ldw (0x09, sp), x +00114$: +; ../mbstoc16s.c: 82: s += l; + ldw x, (0x16, sp) + addw x, (0x0b, sp) + ldw (0x16, sp), x + jp 00116$ +00115$: +; ../mbstoc16s.c: 85: return(m); + ldw x, (0x09, sp) +00118$: +; ../mbstoc16s.c: 86: } + addw sp, #17 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mbstoc16s.lst b/device/lib/stm8/mbstoc16s.lst new file mode 100644 index 0000000..b1bc6a7 --- /dev/null +++ b/device/lib/stm8/mbstoc16s.lst @@ -0,0 +1,196 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mbstoc16s + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mbtowc + 12 .globl ___mbstoc16s + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../mbstoc16s.c: 44: size_t __mbstoc16s(char16_t *restrict c16s, const char *restrict s, size_t n) + 51 ; ----------------------------------------- + 52 ; function __mbstoc16s + 53 ; ----------------------------------------- + 000000 54 ___mbstoc16s: + 000000 52 11 [ 2] 55 sub sp, #17 + 56 ; ../mbstoc16s.c: 46: size_t m = 0; + 000002 5F [ 1] 57 clrw x + 000003 1F 09 [ 2] 58 ldw (0x09, sp), x + 59 ; ../mbstoc16s.c: 85: return(m); + 000005 60 00116$: + 61 ; ../mbstoc16s.c: 53: l = mbtowc(&codepoint, s, MB_LEN_MAX); + 000005 96 [ 1] 62 ldw x, sp + 000006 1C 00 05 [ 2] 63 addw x, #5 + 000009 4B 04 [ 1] 64 push #0x04 + 00000B 4B 00 [ 1] 65 push #0x00 + 00000D 16 18 [ 2] 66 ldw y, (0x18, sp) + 00000F 90 89 [ 2] 67 pushw y + 000011 89 [ 2] 68 pushw x + 000012 CDr00r00 [ 4] 69 call _mbtowc + 000015 5B 06 [ 2] 70 addw sp, #6 + 000017 1F 0B [ 2] 71 ldw (0x0b, sp), x + 72 ; ../mbstoc16s.c: 55: if(l < 0) + 000019 0D 0B [ 1] 73 tnz (0x0b, sp) + 00001B 2A 05 [ 1] 74 jrpl 00106$ + 75 ; ../mbstoc16s.c: 56: return(-1); + 00001D 5F [ 1] 76 clrw x + 00001E 5A [ 2] 77 decw x + 00001F CCr00rC5 [ 2] 78 jp 00118$ + 000022 79 00106$: + 80 ; ../mbstoc16s.c: 59: if(m < n) + 000022 1E 09 [ 2] 81 ldw x, (0x09, sp) + 000024 13 18 [ 2] 82 cpw x, (0x18, sp) + 000026 4F [ 1] 83 clr a + 000027 49 [ 1] 84 rlc a + 000028 6B 0D [ 1] 85 ld (0x0d, sp), a + 86 ; ../mbstoc16s.c: 60: *c16s = 0; + 00002A 16 14 [ 2] 87 ldw y, (0x14, sp) + 88 ; ../mbstoc16s.c: 57: else if(!l) + 00002C 1E 0B [ 2] 89 ldw x, (0x0b, sp) + 00002E 26 0E [ 1] 90 jrne 00107$ + 91 ; ../mbstoc16s.c: 59: if(m < n) + 000030 0D 0D [ 1] 92 tnz (0x0d, sp) + 000032 26 03 [ 1] 93 jrne 00157$ + 000034 CCr00rC3 [ 2] 94 jp 00115$ + 000037 95 00157$: + 96 ; ../mbstoc16s.c: 60: *c16s = 0; + 000037 93 [ 1] 97 ldw x, y + 000038 6F 01 [ 1] 98 clr (0x1, x) + 00003A 7F [ 1] 99 clr (x) + 100 ; ../mbstoc16s.c: 61: break; + 00003B CCr00rC3 [ 2] 101 jp 00115$ + 00003E 102 00107$: + 103 ; ../mbstoc16s.c: 70: m++; + 00003E 1E 09 [ 2] 104 ldw x, (0x09, sp) + 000040 5C [ 1] 105 incw x + 000041 1F 0E [ 2] 106 ldw (0x0e, sp), x + 107 ; ../mbstoc16s.c: 69: *c16s++ = codepoint; + 000043 93 [ 1] 108 ldw x, y + 000044 5C [ 1] 109 incw x + 000045 5C [ 1] 110 incw x + 000046 1F 10 [ 2] 111 ldw (0x10, sp), x + 112 ; ../mbstoc16s.c: 64: if (codepoint <= 0xffff) // Basic multilingual plane + 000048 1E 05 [ 2] 113 ldw x, (0x05, sp) + 00004A 26 16 [ 1] 114 jrne 00113$ + 115 ; ../mbstoc16s.c: 66: if (m >= n) + 00004C 7B 0D [ 1] 116 ld a, (0x0d, sp) + 00004E 27 73 [ 1] 117 jreq 00115$ + 118 ; ../mbstoc16s.c: 69: *c16s++ = codepoint; + 000050 1E 07 [ 2] 119 ldw x, (0x07, sp) + 000052 1F 09 [ 2] 120 ldw (0x09, sp), x + 000054 93 [ 1] 121 ldw x, y + 000055 16 09 [ 2] 122 ldw y, (0x09, sp) + 000057 FF [ 2] 123 ldw (x), y + 000058 16 10 [ 2] 124 ldw y, (0x10, sp) + 00005A 17 14 [ 2] 125 ldw (0x14, sp), y + 126 ; ../mbstoc16s.c: 70: m++; + 00005C 16 0E [ 2] 127 ldw y, (0x0e, sp) + 00005E 17 09 [ 2] 128 ldw (0x09, sp), y + 000060 20 57 [ 2] 129 jra 00114$ + 000062 130 00113$: + 131 ; ../mbstoc16s.c: 74: if (m + 1 >= n) + 000062 1E 0E [ 2] 132 ldw x, (0x0e, sp) + 000064 13 18 [ 2] 133 cpw x, (0x18, sp) + 000066 24 5B [ 1] 134 jrnc 00115$ + 135 ; ../mbstoc16s.c: 77: codepoint -= 0x100000; + 000068 7B 08 [ 1] 136 ld a, (0x08, sp) + 00006A 6B 04 [ 1] 137 ld (0x04, sp), a + 00006C 7B 07 [ 1] 138 ld a, (0x07, sp) + 00006E 1E 05 [ 2] 139 ldw x, (0x05, sp) + 000070 1D 00 10 [ 2] 140 subw x, #0x0010 + 000073 6B 07 [ 1] 141 ld (0x07, sp), a + 000075 1F 05 [ 2] 142 ldw (0x05, sp), x + 000077 7B 04 [ 1] 143 ld a, (0x04, sp) + 000079 6B 08 [ 1] 144 ld (0x08, sp), a + 145 ; ../mbstoc16s.c: 78: *c16s++ = ((codepoint >> 10) & 0x3ff) + 0xd800; + 00007B 1E 06 [ 2] 146 ldw x, (0x06, sp) + 00007D 1F 03 [ 2] 147 ldw (0x03, sp), x + 00007F 7B 05 [ 1] 148 ld a, (0x05, sp) + 000081 6B 02 [ 1] 149 ld (0x02, sp), a + 000083 0F 01 [ 1] 150 clr (0x01, sp) + 000085 04 02 [ 1] 151 srl (0x02, sp) + 000087 06 03 [ 1] 152 rrc (0x03, sp) + 000089 06 04 [ 1] 153 rrc (0x04, sp) + 00008B 04 02 [ 1] 154 srl (0x02, sp) + 00008D 06 03 [ 1] 155 rrc (0x03, sp) + 00008F 06 04 [ 1] 156 rrc (0x04, sp) + 000091 7B 04 [ 1] 157 ld a, (0x04, sp) + 000093 97 [ 1] 158 ld xl, a + 000094 7B 03 [ 1] 159 ld a, (0x03, sp) + 000096 A4 03 [ 1] 160 and a, #0x03 + 000098 95 [ 1] 161 ld xh, a + 000099 1C D8 00 [ 2] 162 addw x, #0xd800 + 00009C 90 FF [ 2] 163 ldw (y), x + 00009E 16 10 [ 2] 164 ldw y, (0x10, sp) + 165 ; ../mbstoc16s.c: 79: *c16s++ = (codepoint & 0x3ff) + 0xdc00; + 0000A0 17 14 [ 2] 166 ldw (0x14, sp), y + 0000A2 1E 07 [ 2] 167 ldw x, (0x07, sp) + 0000A4 9E [ 1] 168 ld a, xh + 0000A5 A4 03 [ 1] 169 and a, #0x03 + 0000A7 95 [ 1] 170 ld xh, a + 0000A8 1C DC 00 [ 2] 171 addw x, #0xdc00 + 0000AB 90 FF [ 2] 172 ldw (y), x + 0000AD 72 A9 00 02 [ 2] 173 addw y, #0x0002 + 0000B1 17 14 [ 2] 174 ldw (0x14, sp), y + 175 ; ../mbstoc16s.c: 80: m += 2; + 0000B3 1E 09 [ 2] 176 ldw x, (0x09, sp) + 0000B5 5C [ 1] 177 incw x + 0000B6 5C [ 1] 178 incw x + 0000B7 1F 09 [ 2] 179 ldw (0x09, sp), x + 0000B9 180 00114$: + 181 ; ../mbstoc16s.c: 82: s += l; + 0000B9 1E 16 [ 2] 182 ldw x, (0x16, sp) + 0000BB 72 FB 0B [ 2] 183 addw x, (0x0b, sp) + 0000BE 1F 16 [ 2] 184 ldw (0x16, sp), x + 0000C0 CCr00r05 [ 2] 185 jp 00116$ + 0000C3 186 00115$: + 187 ; ../mbstoc16s.c: 85: return(m); + 0000C3 1E 09 [ 2] 188 ldw x, (0x09, sp) + 0000C5 189 00118$: + 190 ; ../mbstoc16s.c: 86: } + 0000C5 5B 11 [ 2] 191 addw sp, #17 + 0000C7 81 [ 4] 192 ret + 193 .area CODE + 194 .area CONST + 195 .area INITIALIZER + 196 .area CABS (ABS) diff --git a/device/lib/stm8/mbstoc16s.rel b/device/lib/stm8/mbstoc16s.rel new file mode 100644 index 0000000..0414581 --- /dev/null +++ b/device/lib/stm8/mbstoc16s.rel @@ -0,0 +1,76 @@ +XH3 +H B areas 3 global symbols +M mbstoc16s +O -mstm8 +S .__.ABS. Def000000 +S _mbtowc Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size C8 flags 0 addr 0 +S ___mbstoc16s Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 11 5F 1F 09 +R 00 00 00 09 +T 00 00 05 +R 00 00 00 09 +T 00 00 05 96 1C 00 05 4B 04 4B 00 16 18 90 89 89 +R 00 00 00 09 +T 00 00 12 CD 00 00 5B 06 1F 0B 0D 0B 2A 05 5F 5A +R 00 00 00 09 02 04 00 01 +T 00 00 1F CC 00 C5 +R 00 00 00 09 00 04 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 1E 09 13 18 4F 49 6B 0D 16 14 1E 0B 26 +R 00 00 00 09 +T 00 00 2F 0E 0D 0D 26 03 CC 00 C3 +R 00 00 00 09 00 09 00 09 +T 00 00 37 +R 00 00 00 09 +T 00 00 37 93 6F 01 7F CC 00 C3 +R 00 00 00 09 00 08 00 09 +T 00 00 3E +R 00 00 00 09 +T 00 00 3E 1E 09 5C 1F 0E 93 5C 5C 1F 10 1E 05 26 +R 00 00 00 09 +T 00 00 4B 16 7B 0D 27 73 1E 07 1F 09 93 16 09 FF +R 00 00 00 09 +T 00 00 58 16 10 17 14 16 0E 17 09 20 57 +R 00 00 00 09 +T 00 00 62 +R 00 00 00 09 +T 00 00 62 1E 0E 13 18 24 5B 7B 08 6B 04 7B 07 1E +R 00 00 00 09 +T 00 00 6F 05 1D 00 10 6B 07 1F 05 7B 04 6B 08 1E +R 00 00 00 09 +T 00 00 7C 06 1F 03 7B 05 6B 02 0F 01 04 02 06 03 +R 00 00 00 09 +T 00 00 89 06 04 04 02 06 03 06 04 7B 04 97 7B 03 +R 00 00 00 09 +T 00 00 96 A4 03 95 1C D8 00 90 FF 16 10 17 14 1E +R 00 00 00 09 +T 00 00 A3 07 9E A4 03 95 1C DC 00 90 FF 72 A9 +R 00 00 00 09 +T 00 00 AF 00 02 17 14 1E 09 5C 5C 1F 09 +R 00 00 00 09 +T 00 00 B9 +R 00 00 00 09 +T 00 00 B9 1E 16 72 FB 0B 1F 16 CC 00 05 +R 00 00 00 09 00 0B 00 09 +T 00 00 C3 +R 00 00 00 09 +T 00 00 C3 1E 09 +R 00 00 00 09 +T 00 00 C5 +R 00 00 00 09 +T 00 00 C5 5B 11 81 +R 00 00 00 09 diff --git a/device/lib/stm8/mbstoc16s.sym b/device/lib/stm8/mbstoc16s.sym new file mode 100644 index 0000000..2870cda --- /dev/null +++ b/device/lib/stm8/mbstoc16s.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 ___mbstoc16s 000000 GR + _mbtowc ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size C8 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mbstowcs.asm b/device/lib/stm8/mbstowcs.asm new file mode 100644 index 0000000..f012410 --- /dev/null +++ b/device/lib/stm8/mbstowcs.asm @@ -0,0 +1,115 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mbstowcs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mbtowc + .globl _mbstowcs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mbstowcs.c: 33: size_t mbstowcs(wchar_t *restrict pwcs, const char *restrict s, size_t n) +; ----------------------------------------- +; function mbstowcs +; ----------------------------------------- +_mbstowcs: + sub sp, #8 +; ../mbstowcs.c: 35: size_t m = 0; + clrw x + ldw (0x01, sp), x +; ../mbstowcs.c: 36: while(n--) + ldw y, (0x0b, sp) + ldw (0x03, sp), y + clrw x + ldw (0x05, sp), x + ldw y, (0x0f, sp) + ldw (0x07, sp), y +00105$: + ldw x, (0x07, sp) + ldw y, (0x07, sp) + decw y + ldw (0x07, sp), y + tnzw x + jreq 00107$ +; ../mbstowcs.c: 38: int b = mbtowc(pwcs++, s, MB_LEN_MAX); + ldw y, (0x03, sp) + ldw x, (0x03, sp) + addw x, #0x0004 + ldw (0x03, sp), x + push #0x04 + push #0x00 + ldw x, (0x0f, sp) + pushw x + pushw y + call _mbtowc + addw sp, #6 +; ../mbstowcs.c: 39: if(!b) + tnzw x + jreq 00107$ +; ../mbstowcs.c: 41: if(b < 0) + tnzw x + jrpl 00104$ +; ../mbstowcs.c: 42: return(-1); + clrw x + decw x + jra 00108$ +00104$: +; ../mbstowcs.c: 43: s += b; + addw x, (0x0d, sp) + ldw (0x0d, sp), x +; ../mbstowcs.c: 44: m++; + ldw x, (0x05, sp) + incw x + ldw (0x05, sp), x + ldw (0x01, sp), x + jra 00105$ +00107$: +; ../mbstowcs.c: 47: return(m); + ldw x, (0x01, sp) +00108$: +; ../mbstowcs.c: 48: } + addw sp, #8 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mbstowcs.lst b/device/lib/stm8/mbstowcs.lst new file mode 100644 index 0000000..f49bd44 --- /dev/null +++ b/device/lib/stm8/mbstowcs.lst @@ -0,0 +1,115 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mbstowcs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mbtowc + 12 .globl _mbstowcs + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../mbstowcs.c: 33: size_t mbstowcs(wchar_t *restrict pwcs, const char *restrict s, size_t n) + 51 ; ----------------------------------------- + 52 ; function mbstowcs + 53 ; ----------------------------------------- + 000000 54 _mbstowcs: + 000000 52 08 [ 2] 55 sub sp, #8 + 56 ; ../mbstowcs.c: 35: size_t m = 0; + 000002 5F [ 1] 57 clrw x + 000003 1F 01 [ 2] 58 ldw (0x01, sp), x + 59 ; ../mbstowcs.c: 36: while(n--) + 000005 16 0B [ 2] 60 ldw y, (0x0b, sp) + 000007 17 03 [ 2] 61 ldw (0x03, sp), y + 000009 5F [ 1] 62 clrw x + 00000A 1F 05 [ 2] 63 ldw (0x05, sp), x + 00000C 16 0F [ 2] 64 ldw y, (0x0f, sp) + 00000E 17 07 [ 2] 65 ldw (0x07, sp), y + 000010 66 00105$: + 000010 1E 07 [ 2] 67 ldw x, (0x07, sp) + 000012 16 07 [ 2] 68 ldw y, (0x07, sp) + 000014 90 5A [ 2] 69 decw y + 000016 17 07 [ 2] 70 ldw (0x07, sp), y + 000018 5D [ 2] 71 tnzw x + 000019 27 2F [ 1] 72 jreq 00107$ + 73 ; ../mbstowcs.c: 38: int b = mbtowc(pwcs++, s, MB_LEN_MAX); + 00001B 16 03 [ 2] 74 ldw y, (0x03, sp) + 00001D 1E 03 [ 2] 75 ldw x, (0x03, sp) + 00001F 1C 00 04 [ 2] 76 addw x, #0x0004 + 000022 1F 03 [ 2] 77 ldw (0x03, sp), x + 000024 4B 04 [ 1] 78 push #0x04 + 000026 4B 00 [ 1] 79 push #0x00 + 000028 1E 0F [ 2] 80 ldw x, (0x0f, sp) + 00002A 89 [ 2] 81 pushw x + 00002B 90 89 [ 2] 82 pushw y + 00002D CDr00r00 [ 4] 83 call _mbtowc + 000030 5B 06 [ 2] 84 addw sp, #6 + 85 ; ../mbstowcs.c: 39: if(!b) + 000032 5D [ 2] 86 tnzw x + 000033 27 15 [ 1] 87 jreq 00107$ + 88 ; ../mbstowcs.c: 41: if(b < 0) + 000035 5D [ 2] 89 tnzw x + 000036 2A 04 [ 1] 90 jrpl 00104$ + 91 ; ../mbstowcs.c: 42: return(-1); + 000038 5F [ 1] 92 clrw x + 000039 5A [ 2] 93 decw x + 00003A 20 10 [ 2] 94 jra 00108$ + 00003C 95 00104$: + 96 ; ../mbstowcs.c: 43: s += b; + 00003C 72 FB 0D [ 2] 97 addw x, (0x0d, sp) + 00003F 1F 0D [ 2] 98 ldw (0x0d, sp), x + 99 ; ../mbstowcs.c: 44: m++; + 000041 1E 05 [ 2] 100 ldw x, (0x05, sp) + 000043 5C [ 1] 101 incw x + 000044 1F 05 [ 2] 102 ldw (0x05, sp), x + 000046 1F 01 [ 2] 103 ldw (0x01, sp), x + 000048 20 C6 [ 2] 104 jra 00105$ + 00004A 105 00107$: + 106 ; ../mbstowcs.c: 47: return(m); + 00004A 1E 01 [ 2] 107 ldw x, (0x01, sp) + 00004C 108 00108$: + 109 ; ../mbstowcs.c: 48: } + 00004C 5B 08 [ 2] 110 addw sp, #8 + 00004E 81 [ 4] 111 ret + 112 .area CODE + 113 .area CONST + 114 .area INITIALIZER + 115 .area CABS (ABS) diff --git a/device/lib/stm8/mbstowcs.rel b/device/lib/stm8/mbstowcs.rel new file mode 100644 index 0000000..ba30f84 --- /dev/null +++ b/device/lib/stm8/mbstowcs.rel @@ -0,0 +1,48 @@ +XH3 +H B areas 3 global symbols +M mbstowcs +O -mstm8 +S .__.ABS. Def000000 +S _mbtowc Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 4F flags 0 addr 0 +S _mbstowcs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 08 5F 1F 01 16 0B 17 03 5F 1F 05 16 +R 00 00 00 09 +T 00 00 0D 0F 17 07 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 1E 07 16 07 90 5A 17 07 5D 27 2F 16 03 +R 00 00 00 09 +T 00 00 1D 1E 03 1C 00 04 1F 03 4B 04 4B 00 1E 0F +R 00 00 00 09 +T 00 00 2A 89 90 89 CD 00 00 5B 06 5D 27 15 5D 2A +R 00 00 00 09 02 07 00 01 +T 00 00 37 04 5F 5A 20 10 +R 00 00 00 09 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 72 FB 0D 1F 0D 1E 05 5C 1F 05 1F 01 20 +R 00 00 00 09 +T 00 00 49 C6 +R 00 00 00 09 +T 00 00 4A +R 00 00 00 09 +T 00 00 4A 1E 01 +R 00 00 00 09 +T 00 00 4C +R 00 00 00 09 +T 00 00 4C 5B 08 81 +R 00 00 00 09 diff --git a/device/lib/stm8/mbstowcs.sym b/device/lib/stm8/mbstowcs.sym new file mode 100644 index 0000000..9ed816d --- /dev/null +++ b/device/lib/stm8/mbstowcs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _mbstowcs 000000 GR + _mbtowc ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 4F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/mbtowc.asm b/device/lib/stm8/mbtowc.asm new file mode 100644 index 0000000..cad8139 --- /dev/null +++ b/device/lib/stm8/mbtowc.asm @@ -0,0 +1,299 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module mbtowc + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _mbtowc +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../mbtowc.c: 31: int mbtowc(wchar_t *pwc, const char *restrict s, size_t n) +; ----------------------------------------- +; function mbtowc +; ----------------------------------------- +_mbtowc: + sub sp, #12 +; ../mbtowc.c: 37: if(!s) +; ../mbtowc.c: 38: return(0); + ldw x, (0x11, sp) + jrne 00102$ + jp 00126$ +00102$: +; ../mbtowc.c: 40: seqlen = 1; + ld a, #0x01 + ld (0x0b, sp), a +; ../mbtowc.c: 41: first_byte = *s; + ldw y, (0x11, sp) + ldw (0x05, sp), y + ldw x, y + ld a, (x) +; ../mbtowc.c: 43: if(first_byte & 0x80) + ld (0x0c, sp), a + jrpl 00107$ +; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen)) + ld a, #0x01 + ld (0x07, sp), a +00103$: + ldw x, #0x0080 + ld a, (0x07, sp) + jreq 00204$ +00203$: + sraw x + dec a + jrne 00203$ +00204$: + ld a, (0x0c, sp) + ld (0x09, sp), a + clr (0x08, sp) +; ../mbtowc.c: 46: seqlen++; + ld a, (0x07, sp) + inc a +; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen)) + push a + ld a, xl + and a, (0x0a, sp) + ld (0x0c, sp), a + ld a, xh + and a, (0x09, sp) + ld (0x0b, sp), a + pop a + ldw x, (0x0a, sp) + jreq 00143$ +; ../mbtowc.c: 46: seqlen++; + ld (0x07, sp), a + jra 00103$ +00143$: + push a + ld a, (0x08, sp) + ld (0x0c, sp), a + pop a +; ../mbtowc.c: 47: first_byte &= (0xff >> (seqlen + 1)); + ldw x, #0x00ff + tnz a + jreq 00207$ +00206$: + sraw x + dec a + jrne 00206$ +00207$: + ld a, xl + and a, (0x0c, sp) + ld (0x0c, sp), a +00107$: +; ../mbtowc.c: 50: if(seqlen > 4 || n < seqlen) + ld a, (0x0b, sp) + cp a, #0x04 + jrugt 00108$ + ld a, (0x0b, sp) + ld (0x0a, sp), a + clr (0x09, sp) + ldw x, (0x13, sp) + cpw x, (0x09, sp) + jrnc 00136$ +00108$: +; ../mbtowc.c: 51: return(-1); + clrw x + decw x + jp 00126$ +; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++) +00136$: + ld a, #0x01 +00121$: + cp a, (0x0b, sp) + jrnc 00113$ +; ../mbtowc.c: 54: if((s[i] & 0xc0) != 0x80) + clrw x + ld xl, a + addw x, (0x05, sp) + push a + ld a, (x) + and a, #0xc0 + ld xl, a + clr a + ld xh, a + pop a + cpw x, #0x0080 + jreq 00122$ +; ../mbtowc.c: 55: return(-1); + clrw x + decw x + jp 00126$ +00122$: +; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++) + inc a + jra 00121$ +00113$: +; ../mbtowc.c: 57: codepoint = first_byte; + ld a, (0x0c, sp) + ld (0x0a, sp), a + clr (0x09, sp) + clrw x +; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--) + ldw y, (0x05, sp) + incw y + ldw (0x11, sp), y + ld a, (0x0b, sp) + dec a + ldw y, (0x11, sp) + ldw (0x05, sp), y +00124$: + tnz a + jreq 00114$ +; ../mbtowc.c: 61: codepoint <<= 6; + push a + ldw y, (0x0a, sp) + ld a, #0x06 +00215$: + sllw y + rlcw x + dec a + jrne 00215$ + pop a + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../mbtowc.c: 62: codepoint |= (*s & 0x3f); + ldw x, (0x05, sp) + push a + ld a, (x) + ld xl, a + pop a + exg a, xl + ld (0x0a, sp), a + exg a, xl + clr (0x09, sp) + push a + ld a, (0x0b, sp) + and a, #0x3f + ld xl, a + clr a + ld xh, a + pop a + exgw x, y + clrw x + tnzw y + jrpl 00217$ + decw x +00217$: + push a + ld a, yl + or a, (0x05, sp) + rlwa y + or a, (0x04, sp) + ld yh, a + ld a, xl + or a, (0x03, sp) + rlwa x + or a, (0x02, sp) + ld xh, a + pop a + ldw (0x09, sp), y +; ../mbtowc.c: 63: s++; + ldw y, (0x05, sp) + incw y + ldw (0x05, sp), y +; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--) + dec a + jra 00124$ +00114$: +; ../mbtowc.c: 66: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate. + ld a, (0x0a, sp) + cp a, #0x00 + ld a, (0x09, sp) + sbc a, #0xd8 + ld a, xl + sbc a, #0x00 + ld a, xh + sbc a, #0x00 + jrc 00116$ + ld a, #0xff + cp a, (0x0a, sp) + ld a, #0xdf + sbc a, (0x09, sp) + clr a + pushw x + sbc a, (2, sp) + popw x + clr a + pushw x + sbc a, (1, sp) + popw x + jrc 00116$ +; ../mbtowc.c: 67: return(-1); + clrw x + decw x + jra 00126$ +00116$: +; ../mbtowc.c: 69: if(pwc) + ldw y, (0x0f, sp) + jreq 00119$ +; ../mbtowc.c: 70: *pwc = codepoint; + ldw y, (0x0f, sp) + ld a, (0x0a, sp) + ld (0x3, y), a + ld a, (0x09, sp) + ld (0x2, y), a + ldw (y), x +00119$: +; ../mbtowc.c: 71: return(codepoint ? seqlen : 0); + ldw y, (0x09, sp) + jrne 00221$ + tnzw x + jreq 00128$ +00221$: + clrw x + ld a, (0x0b, sp) + ld xl, a + ldw (0x0b, sp), x + .byte 0xbc +00128$: + clrw x + ldw (0x0b, sp), x +00129$: + ldw x, (0x0b, sp) +00126$: +; ../mbtowc.c: 72: } + addw sp, #12 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/mbtowc.lst b/device/lib/stm8/mbtowc.lst new file mode 100644 index 0000000..f29b764 --- /dev/null +++ b/device/lib/stm8/mbtowc.lst @@ -0,0 +1,299 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module mbtowc + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _mbtowc + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../mbtowc.c: 31: int mbtowc(wchar_t *pwc, const char *restrict s, size_t n) + 50 ; ----------------------------------------- + 51 ; function mbtowc + 52 ; ----------------------------------------- + 000000 53 _mbtowc: + 000000 52 0C [ 2] 54 sub sp, #12 + 55 ; ../mbtowc.c: 37: if(!s) + 56 ; ../mbtowc.c: 38: return(0); + 000002 1E 11 [ 2] 57 ldw x, (0x11, sp) + 000004 26 03 [ 1] 58 jrne 00102$ + 000006 CCr01r3D [ 2] 59 jp 00126$ + 000009 60 00102$: + 61 ; ../mbtowc.c: 40: seqlen = 1; + 000009 A6 01 [ 1] 62 ld a, #0x01 + 00000B 6B 0B [ 1] 63 ld (0x0b, sp), a + 64 ; ../mbtowc.c: 41: first_byte = *s; + 00000D 16 11 [ 2] 65 ldw y, (0x11, sp) + 00000F 17 05 [ 2] 66 ldw (0x05, sp), y + 000011 93 [ 1] 67 ldw x, y + 000012 F6 [ 1] 68 ld a, (x) + 69 ; ../mbtowc.c: 43: if(first_byte & 0x80) + 000013 6B 0C [ 1] 70 ld (0x0c, sp), a + 000015 2A 41 [ 1] 71 jrpl 00107$ + 72 ; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen)) + 000017 A6 01 [ 1] 73 ld a, #0x01 + 000019 6B 07 [ 1] 74 ld (0x07, sp), a + 00001B 75 00103$: + 00001B AE 00 80 [ 2] 76 ldw x, #0x0080 + 00001E 7B 07 [ 1] 77 ld a, (0x07, sp) + 000020 27 04 [ 1] 78 jreq 00204$ + 000022 79 00203$: + 000022 57 [ 2] 80 sraw x + 000023 4A [ 1] 81 dec a + 000024 26 FC [ 1] 82 jrne 00203$ + 000026 83 00204$: + 000026 7B 0C [ 1] 84 ld a, (0x0c, sp) + 000028 6B 09 [ 1] 85 ld (0x09, sp), a + 00002A 0F 08 [ 1] 86 clr (0x08, sp) + 87 ; ../mbtowc.c: 46: seqlen++; + 00002C 7B 07 [ 1] 88 ld a, (0x07, sp) + 00002E 4C [ 1] 89 inc a + 90 ; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen)) + 00002F 88 [ 1] 91 push a + 000030 9F [ 1] 92 ld a, xl + 000031 14 0A [ 1] 93 and a, (0x0a, sp) + 000033 6B 0C [ 1] 94 ld (0x0c, sp), a + 000035 9E [ 1] 95 ld a, xh + 000036 14 09 [ 1] 96 and a, (0x09, sp) + 000038 6B 0B [ 1] 97 ld (0x0b, sp), a + 00003A 84 [ 1] 98 pop a + 00003B 1E 0A [ 2] 99 ldw x, (0x0a, sp) + 00003D 27 04 [ 1] 100 jreq 00143$ + 101 ; ../mbtowc.c: 46: seqlen++; + 00003F 6B 07 [ 1] 102 ld (0x07, sp), a + 000041 20 D8 [ 2] 103 jra 00103$ + 000043 104 00143$: + 000043 88 [ 1] 105 push a + 000044 7B 08 [ 1] 106 ld a, (0x08, sp) + 000046 6B 0C [ 1] 107 ld (0x0c, sp), a + 000048 84 [ 1] 108 pop a + 109 ; ../mbtowc.c: 47: first_byte &= (0xff >> (seqlen + 1)); + 000049 AE 00 FF [ 2] 110 ldw x, #0x00ff + 00004C 4D [ 1] 111 tnz a + 00004D 27 04 [ 1] 112 jreq 00207$ + 00004F 113 00206$: + 00004F 57 [ 2] 114 sraw x + 000050 4A [ 1] 115 dec a + 000051 26 FC [ 1] 116 jrne 00206$ + 000053 117 00207$: + 000053 9F [ 1] 118 ld a, xl + 000054 14 0C [ 1] 119 and a, (0x0c, sp) + 000056 6B 0C [ 1] 120 ld (0x0c, sp), a + 000058 121 00107$: + 122 ; ../mbtowc.c: 50: if(seqlen > 4 || n < seqlen) + 000058 7B 0B [ 1] 123 ld a, (0x0b, sp) + 00005A A1 04 [ 1] 124 cp a, #0x04 + 00005C 22 0C [ 1] 125 jrugt 00108$ + 00005E 7B 0B [ 1] 126 ld a, (0x0b, sp) + 000060 6B 0A [ 1] 127 ld (0x0a, sp), a + 000062 0F 09 [ 1] 128 clr (0x09, sp) + 000064 1E 13 [ 2] 129 ldw x, (0x13, sp) + 000066 13 09 [ 2] 130 cpw x, (0x09, sp) + 000068 24 05 [ 1] 131 jrnc 00136$ + 00006A 132 00108$: + 133 ; ../mbtowc.c: 51: return(-1); + 00006A 5F [ 1] 134 clrw x + 00006B 5A [ 2] 135 decw x + 00006C CCr01r3D [ 2] 136 jp 00126$ + 137 ; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++) + 00006F 138 00136$: + 00006F A6 01 [ 1] 139 ld a, #0x01 + 000071 140 00121$: + 000071 11 0B [ 1] 141 cp a, (0x0b, sp) + 000073 24 1A [ 1] 142 jrnc 00113$ + 143 ; ../mbtowc.c: 54: if((s[i] & 0xc0) != 0x80) + 000075 5F [ 1] 144 clrw x + 000076 97 [ 1] 145 ld xl, a + 000077 72 FB 05 [ 2] 146 addw x, (0x05, sp) + 00007A 88 [ 1] 147 push a + 00007B F6 [ 1] 148 ld a, (x) + 00007C A4 C0 [ 1] 149 and a, #0xc0 + 00007E 97 [ 1] 150 ld xl, a + 00007F 4F [ 1] 151 clr a + 000080 95 [ 1] 152 ld xh, a + 000081 84 [ 1] 153 pop a + 000082 A3 00 80 [ 2] 154 cpw x, #0x0080 + 000085 27 05 [ 1] 155 jreq 00122$ + 156 ; ../mbtowc.c: 55: return(-1); + 000087 5F [ 1] 157 clrw x + 000088 5A [ 2] 158 decw x + 000089 CCr01r3D [ 2] 159 jp 00126$ + 00008C 160 00122$: + 161 ; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++) + 00008C 4C [ 1] 162 inc a + 00008D 20 E2 [ 2] 163 jra 00121$ + 00008F 164 00113$: + 165 ; ../mbtowc.c: 57: codepoint = first_byte; + 00008F 7B 0C [ 1] 166 ld a, (0x0c, sp) + 000091 6B 0A [ 1] 167 ld (0x0a, sp), a + 000093 0F 09 [ 1] 168 clr (0x09, sp) + 000095 5F [ 1] 169 clrw x + 170 ; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--) + 000096 16 05 [ 2] 171 ldw y, (0x05, sp) + 000098 90 5C [ 1] 172 incw y + 00009A 17 11 [ 2] 173 ldw (0x11, sp), y + 00009C 7B 0B [ 1] 174 ld a, (0x0b, sp) + 00009E 4A [ 1] 175 dec a + 00009F 16 11 [ 2] 176 ldw y, (0x11, sp) + 0000A1 17 05 [ 2] 177 ldw (0x05, sp), y + 0000A3 178 00124$: + 0000A3 4D [ 1] 179 tnz a + 0000A4 27 4A [ 1] 180 jreq 00114$ + 181 ; ../mbtowc.c: 61: codepoint <<= 6; + 0000A6 88 [ 1] 182 push a + 0000A7 16 0A [ 2] 183 ldw y, (0x0a, sp) + 0000A9 A6 06 [ 1] 184 ld a, #0x06 + 0000AB 185 00215$: + 0000AB 90 58 [ 2] 186 sllw y + 0000AD 59 [ 2] 187 rlcw x + 0000AE 4A [ 1] 188 dec a + 0000AF 26 FA [ 1] 189 jrne 00215$ + 0000B1 84 [ 1] 190 pop a + 0000B2 17 03 [ 2] 191 ldw (0x03, sp), y + 0000B4 1F 01 [ 2] 192 ldw (0x01, sp), x + 193 ; ../mbtowc.c: 62: codepoint |= (*s & 0x3f); + 0000B6 1E 05 [ 2] 194 ldw x, (0x05, sp) + 0000B8 88 [ 1] 195 push a + 0000B9 F6 [ 1] 196 ld a, (x) + 0000BA 97 [ 1] 197 ld xl, a + 0000BB 84 [ 1] 198 pop a + 0000BC 41 [ 1] 199 exg a, xl + 0000BD 6B 0A [ 1] 200 ld (0x0a, sp), a + 0000BF 41 [ 1] 201 exg a, xl + 0000C0 0F 09 [ 1] 202 clr (0x09, sp) + 0000C2 88 [ 1] 203 push a + 0000C3 7B 0B [ 1] 204 ld a, (0x0b, sp) + 0000C5 A4 3F [ 1] 205 and a, #0x3f + 0000C7 97 [ 1] 206 ld xl, a + 0000C8 4F [ 1] 207 clr a + 0000C9 95 [ 1] 208 ld xh, a + 0000CA 84 [ 1] 209 pop a + 0000CB 51 [ 1] 210 exgw x, y + 0000CC 5F [ 1] 211 clrw x + 0000CD 90 5D [ 2] 212 tnzw y + 0000CF 2A 01 [ 1] 213 jrpl 00217$ + 0000D1 5A [ 2] 214 decw x + 0000D2 215 00217$: + 0000D2 88 [ 1] 216 push a + 0000D3 90 9F [ 1] 217 ld a, yl + 0000D5 1A 05 [ 1] 218 or a, (0x05, sp) + 0000D7 90 02 [ 1] 219 rlwa y + 0000D9 1A 04 [ 1] 220 or a, (0x04, sp) + 0000DB 90 95 [ 1] 221 ld yh, a + 0000DD 9F [ 1] 222 ld a, xl + 0000DE 1A 03 [ 1] 223 or a, (0x03, sp) + 0000E0 02 [ 1] 224 rlwa x + 0000E1 1A 02 [ 1] 225 or a, (0x02, sp) + 0000E3 95 [ 1] 226 ld xh, a + 0000E4 84 [ 1] 227 pop a + 0000E5 17 09 [ 2] 228 ldw (0x09, sp), y + 229 ; ../mbtowc.c: 63: s++; + 0000E7 16 05 [ 2] 230 ldw y, (0x05, sp) + 0000E9 90 5C [ 1] 231 incw y + 0000EB 17 05 [ 2] 232 ldw (0x05, sp), y + 233 ; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--) + 0000ED 4A [ 1] 234 dec a + 0000EE 20 B3 [ 2] 235 jra 00124$ + 0000F0 236 00114$: + 237 ; ../mbtowc.c: 66: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate. + 0000F0 7B 0A [ 1] 238 ld a, (0x0a, sp) + 0000F2 A1 00 [ 1] 239 cp a, #0x00 + 0000F4 7B 09 [ 1] 240 ld a, (0x09, sp) + 0000F6 A2 D8 [ 1] 241 sbc a, #0xd8 + 0000F8 9F [ 1] 242 ld a, xl + 0000F9 A2 00 [ 1] 243 sbc a, #0x00 + 0000FB 9E [ 1] 244 ld a, xh + 0000FC A2 00 [ 1] 245 sbc a, #0x00 + 0000FE 25 18 [ 1] 246 jrc 00116$ + 000100 A6 FF [ 1] 247 ld a, #0xff + 000102 11 0A [ 1] 248 cp a, (0x0a, sp) + 000104 A6 DF [ 1] 249 ld a, #0xdf + 000106 12 09 [ 1] 250 sbc a, (0x09, sp) + 000108 4F [ 1] 251 clr a + 000109 89 [ 2] 252 pushw x + 00010A 12 02 [ 1] 253 sbc a, (2, sp) + 00010C 85 [ 2] 254 popw x + 00010D 4F [ 1] 255 clr a + 00010E 89 [ 2] 256 pushw x + 00010F 12 01 [ 1] 257 sbc a, (1, sp) + 000111 85 [ 2] 258 popw x + 000112 25 04 [ 1] 259 jrc 00116$ + 260 ; ../mbtowc.c: 67: return(-1); + 000114 5F [ 1] 261 clrw x + 000115 5A [ 2] 262 decw x + 000116 20 25 [ 2] 263 jra 00126$ + 000118 264 00116$: + 265 ; ../mbtowc.c: 69: if(pwc) + 000118 16 0F [ 2] 266 ldw y, (0x0f, sp) + 00011A 27 0E [ 1] 267 jreq 00119$ + 268 ; ../mbtowc.c: 70: *pwc = codepoint; + 00011C 16 0F [ 2] 269 ldw y, (0x0f, sp) + 00011E 7B 0A [ 1] 270 ld a, (0x0a, sp) + 000120 90 E7 03 [ 1] 271 ld (0x3, y), a + 000123 7B 09 [ 1] 272 ld a, (0x09, sp) + 000125 90 E7 02 [ 1] 273 ld (0x2, y), a + 000128 90 FF [ 2] 274 ldw (y), x + 00012A 275 00119$: + 276 ; ../mbtowc.c: 71: return(codepoint ? seqlen : 0); + 00012A 16 09 [ 2] 277 ldw y, (0x09, sp) + 00012C 26 03 [ 1] 278 jrne 00221$ + 00012E 5D [ 2] 279 tnzw x + 00012F 27 07 [ 1] 280 jreq 00128$ + 000131 281 00221$: + 000131 5F [ 1] 282 clrw x + 000132 7B 0B [ 1] 283 ld a, (0x0b, sp) + 000134 97 [ 1] 284 ld xl, a + 000135 1F 0B [ 2] 285 ldw (0x0b, sp), x + 000137 BC 286 .byte 0xbc + 000138 287 00128$: + 000138 5F [ 1] 288 clrw x + 000139 1F 0B [ 2] 289 ldw (0x0b, sp), x + 00013B 290 00129$: + 00013B 1E 0B [ 2] 291 ldw x, (0x0b, sp) + 00013D 292 00126$: + 293 ; ../mbtowc.c: 72: } + 00013D 5B 0C [ 2] 294 addw sp, #12 + 00013F 81 [ 4] 295 ret + 296 .area CODE + 297 .area CONST + 298 .area INITIALIZER + 299 .area CABS (ABS) diff --git a/device/lib/stm8/mbtowc.rel b/device/lib/stm8/mbtowc.rel new file mode 100644 index 0000000..ad194d7 --- /dev/null +++ b/device/lib/stm8/mbtowc.rel @@ -0,0 +1,143 @@ +XH3 +H B areas 2 global symbols +M mbtowc +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 140 flags 0 addr 0 +S _mbtowc Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0C 1E 11 26 03 CC 01 3D +R 00 00 00 09 00 0A 00 09 +T 00 00 09 +R 00 00 00 09 +T 00 00 09 A6 01 6B 0B 16 11 17 05 93 F6 6B 0C 2A +R 00 00 00 09 +T 00 00 16 41 A6 01 6B 07 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B AE 00 80 7B 07 27 04 +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 57 4A 26 FC +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 7B 0C 6B 09 0F 08 7B 07 4C 88 9F 14 0A +R 00 00 00 09 +T 00 00 33 6B 0C 9E 14 09 6B 0B 84 1E 0A 27 04 6B +R 00 00 00 09 +T 00 00 40 07 20 D8 +R 00 00 00 09 +T 00 00 43 +R 00 00 00 09 +T 00 00 43 88 7B 08 6B 0C 84 AE 00 FF 4D 27 04 +R 00 00 00 09 +T 00 00 4F +R 00 00 00 09 +T 00 00 4F 57 4A 26 FC +R 00 00 00 09 +T 00 00 53 +R 00 00 00 09 +T 00 00 53 9F 14 0C 6B 0C +R 00 00 00 09 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 7B 0B A1 04 22 0C 7B 0B 6B 0A 0F 09 1E +R 00 00 00 09 +T 00 00 65 13 13 09 24 05 +R 00 00 00 09 +T 00 00 6A +R 00 00 00 09 +T 00 00 6A 5F 5A CC 01 3D +R 00 00 00 09 00 06 00 09 +T 00 00 6F +R 00 00 00 09 +T 00 00 6F A6 01 +R 00 00 00 09 +T 00 00 71 +R 00 00 00 09 +T 00 00 71 11 0B 24 1A 5F 97 72 FB 05 88 F6 A4 C0 +R 00 00 00 09 +T 00 00 7E 97 4F 95 84 A3 00 80 27 05 5F 5A CC +R 00 00 00 09 +T 00 00 8A 01 3D +R 00 00 00 09 00 03 00 09 +T 00 00 8C +R 00 00 00 09 +T 00 00 8C 4C 20 E2 +R 00 00 00 09 +T 00 00 8F +R 00 00 00 09 +T 00 00 8F 7B 0C 6B 0A 0F 09 5F 16 05 90 5C 17 11 +R 00 00 00 09 +T 00 00 9C 7B 0B 4A 16 11 17 05 +R 00 00 00 09 +T 00 00 A3 +R 00 00 00 09 +T 00 00 A3 4D 27 4A 88 16 0A A6 06 +R 00 00 00 09 +T 00 00 AB +R 00 00 00 09 +T 00 00 AB 90 58 59 4A 26 FA 84 17 03 1F 01 1E 05 +R 00 00 00 09 +T 00 00 B8 88 F6 97 84 41 6B 0A 41 0F 09 88 7B 0B +R 00 00 00 09 +T 00 00 C5 A4 3F 97 4F 95 84 51 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 D2 +R 00 00 00 09 +T 00 00 D2 88 90 9F 1A 05 90 02 1A 04 90 95 9F 1A +R 00 00 00 09 +T 00 00 DF 03 02 1A 02 95 84 17 09 16 05 90 5C 17 +R 00 00 00 09 +T 00 00 EC 05 4A 20 B3 +R 00 00 00 09 +T 00 00 F0 +R 00 00 00 09 +T 00 00 F0 7B 0A A1 00 7B 09 A2 D8 9F A2 00 9E A2 +R 00 00 00 09 +T 00 00 FD 00 25 18 A6 FF 11 0A A6 DF 12 09 4F 89 +R 00 00 00 09 +T 00 01 0A 12 02 85 4F 89 12 01 85 25 04 5F 5A 20 +R 00 00 00 09 +T 00 01 17 25 +R 00 00 00 09 +T 00 01 18 +R 00 00 00 09 +T 00 01 18 16 0F 27 0E 16 0F 7B 0A 90 E7 03 7B 09 +R 00 00 00 09 +T 00 01 25 90 E7 02 90 FF +R 00 00 00 09 +T 00 01 2A +R 00 00 00 09 +T 00 01 2A 16 09 26 03 5D 27 07 +R 00 00 00 09 +T 00 01 31 +R 00 00 00 09 +T 00 01 31 5F 7B 0B 97 1F 0B BC +R 00 00 00 09 +T 00 01 38 +R 00 00 00 09 +T 00 01 38 5F 1F 0B +R 00 00 00 09 +T 00 01 3B +R 00 00 00 09 +T 00 01 3B 1E 0B +R 00 00 00 09 +T 00 01 3D +R 00 00 00 09 +T 00 01 3D 5B 0C 81 +R 00 00 00 09 diff --git a/device/lib/stm8/mbtowc.sym b/device/lib/stm8/mbtowc.sym new file mode 100644 index 0000000..2edd5d4 --- /dev/null +++ b/device/lib/stm8/mbtowc.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _mbtowc 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 140 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/memccpy.asm b/device/lib/stm8/memccpy.asm new file mode 100644 index 0000000..9d066a1 --- /dev/null +++ b/device/lib/stm8/memccpy.asm @@ -0,0 +1,100 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module memccpy + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _memccpy +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../memccpy.c: 31: void *memccpy (void *restrict dst, const void *restrict src, int c, size_t n) +; ----------------------------------------- +; function memccpy +; ----------------------------------------- +_memccpy: + sub sp, #7 +; ../memccpy.c: 33: char *d = dst; + ldw x, (0x0a, sp) +; ../memccpy.c: 34: const char *s = src; + ldw y, (0x0c, sp) +; ../memccpy.c: 36: while (n--) + ldw (0x04, sp), y + ldw (0x06, sp), x + ldw y, (0x10, sp) +00103$: + ldw (0x02, sp), y + decw y + ldw x, (0x02, sp) + jreq 00105$ +; ../memccpy.c: 37: if ((*d++ = *s++) == (unsigned char)c) + ldw x, (0x04, sp) + ld a, (x) + ld (0x01, sp), a + ldw x, (0x04, sp) + incw x + ldw (0x04, sp), x + ldw x, (0x06, sp) + ld a, (0x01, sp) + ld (x), a + ldw x, (0x06, sp) + incw x + ldw (0x06, sp), x + ldw (0x02, sp), x + ld a, (0x0f, sp) + cp a, (0x01, sp) + jrne 00103$ +; ../memccpy.c: 38: return (d); + ldw y, (0x02, sp) + ldw (0x06, sp), y + ldw x, y +; ../memccpy.c: 40: return (0); + .byte 0x21 +00105$: + clrw x +00106$: +; ../memccpy.c: 41: } + addw sp, #7 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/memccpy.lst b/device/lib/stm8/memccpy.lst new file mode 100644 index 0000000..ddccce7 --- /dev/null +++ b/device/lib/stm8/memccpy.lst @@ -0,0 +1,100 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module memccpy + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _memccpy + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../memccpy.c: 31: void *memccpy (void *restrict dst, const void *restrict src, int c, size_t n) + 50 ; ----------------------------------------- + 51 ; function memccpy + 52 ; ----------------------------------------- + 000000 53 _memccpy: + 000000 52 07 [ 2] 54 sub sp, #7 + 55 ; ../memccpy.c: 33: char *d = dst; + 000002 1E 0A [ 2] 56 ldw x, (0x0a, sp) + 57 ; ../memccpy.c: 34: const char *s = src; + 000004 16 0C [ 2] 58 ldw y, (0x0c, sp) + 59 ; ../memccpy.c: 36: while (n--) + 000006 17 04 [ 2] 60 ldw (0x04, sp), y + 000008 1F 06 [ 2] 61 ldw (0x06, sp), x + 00000A 16 10 [ 2] 62 ldw y, (0x10, sp) + 00000C 63 00103$: + 00000C 17 02 [ 2] 64 ldw (0x02, sp), y + 00000E 90 5A [ 2] 65 decw y + 000010 1E 02 [ 2] 66 ldw x, (0x02, sp) + 000012 27 22 [ 1] 67 jreq 00105$ + 68 ; ../memccpy.c: 37: if ((*d++ = *s++) == (unsigned char)c) + 000014 1E 04 [ 2] 69 ldw x, (0x04, sp) + 000016 F6 [ 1] 70 ld a, (x) + 000017 6B 01 [ 1] 71 ld (0x01, sp), a + 000019 1E 04 [ 2] 72 ldw x, (0x04, sp) + 00001B 5C [ 1] 73 incw x + 00001C 1F 04 [ 2] 74 ldw (0x04, sp), x + 00001E 1E 06 [ 2] 75 ldw x, (0x06, sp) + 000020 7B 01 [ 1] 76 ld a, (0x01, sp) + 000022 F7 [ 1] 77 ld (x), a + 000023 1E 06 [ 2] 78 ldw x, (0x06, sp) + 000025 5C [ 1] 79 incw x + 000026 1F 06 [ 2] 80 ldw (0x06, sp), x + 000028 1F 02 [ 2] 81 ldw (0x02, sp), x + 00002A 7B 0F [ 1] 82 ld a, (0x0f, sp) + 00002C 11 01 [ 1] 83 cp a, (0x01, sp) + 00002E 26 DC [ 1] 84 jrne 00103$ + 85 ; ../memccpy.c: 38: return (d); + 000030 16 02 [ 2] 86 ldw y, (0x02, sp) + 000032 17 06 [ 2] 87 ldw (0x06, sp), y + 000034 93 [ 1] 88 ldw x, y + 89 ; ../memccpy.c: 40: return (0); + 000035 21 90 .byte 0x21 + 000036 91 00105$: + 000036 5F [ 1] 92 clrw x + 000037 93 00106$: + 94 ; ../memccpy.c: 41: } + 000037 5B 07 [ 2] 95 addw sp, #7 + 000039 81 [ 4] 96 ret + 97 .area CODE + 98 .area CONST + 99 .area INITIALIZER + 100 .area CABS (ABS) diff --git a/device/lib/stm8/memccpy.rel b/device/lib/stm8/memccpy.rel new file mode 100644 index 0000000..8c27970 --- /dev/null +++ b/device/lib/stm8/memccpy.rel @@ -0,0 +1,39 @@ +XH3 +H B areas 2 global symbols +M memccpy +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 3A flags 0 addr 0 +S _memccpy Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 07 1E 0A 16 0C 17 04 1F 06 16 10 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C 17 02 90 5A 1E 02 27 22 1E 04 F6 6B 01 +R 00 00 00 09 +T 00 00 19 1E 04 5C 1F 04 1E 06 7B 01 F7 1E 06 5C +R 00 00 00 09 +T 00 00 26 1F 06 1F 02 7B 0F 11 01 26 DC 16 02 17 +R 00 00 00 09 +T 00 00 33 06 93 21 +R 00 00 00 09 +T 00 00 36 +R 00 00 00 09 +T 00 00 36 5F +R 00 00 00 09 +T 00 00 37 +R 00 00 00 09 +T 00 00 37 5B 07 81 +R 00 00 00 09 diff --git a/device/lib/stm8/memccpy.sym b/device/lib/stm8/memccpy.sym new file mode 100644 index 0000000..cbe21df --- /dev/null +++ b/device/lib/stm8/memccpy.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _memccpy 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 3A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/memcpy.lst b/device/lib/stm8/memcpy.lst new file mode 100644 index 0000000..25db0b2 --- /dev/null +++ b/device/lib/stm8/memcpy.lst @@ -0,0 +1,91 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; memcpy.s + 3 ; + 4 ; Copyright (C) 2018, Benedikt Freisen + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 ; This memcpy() implementation has been optimized for speed using 4x loop + 30 ; unrolling and index relative addressing. + 31 + 32 ; void *memcpy(void *dest, const void *src, size_t n); + 33 + 34 .globl ___memcpy + 35 .globl _memcpy + 36 + 37 .area CODE + 38 + 000000 39 ___memcpy: + 000000 40 _memcpy: + 000000 16 03 [ 2] 41 ldw y, (3, sp) + 000002 1E 05 [ 2] 42 ldw x, (5, sp) + 43 + 000004 04 07 [ 1] 44 srl (7, sp) + 000006 06 08 [ 1] 45 rrc (8, sp) + 000008 24 06 [ 1] 46 jrnc n_x0 + 00000A F6 [ 1] 47 ld a, (x) + 00000B 90 F7 [ 1] 48 ld (y), a + 00000D 5C [ 1] 49 incw x + 00000E 90 5C [ 1] 50 incw y + 000010 51 n_x0: + 000010 04 07 [ 1] 52 srl (7, sp) + 000012 06 08 [ 1] 53 rrc (8, sp) + 000014 24 0C [ 1] 54 jrnc n_00 + 000016 F6 [ 1] 55 ld a, (x) + 000017 90 F7 [ 1] 56 ld (y), a + 000019 5C [ 1] 57 incw x + 00001A 90 5C [ 1] 58 incw y + 00001C F6 [ 1] 59 ld a, (x) + 00001D 90 F7 [ 1] 60 ld (y), a + 00001F 5C [ 1] 61 incw x + 000020 90 5C [ 1] 62 incw y + 000022 63 n_00: + 000022 0D 08 [ 1] 64 tnz (8, sp) + 000024 26 0D [ 1] 65 jrne loop_ent + 000026 0A 07 [ 1] 66 dec (7, sp) + 000028 2B 23 [ 1] 67 jrmi end + 00002A 20 07 [ 2] 68 jra loop_ent + 69 + 00002C 70 loop: + 00002C 1C 00 04 [ 2] 71 addw x, #4 + 00002F 72 A9 00 04 [ 2] 72 addw y, #4 + 000033 73 loop_ent: + 000033 F6 [ 1] 74 ld a, (x) + 000034 90 F7 [ 1] 75 ld (y), a + 000036 E6 01 [ 1] 76 ld a, (1, x) + 000038 90 E7 01 [ 1] 77 ld (1, y), a + 00003B E6 02 [ 1] 78 ld a, (2, x) + 00003D 90 E7 02 [ 1] 79 ld (2, y), a + 000040 E6 03 [ 1] 80 ld a, (3, x) + 000042 90 E7 03 [ 1] 81 ld (3, y), a + 82 + 000045 0A 08 [ 1] 83 dec (8, sp) + 000047 26 E3 [ 1] 84 jrne loop + 000049 0A 07 [ 1] 85 dec (7, sp) + 00004B 2A DF [ 1] 86 jrpl loop + 87 + 00004D 88 end: + 00004D 1E 03 [ 2] 89 ldw x, (3, sp) + 00004F 81 [ 4] 90 ret + 91 diff --git a/device/lib/stm8/memcpy.rel b/device/lib/stm8/memcpy.rel new file mode 100644 index 0000000..4e20679 --- /dev/null +++ b/device/lib/stm8/memcpy.rel @@ -0,0 +1,39 @@ +XH3 +H 2 areas 3 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 50 flags 0 addr 0 +S ___memcpy Def000000 +S _memcpy Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 16 03 1E 05 04 07 06 08 24 06 F6 90 F7 +R 00 00 00 01 +T 00 00 0D 5C 90 5C +R 00 00 00 01 +T 00 00 10 +R 00 00 00 01 +T 00 00 10 04 07 06 08 24 0C F6 90 F7 5C 90 5C F6 +R 00 00 00 01 +T 00 00 1D 90 F7 5C 90 5C +R 00 00 00 01 +T 00 00 22 +R 00 00 00 01 +T 00 00 22 0D 08 26 0D 0A 07 2B 23 20 07 +R 00 00 00 01 +T 00 00 2C +R 00 00 00 01 +T 00 00 2C 1C 00 04 72 A9 00 04 +R 00 00 00 01 +T 00 00 33 +R 00 00 00 01 +T 00 00 33 F6 90 F7 E6 01 90 E7 01 E6 02 90 E7 02 +R 00 00 00 01 +T 00 00 40 E6 03 90 E7 03 0A 08 26 E3 0A 07 2A DF +R 00 00 00 01 +T 00 00 4D +R 00 00 00 01 +T 00 00 4D 1E 03 81 +R 00 00 00 01 diff --git a/device/lib/stm8/memcpy.s b/device/lib/stm8/memcpy.s new file mode 100644 index 0000000..61f6cbf --- /dev/null +++ b/device/lib/stm8/memcpy.s @@ -0,0 +1,91 @@ +;-------------------------------------------------------------------------- +; memcpy.s +; +; Copyright (C) 2018, Benedikt Freisen +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + +; This memcpy() implementation has been optimized for speed using 4x loop +; unrolling and index relative addressing. + +; void *memcpy(void *dest, const void *src, size_t n); + + .globl ___memcpy + .globl _memcpy + + .area CODE + +___memcpy: +_memcpy: + ldw y, (3, sp) + ldw x, (5, sp) + + srl (7, sp) + rrc (8, sp) + jrnc n_x0 + ld a, (x) + ld (y), a + incw x + incw y +n_x0: + srl (7, sp) + rrc (8, sp) + jrnc n_00 + ld a, (x) + ld (y), a + incw x + incw y + ld a, (x) + ld (y), a + incw x + incw y +n_00: + tnz (8, sp) + jrne loop_ent + dec (7, sp) + jrmi end + jra loop_ent + +loop: + addw x, #4 + addw y, #4 +loop_ent: + ld a, (x) + ld (y), a + ld a, (1, x) + ld (1, y), a + ld a, (2, x) + ld (2, y), a + ld a, (3, x) + ld (3, y), a + + dec (8, sp) + jrne loop + dec (7, sp) + jrpl loop + +end: + ldw x, (3, sp) + ret + diff --git a/device/lib/stm8/memcpy.sym b/device/lib/stm8/memcpy.sym new file mode 100644 index 0000000..0aac69d --- /dev/null +++ b/device/lib/stm8/memcpy.sym @@ -0,0 +1,18 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 ___memcp 000000 GR | 1 _memcpy 000000 GR + 1 end 00004D R | 1 loop 00002C R | 1 loop_ent 000033 R + 1 n_00 000022 R | 1 n_x0 000010 R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 50 flags 0 + diff --git a/device/lib/stm8/modff.asm b/device/lib/stm8/modff.asm new file mode 100644 index 0000000..d61710b --- /dev/null +++ b/device/lib/stm8/modff.asm @@ -0,0 +1,90 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module modff + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _modff +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../modff.c: 33: float modff(float x, float * y) +; ----------------------------------------- +; function modff +; ----------------------------------------- +_modff: + sub sp, #6 +; ../modff.c: 35: *y=(long)x; + ldw y, (0x0d, sp) + ldw (0x01, sp), y + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call ___fs2slong + addw sp, #4 + pushw x + pushw y + call ___slong2fs + addw sp, #4 + ldw (0x05, sp), x + ldw x, (0x01, sp) + ld a, (0x06, sp) + ld (0x3, x), a + ld a, (0x05, sp) + ld (0x2, x), a + ldw (x), y +; ../modff.c: 36: return (x-*y); + ldw x, (0x05, sp) + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fssub +; ../modff.c: 37: } + addw sp, #14 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/modff.lst b/device/lib/stm8/modff.lst new file mode 100644 index 0000000..699fde2 --- /dev/null +++ b/device/lib/stm8/modff.lst @@ -0,0 +1,90 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module modff + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _modff + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../modff.c: 33: float modff(float x, float * y) + 50 ; ----------------------------------------- + 51 ; function modff + 52 ; ----------------------------------------- + 000000 53 _modff: + 000000 52 06 [ 2] 54 sub sp, #6 + 55 ; ../modff.c: 35: *y=(long)x; + 000002 16 0D [ 2] 56 ldw y, (0x0d, sp) + 000004 17 01 [ 2] 57 ldw (0x01, sp), y + 000006 1E 0B [ 2] 58 ldw x, (0x0b, sp) + 000008 89 [ 2] 59 pushw x + 000009 1E 0B [ 2] 60 ldw x, (0x0b, sp) + 00000B 89 [ 2] 61 pushw x + 00000C CDr00r00 [ 4] 62 call ___fs2slong + 00000F 5B 04 [ 2] 63 addw sp, #4 + 000011 89 [ 2] 64 pushw x + 000012 90 89 [ 2] 65 pushw y + 000014 CDr00r00 [ 4] 66 call ___slong2fs + 000017 5B 04 [ 2] 67 addw sp, #4 + 000019 1F 05 [ 2] 68 ldw (0x05, sp), x + 00001B 1E 01 [ 2] 69 ldw x, (0x01, sp) + 00001D 7B 06 [ 1] 70 ld a, (0x06, sp) + 00001F E7 03 [ 1] 71 ld (0x3, x), a + 000021 7B 05 [ 1] 72 ld a, (0x05, sp) + 000023 E7 02 [ 1] 73 ld (0x2, x), a + 000025 FF [ 2] 74 ldw (x), y + 75 ; ../modff.c: 36: return (x-*y); + 000026 1E 05 [ 2] 76 ldw x, (0x05, sp) + 000028 89 [ 2] 77 pushw x + 000029 90 89 [ 2] 78 pushw y + 00002B 1E 0F [ 2] 79 ldw x, (0x0f, sp) + 00002D 89 [ 2] 80 pushw x + 00002E 1E 0F [ 2] 81 ldw x, (0x0f, sp) + 000030 89 [ 2] 82 pushw x + 000031 CDr00r00 [ 4] 83 call ___fssub + 84 ; ../modff.c: 37: } + 000034 5B 0E [ 2] 85 addw sp, #14 + 000036 81 [ 4] 86 ret + 87 .area CODE + 88 .area CONST + 89 .area INITIALIZER + 90 .area CABS (ABS) diff --git a/device/lib/stm8/modff.rel b/device/lib/stm8/modff.rel new file mode 100644 index 0000000..11431a8 --- /dev/null +++ b/device/lib/stm8/modff.rel @@ -0,0 +1,32 @@ +XH3 +H B areas 5 global symbols +M modff +O -mstm8 +S ___fssub Ref000000 +S ___slong2fs Ref000000 +S ___fs2slong Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 37 flags 0 addr 0 +S _modff Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 06 16 0D 17 01 1E 0B 89 1E 0B 89 CD +R 00 00 00 09 +T 00 00 0D 00 00 5B 04 89 90 89 CD 00 00 5B 04 1F +R 00 00 00 09 02 03 00 02 02 0B 00 01 +T 00 00 1A 05 1E 01 7B 06 E7 03 7B 05 E7 02 FF 1E +R 00 00 00 09 +T 00 00 27 05 89 90 89 1E 0F 89 1E 0F 89 CD 00 00 +R 00 00 00 09 02 0E 00 00 +T 00 00 34 5B 0E 81 +R 00 00 00 09 diff --git a/device/lib/stm8/modff.sym b/device/lib/stm8/modff.sym new file mode 100644 index 0000000..c4c4917 --- /dev/null +++ b/device/lib/stm8/modff.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fs2slong ****** GX + ___fssub ****** GX + ___slong2fs ****** GX + 9 _modff 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 37 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/powf.asm b/device/lib/stm8/powf.asm new file mode 100644 index 0000000..6576d42 --- /dev/null +++ b/device/lib/stm8/powf.asm @@ -0,0 +1,129 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module powf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _logf + .globl _expf + .globl _powf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../powf.c: 35: float powf(float x, float y) +; ----------------------------------------- +; function powf +; ----------------------------------------- +_powf: + sub sp, #4 +; ../powf.c: 37: if(y == 0.0) return 1.0; + ldw x, (0x0d, sp) + jrne 00102$ + ldw x, (0x0b, sp) + sllw x + jrne 00102$ + clrw x + ldw y, #0x3f80 + jra 00107$ +00102$: +; ../powf.c: 38: if(y == 1.0) return x; + clrw x + pushw x + push #0x80 + push #0x3f + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fseq + addw sp, #8 + tnz a + jreq 00104$ + ldw x, (0x09, sp) + ldw y, (0x07, sp) + jra 00107$ +00104$: +; ../powf.c: 39: if(x <= 0.0) return 0.0; + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + clrw x + pushw x + clrw x + pushw x + call ___fslt + addw sp, #8 + tnz a + jrne 00106$ + clrw x + clrw y + jra 00107$ +00106$: +; ../powf.c: 40: return expf(logf(x) * y); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call _logf + addw sp, #4 + ldw (0x03, sp), x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x07, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + pushw x + pushw y + call _expf + addw sp, #4 +00107$: +; ../powf.c: 41: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/powf.lst b/device/lib/stm8/powf.lst new file mode 100644 index 0000000..299dc1a --- /dev/null +++ b/device/lib/stm8/powf.lst @@ -0,0 +1,129 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module powf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _logf + 12 .globl _expf + 13 .globl _powf + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../powf.c: 35: float powf(float x, float y) + 52 ; ----------------------------------------- + 53 ; function powf + 54 ; ----------------------------------------- + 000000 55 _powf: + 000000 52 04 [ 2] 56 sub sp, #4 + 57 ; ../powf.c: 37: if(y == 0.0) return 1.0; + 000002 1E 0D [ 2] 58 ldw x, (0x0d, sp) + 000004 26 0C [ 1] 59 jrne 00102$ + 000006 1E 0B [ 2] 60 ldw x, (0x0b, sp) + 000008 58 [ 2] 61 sllw x + 000009 26 07 [ 1] 62 jrne 00102$ + 00000B 5F [ 1] 63 clrw x + 00000C 90 AE 3F 80 [ 2] 64 ldw y, #0x3f80 + 000010 20 56 [ 2] 65 jra 00107$ + 000012 66 00102$: + 67 ; ../powf.c: 38: if(y == 1.0) return x; + 000012 5F [ 1] 68 clrw x + 000013 89 [ 2] 69 pushw x + 000014 4B 80 [ 1] 70 push #0x80 + 000016 4B 3F [ 1] 71 push #0x3f + 000018 1E 11 [ 2] 72 ldw x, (0x11, sp) + 00001A 89 [ 2] 73 pushw x + 00001B 1E 11 [ 2] 74 ldw x, (0x11, sp) + 00001D 89 [ 2] 75 pushw x + 00001E CDr00r00 [ 4] 76 call ___fseq + 000021 5B 08 [ 2] 77 addw sp, #8 + 000023 4D [ 1] 78 tnz a + 000024 27 06 [ 1] 79 jreq 00104$ + 000026 1E 09 [ 2] 80 ldw x, (0x09, sp) + 000028 16 07 [ 2] 81 ldw y, (0x07, sp) + 00002A 20 3C [ 2] 82 jra 00107$ + 00002C 83 00104$: + 84 ; ../powf.c: 39: if(x <= 0.0) return 0.0; + 00002C 1E 09 [ 2] 85 ldw x, (0x09, sp) + 00002E 89 [ 2] 86 pushw x + 00002F 1E 09 [ 2] 87 ldw x, (0x09, sp) + 000031 89 [ 2] 88 pushw x + 000032 5F [ 1] 89 clrw x + 000033 89 [ 2] 90 pushw x + 000034 5F [ 1] 91 clrw x + 000035 89 [ 2] 92 pushw x + 000036 CDr00r00 [ 4] 93 call ___fslt + 000039 5B 08 [ 2] 94 addw sp, #8 + 00003B 4D [ 1] 95 tnz a + 00003C 26 05 [ 1] 96 jrne 00106$ + 00003E 5F [ 1] 97 clrw x + 00003F 90 5F [ 1] 98 clrw y + 000041 20 25 [ 2] 99 jra 00107$ + 000043 100 00106$: + 101 ; ../powf.c: 40: return expf(logf(x) * y); + 000043 1E 09 [ 2] 102 ldw x, (0x09, sp) + 000045 89 [ 2] 103 pushw x + 000046 1E 09 [ 2] 104 ldw x, (0x09, sp) + 000048 89 [ 2] 105 pushw x + 000049 CDr00r00 [ 4] 106 call _logf + 00004C 5B 04 [ 2] 107 addw sp, #4 + 00004E 1F 03 [ 2] 108 ldw (0x03, sp), x + 000050 1E 0D [ 2] 109 ldw x, (0x0d, sp) + 000052 89 [ 2] 110 pushw x + 000053 1E 0D [ 2] 111 ldw x, (0x0d, sp) + 000055 89 [ 2] 112 pushw x + 000056 1E 07 [ 2] 113 ldw x, (0x07, sp) + 000058 89 [ 2] 114 pushw x + 000059 90 89 [ 2] 115 pushw y + 00005B CDr00r00 [ 4] 116 call ___fsmul + 00005E 5B 08 [ 2] 117 addw sp, #8 + 000060 89 [ 2] 118 pushw x + 000061 90 89 [ 2] 119 pushw y + 000063 CDr00r00 [ 4] 120 call _expf + 000066 5B 04 [ 2] 121 addw sp, #4 + 000068 122 00107$: + 123 ; ../powf.c: 41: } + 000068 5B 04 [ 2] 124 addw sp, #4 + 00006A 81 [ 4] 125 ret + 126 .area CODE + 127 .area CONST + 128 .area INITIALIZER + 129 .area CABS (ABS) diff --git a/device/lib/stm8/powf.rel b/device/lib/stm8/powf.rel new file mode 100644 index 0000000..e71a77a --- /dev/null +++ b/device/lib/stm8/powf.rel @@ -0,0 +1,52 @@ +XH3 +H B areas 7 global symbols +M powf +O -mstm8 +S ___fsmul Ref000000 +S _logf Ref000000 +S ___fseq Ref000000 +S _expf Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 6B flags 0 addr 0 +S _powf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 1E 0D 26 0C 1E 0B 58 26 07 5F 90 +R 00 00 00 09 +T 00 00 0D AE 3F 80 20 56 +R 00 00 00 09 +T 00 00 12 +R 00 00 00 09 +T 00 00 12 5F 89 4B 80 4B 3F 1E 11 89 1E 11 89 CD +R 00 00 00 09 +T 00 00 1F 00 00 5B 08 4D 27 06 1E 09 16 07 20 3C +R 00 00 00 09 02 03 00 02 +T 00 00 2C +R 00 00 00 09 +T 00 00 2C 1E 09 89 1E 09 89 5F 89 5F 89 CD 00 00 +R 00 00 00 09 02 0E 00 04 +T 00 00 39 5B 08 4D 26 05 5F 90 5F 20 25 +R 00 00 00 09 +T 00 00 43 +R 00 00 00 09 +T 00 00 43 1E 09 89 1E 09 89 CD 00 00 5B 04 1F 03 +R 00 00 00 09 02 0A 00 01 +T 00 00 50 1E 0D 89 1E 0D 89 1E 07 89 90 89 CD +R 00 00 00 09 +T 00 00 5C 00 00 5B 08 89 90 89 CD 00 00 5B 04 +R 00 00 00 09 02 03 00 00 02 0B 00 03 +T 00 00 68 +R 00 00 00 09 +T 00 00 68 5B 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/powf.sym b/device/lib/stm8/powf.sym new file mode 100644 index 0000000..df8bcbb --- /dev/null +++ b/device/lib/stm8/powf.sym @@ -0,0 +1,34 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fseq ****** GX + ___fslt ****** GX + ___fsmul ****** GX + _expf ****** GX + _logf ****** GX + 9 _powf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 6B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/printf_large.asm b/device/lib/stm8/printf_large.asm new file mode 100644 index 0000000..d2e37ec --- /dev/null +++ b/device/lib/stm8/printf_large.asm @@ -0,0 +1,1295 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module printf_large + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strlen + .globl __print_format +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../printf_large.c: 116: output_digit (unsigned char n, bool lower_case, pfn_outputchar output_char, void* p) +; ----------------------------------------- +; function output_digit +; ----------------------------------------- +_output_digit: +; ../printf_large.c: 118: register unsigned char c = n + (unsigned char)'0'; + ld a, (0x03, sp) + add a, #0x30 +; ../printf_large.c: 120: if (c > (unsigned char)'9') + cp a, #0x39 + jrule 00104$ +; ../printf_large.c: 122: c += (unsigned char)('A' - '0' - 10); + add a, #0x07 +; ../printf_large.c: 123: if (lower_case) + tnz (0x04, sp) + jreq 00104$ +; ../printf_large.c: 124: c += (unsigned char)('a' - 'A'); + add a, #0x20 +00104$: +; ../printf_large.c: 126: output_char( c, p ); + ldw x, (0x07, sp) + pushw x + push a + ldw x, (0x08, sp) + call (x) + addw sp, #3 +; ../printf_large.c: 127: } + ret +; ../printf_large.c: 149: output_2digits (unsigned char b, bool lower_case, pfn_outputchar output_char, void* p) +; ----------------------------------------- +; function output_2digits +; ----------------------------------------- +_output_2digits: + push a +; ../printf_large.c: 151: output_digit( b>>4, lower_case, output_char, p ); + ld a, (0x04, sp) + swap a + and a, #0x0f + ld (0x01, sp), a + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + ld a, (0x09, sp) + push a + ld a, (0x06, sp) + push a + call _output_digit + addw sp, #6 +; ../printf_large.c: 152: output_digit( b&0x0F, lower_case, output_char, p ); + ld a, (0x04, sp) + and a, #0x0f + ld (0x01, sp), a + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + ld a, (0x09, sp) + push a + ld a, (0x06, sp) + push a + call _output_digit +; ../printf_large.c: 153: } + addw sp, #7 + ret +; ../printf_large.c: 168: calculate_digit (value_t _AUTOMEM * value, unsigned char radix) +; ----------------------------------------- +; function calculate_digit +; ----------------------------------------- +_calculate_digit: + sub sp, #9 +; ../printf_large.c: 170: unsigned long ul = value->ul; + ldw y, (0x0c, sp) + ldw (0x01, sp), y + ldw x, y + ldw y, (0x2, y) + ldw x, (x) + ldw (0x08, sp), y + ldw (0x06, sp), x +; ../printf_large.c: 171: unsigned char _AUTOMEM * pb4 = &value->byte[4]; + ldw x, (0x01, sp) + addw x, #0x0004 + ldw (0x03, sp), x +; ../printf_large.c: 172: unsigned char i = 32; + ld a, #0x20 + ld (0x05, sp), a +; ../printf_large.c: 174: do +00103$: +; ../printf_large.c: 176: *pb4 = (*pb4 << 1) | ((ul >> 31) & 0x01); + ldw x, (0x03, sp) + ld a, (x) + sll a + ld xl, a + ld a, (0x06, sp) + sll a + clr a + rlc a + pushw x + or a, (2, sp) + popw x + ldw x, (0x03, sp) + ld (x), a +; ../printf_large.c: 177: ul <<= 1; + sll (0x09, sp) + rlc (0x08, sp) + rlc (0x07, sp) + rlc (0x06, sp) +; ../printf_large.c: 179: if (radix <= *pb4 ) + cp a, (0x0e, sp) + jrc 00104$ +; ../printf_large.c: 181: *pb4 -= radix; + ldw x, (0x03, sp) + ld a, (x) + sub a, (0x0e, sp) + ldw x, (0x03, sp) + ld (x), a +; ../printf_large.c: 182: ul |= 1; + ld a, (0x09, sp) + or a, #0x01 + ld yl, a + ld a, (0x08, sp) + ld yh, a + ld a, (0x07, sp) + ld xl, a + ld a, (0x06, sp) + ld xh, a + ldw (0x08, sp), y + ldw (0x06, sp), x +00104$: +; ../printf_large.c: 184: } while (--i); + dec (0x05, sp) + jrne 00103$ +; ../printf_large.c: 185: value->ul = ul; + ldw x, (0x01, sp) + ldw y, (0x08, sp) + ldw (0x2, x), y + ldw y, (0x06, sp) + ldw (x), y +; ../printf_large.c: 186: } + addw sp, #9 + ret +; ../printf_large.c: 434: _print_format (pfn_outputchar pfn, void* pvoid, const char *format, va_list ap) +; ----------------------------------------- +; function _print_format +; ----------------------------------------- +__print_format: + sub sp, #45 +; ../printf_large.c: 466: charsOutputted = 0; + clrw x + ldw (0x10, sp), x +; ../printf_large.c: 475: while( c=*format++ ) + ldw x, sp + addw x, #15 + ldw (0x12, sp), x + ldw x, sp + addw x, #5 + ldw (0x14, sp), x + addw x, #0x0004 + ldw (0x16, sp), x + ldw (0x18, sp), x + ldw y, (0x16, sp) + ldw (0x1a, sp), y +00231$: + ldw x, (0x34, sp) + ld a, (x) + incw x + ldw (0x34, sp), x + ld (0x2d, sp), a + jrne 00627$ + jp 00233$ +00627$: +; ../printf_large.c: 477: if ( c=='%' ) + ld a, (0x2d, sp) + cp a, #0x25 + jreq 00630$ + jp 00229$ +00630$: +; ../printf_large.c: 479: left_justify = 0; + clr (0x1c, sp) +; ../printf_large.c: 480: zero_padding = 0; + clr (0x1d, sp) +; ../printf_large.c: 481: prefix_sign = 0; + clr (0x1e, sp) +; ../printf_large.c: 482: prefix_space = 0; + clr (0x1f, sp) +; ../printf_large.c: 483: signed_argument = 0; + clr (0x20, sp) +; ../printf_large.c: 484: char_argument = 0; + clr (0x21, sp) +; ../printf_large.c: 485: long_argument = 0; + clr (0x22, sp) +; ../printf_large.c: 486: float_argument = 0; + clr (0x23, sp) +; ../printf_large.c: 487: radix = 0; + clr (0x24, sp) +; ../printf_large.c: 488: width = 0; + clrw x + ldw (0x25, sp), x +; ../printf_large.c: 489: decimals = -1; + ldw x, #0xffff + ldw (0x2a, sp), x +; ../printf_large.c: 491: get_conversion_spec: + ldw y, (0x34, sp) + ldw (0x28, sp), y +00101$: +; ../printf_large.c: 493: c = *format++; + ldw x, (0x28, sp) + ld a, (x) + ld (0x2d, sp), a + ldw x, (0x28, sp) + incw x + ldw (0x28, sp), x + ldw (0x34, sp), x +; ../printf_large.c: 495: if (c=='%') + ld a, (0x2d, sp) + cp a, #0x25 + jrne 00103$ +; ../printf_large.c: 497: OUTPUT_CHAR(c, p); + ldw x, (0x32, sp) + pushw x + ld a, (0x2f, sp) + push a + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x +; ../printf_large.c: 498: continue; + jra 00231$ +00103$: +; ../printf_large.c: 501: if (isdigit(c)) + ld a, (0x2d, sp) + cp a, #0x30 + jrc 00110$ + ld a, (0x2d, sp) + cp a, #0x39 + jrugt 00110$ +; ../printf_large.c: 503: if (decimals==-1) + ldw x, (0x2a, sp) + incw x + jrne 00107$ +; ../printf_large.c: 505: width = 10*width + c - '0'; + ldw x, (0x25, sp) + sllw x + sllw x + addw x, (0x25, sp) + sllw x + ldw (0x03, sp), x + clr (0x2c, sp) + ldw x, (0x03, sp) + addw x, (0x2c, sp) + ldw (0x26, sp), x + subw x, #0x0030 + ldw (0x2c, sp), x +; ../printf_large.c: 506: if (width == 0) + ldw (0x25, sp), x + jrne 00101$ +; ../printf_large.c: 509: zero_padding = 1; + ld a, #0x01 + ld (0x1d, sp), a + jra 00101$ +00107$: +; ../printf_large.c: 514: decimals = 10*decimals + c - '0'; + ldw x, (0x2a, sp) + sllw x + sllw x + addw x, (0x2a, sp) + sllw x + ldw (0x03, sp), x + clr (0x2c, sp) + ldw x, (0x03, sp) + addw x, (0x2c, sp) + ldw (0x2a, sp), x + subw x, #0x0030 + ldw (0x2c, sp), x + ldw (0x2a, sp), x +; ../printf_large.c: 516: goto get_conversion_spec; + jra 00101$ +00110$: +; ../printf_large.c: 519: if (c=='.') + ld a, (0x2d, sp) + cp a, #0x2e + jrne 00115$ +; ../printf_large.c: 521: if (decimals==-1) + ldw x, (0x2a, sp) + incw x + jreq 00646$ + jp 00101$ +00646$: +; ../printf_large.c: 522: decimals=0; + clrw x + ldw (0x2a, sp), x +; ../printf_large.c: 525: goto get_conversion_spec; + jp 00101$ +00115$: +; ../printf_large.c: 528: if (islower(c)) + ld a, (0x2d, sp) + cp a, #0x61 + jrc 00117$ + ld a, (0x2d, sp) + cp a, #0x7a + jrugt 00117$ +; ../printf_large.c: 530: c = toupper(c); + ld a, (0x2d, sp) + and a, #0xdf + ld (0x2d, sp), a +; ../printf_large.c: 531: lower_case = 1; + ld a, #0x01 + ld (0x27, sp), a +; ../printf_large.c: 534: lower_case = 0; + .byte 0xc5 +00117$: + clr (0x27, sp) +00118$: +; ../printf_large.c: 536: switch( c ) + ld a, (0x2d, sp) + cp a, #0x20 + jrne 00650$ + jp 00122$ +00650$: + ld a, (0x2d, sp) + cp a, #0x2b + jrne 00653$ + jp 00121$ +00653$: + ld a, (0x2d, sp) + cp a, #0x2d + jrne 00656$ + jp 00120$ +00656$: + ld a, (0x2d, sp) + cp a, #0x42 + jrne 00659$ + jp 00123$ +00659$: + ld a, (0x2d, sp) + cp a, #0x43 + jrne 00662$ + jp 00129$ +00662$: + ld a, (0x2d, sp) + cp a, #0x44 + jrne 00665$ + jp 00154$ +00665$: + ld a, (0x2d, sp) + cp a, #0x46 + jrne 00668$ + jp 00158$ +00668$: + ld a, (0x2d, sp) + cp a, #0x48 + jrne 00671$ + jp 00101$ +00671$: + ld a, (0x2d, sp) + cp a, #0x49 + jrne 00674$ + jp 00154$ +00674$: + ld a, (0x2d, sp) + cp a, #0x4a + jrne 00677$ + jp 00101$ +00677$: + ld a, (0x2d, sp) + cp a, #0x4c + jreq 00128$ + ld a, (0x2d, sp) + cp a, #0x4f + jrne 00683$ + jp 00155$ +00683$: + ld a, (0x2d, sp) + cp a, #0x50 + jrne 00686$ + jp 00152$ +00686$: + ld a, (0x2d, sp) + cp a, #0x53 + jreq 00133$ + ld a, (0x2d, sp) + cp a, #0x54 + jrne 00692$ + jp 00101$ +00692$: + ld a, (0x2d, sp) + cp a, #0x55 + jrne 00695$ + jp 00156$ +00695$: + ld a, (0x2d, sp) + cp a, #0x58 + jrne 00698$ + jp 00157$ +00698$: + ld a, (0x2d, sp) + cp a, #0x5a + jrne 00701$ + jp 00101$ +00701$: + jp 00159$ +; ../printf_large.c: 538: case '-': +00120$: +; ../printf_large.c: 539: left_justify = 1; + ld a, #0x01 + ld (0x1c, sp), a +; ../printf_large.c: 540: goto get_conversion_spec; + jp 00101$ +; ../printf_large.c: 541: case '+': +00121$: +; ../printf_large.c: 542: prefix_sign = 1; + ld a, #0x01 + ld (0x1e, sp), a +; ../printf_large.c: 543: goto get_conversion_spec; + jp 00101$ +; ../printf_large.c: 544: case ' ': +00122$: +; ../printf_large.c: 545: prefix_space = 1; + ld a, #0x01 + ld (0x1f, sp), a +; ../printf_large.c: 546: goto get_conversion_spec; + jp 00101$ +; ../printf_large.c: 547: case 'B': /* byte */ +00123$: +; ../printf_large.c: 548: char_argument = 1; + ld a, #0x01 + ld (0x21, sp), a +; ../printf_large.c: 549: goto get_conversion_spec; + jp 00101$ +; ../printf_large.c: 556: case 'L': /* long */ +00128$: +; ../printf_large.c: 557: long_argument = 1; + ld a, #0x01 + ld (0x22, sp), a +; ../printf_large.c: 558: goto get_conversion_spec; + jp 00101$ +; ../printf_large.c: 560: case 'C': +00129$: +; ../printf_large.c: 561: if( char_argument ) + tnz (0x21, sp) + jreq 00131$ +; ../printf_large.c: 562: c = va_arg(ap,char); + ldw x, (0x36, sp) + incw x + ldw (0x36, sp), x + addw x, #0xffff + ld a, (x) + jra 00132$ +00131$: +; ../printf_large.c: 564: c = va_arg(ap,int); + ldw x, (0x36, sp) + incw x + incw x + ldw (0x36, sp), x + decw x + decw x + ld a, (0x1, x) +00132$: +; ../printf_large.c: 565: OUTPUT_CHAR( c, p ); + ldw x, (0x32, sp) + pushw x + push a + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x +; ../printf_large.c: 566: break; + jp 00160$ +; ../printf_large.c: 568: case 'S': +00133$: +; ../printf_large.c: 569: PTR = va_arg(ap,ptr_t); + ldw x, (0x36, sp) + incw x + incw x + ldw (0x36, sp), x + decw x + decw x + ldw x, (x) + ldw (0x05, sp), x +; ../printf_large.c: 582: length = strlen(PTR); + pushw x + call _strlen + addw sp, #2 + ldw (0x28, sp), x +; ../printf_large.c: 584: if ( decimals == -1 ) + ldw x, (0x2a, sp) + incw x + jrne 00135$ +; ../printf_large.c: 586: decimals = length; + ldw y, (0x28, sp) + ldw (0x2a, sp), y +00135$: +; ../printf_large.c: 588: if ( ( !left_justify ) && (length < width) ) + tnz (0x1c, sp) + jrne 00277$ + ldw x, (0x28, sp) + cpw x, (0x25, sp) + jrnc 00277$ +; ../printf_large.c: 590: width -= length; + ldw x, (0x25, sp) + subw x, (0x28, sp) +; ../printf_large.c: 591: while( width-- != 0 ) + ldw y, (0x10, sp) + ldw (0x25, sp), y + ldw (0x2c, sp), x +00136$: + ldw x, (0x2c, sp) + ldw y, (0x2c, sp) + decw y + ldw (0x2c, sp), y + tnzw x + jreq 00312$ +; ../printf_large.c: 593: OUTPUT_CHAR( ' ', p ); + ldw x, (0x32, sp) + pushw x + push #0x20 + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x25, sp) + incw x + ldw (0x25, sp), x + jra 00136$ +; ../printf_large.c: 597: while ( (c = *PTR) && (decimals-- > 0)) +00312$: + ldw y, (0x25, sp) + ldw (0x10, sp), y + ldw y, (0x2c, sp) + ldw (0x25, sp), y +00277$: + ldw y, (0x10, sp) + ldw (0x2c, sp), y +00143$: + ldw x, (0x05, sp) + ld a, (x) + ld (0x11, sp), a + jreq 00313$ + ldw x, (0x2a, sp) + cpw x, #0x0000 + jrsle 00313$ + ldw x, (0x2a, sp) + decw x + ldw (0x2a, sp), x +; ../printf_large.c: 599: OUTPUT_CHAR( c, p ); + ldw x, (0x32, sp) + pushw x + ld a, (0x13, sp) + push a + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x2c, sp) + incw x + ldw (0x2c, sp), x +; ../printf_large.c: 600: PTR++; + ldw x, (0x05, sp) + incw x + ldw (0x05, sp), x + jra 00143$ +00313$: + ldw y, (0x2c, sp) + ldw (0x10, sp), y +; ../printf_large.c: 603: if ( left_justify && (length < width)) + tnz (0x1c, sp) + jrne 00714$ + jp 00160$ +00714$: + ldw x, (0x28, sp) + cpw x, (0x25, sp) + jrc 00715$ + jp 00160$ +00715$: +; ../printf_large.c: 605: width -= length; + ldw x, (0x25, sp) + subw x, (0x28, sp) + ldw (0x2a, sp), x + ldw (0x25, sp), x +; ../printf_large.c: 606: while( width-- != 0 ) + ldw y, (0x2c, sp) + ldw (0x29, sp), y + ldw y, (0x25, sp) + ldw (0x2c, sp), y +00146$: + ldw x, (0x2c, sp) + ldw y, (0x2c, sp) + decw y + ldw (0x2c, sp), y + tnzw x + jrne 00716$ + jp 00314$ +00716$: +; ../printf_large.c: 608: OUTPUT_CHAR( ' ', p ); + ldw x, (0x32, sp) + pushw x + push #0x20 + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x29, sp) + incw x + ldw (0x29, sp), x + jra 00146$ +; ../printf_large.c: 613: case 'P': +00152$: +; ../printf_large.c: 614: PTR = va_arg(ap,ptr_t); + ldw x, (0x36, sp) + incw x + incw x + ldw (0x2a, sp), x + ldw (0x36, sp), x + ldw x, (0x2a, sp) + decw x + decw x + ldw (0x2c, sp), x + ldw (0x2a, sp), x + ldw x, (x) + ldw (0x2c, sp), x + ldw (0x05, sp), x +; ../printf_large.c: 658: OUTPUT_CHAR('0', p); + ldw x, (0x32, sp) + pushw x + push #0x30 + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x2c, sp), x + ldw (0x2a, sp), x +; ../printf_large.c: 659: OUTPUT_CHAR('x', p); + ldw x, (0x32, sp) + pushw x + push #0x78 + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x2a, sp) + incw x + ldw (0x2c, sp), x + ldw (0x2a, sp), x +; ../printf_large.c: 660: OUTPUT_2DIGITS( value.byte[1] ); + ld a, (0x06, sp) + ld (0x2d, sp), a + ldw x, (0x32, sp) + pushw x + ldw x, (0x32, sp) + pushw x + ld a, (0x2b, sp) + push a + ld a, (0x32, sp) + push a + call _output_2digits + addw sp, #6 + ldw x, (0x2a, sp) + incw x + incw x + ldw (0x2c, sp), x + ldw (0x2a, sp), x +; ../printf_large.c: 661: OUTPUT_2DIGITS( value.byte[0] ); + ld a, (0x05, sp) + ld (0x2d, sp), a + ldw x, (0x32, sp) + pushw x + ldw x, (0x32, sp) + pushw x + ld a, (0x2b, sp) + push a + ld a, (0x32, sp) + push a + call _output_2digits + addw sp, #6 + ldw x, (0x2a, sp) + incw x + incw x + ldw (0x2c, sp), x + ldw (0x10, sp), x +; ../printf_large.c: 663: break; + jra 00160$ +; ../printf_large.c: 666: case 'I': +00154$: +; ../printf_large.c: 667: signed_argument = 1; + ld a, #0x01 + ld (0x20, sp), a +; ../printf_large.c: 668: radix = 10; + ld a, #0x0a + ld (0x24, sp), a +; ../printf_large.c: 669: break; + jra 00160$ +; ../printf_large.c: 671: case 'O': +00155$: +; ../printf_large.c: 672: radix = 8; + ld a, #0x08 + ld (0x24, sp), a +; ../printf_large.c: 673: break; + jra 00160$ +; ../printf_large.c: 675: case 'U': +00156$: +; ../printf_large.c: 676: radix = 10; + ld a, #0x0a + ld (0x24, sp), a +; ../printf_large.c: 677: break; + jra 00160$ +; ../printf_large.c: 679: case 'X': +00157$: +; ../printf_large.c: 680: radix = 16; + ld a, #0x10 + ld (0x24, sp), a +; ../printf_large.c: 681: break; + jra 00160$ +; ../printf_large.c: 683: case 'F': +00158$: +; ../printf_large.c: 684: float_argument=1; + ld a, #0x01 + ld (0x23, sp), a +; ../printf_large.c: 685: break; + jra 00160$ +; ../printf_large.c: 687: default: +00159$: +; ../printf_large.c: 689: OUTPUT_CHAR( c, p ); + ldw x, (0x32, sp) + pushw x + ld a, (0x2f, sp) + push a + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x2c, sp), x + ldw (0x10, sp), x +; ../printf_large.c: 872: return charsOutputted; + jra 00160$ +; ../printf_large.c: 691: } +00314$: + ldw y, (0x29, sp) + ldw (0x10, sp), y + ldw y, (0x2c, sp) + ldw (0x25, sp), y +00160$: +; ../printf_large.c: 693: if (float_argument) + tnz (0x23, sp) + jreq 00226$ +; ../printf_large.c: 695: value.f = va_arg(ap, float); + ldw x, (0x36, sp) + addw x, #0x0004 + ldw (0x36, sp), x + subw x, #0x0004 + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ldw (0x07, sp), y + ldw (0x05, sp), x +; ../printf_large.c: 697: PTR="<NO FLOAT>"; + ldw x, #(___str_0 + 0) + ldw (0x05, sp), x +; ../printf_large.c: 698: while (c=*PTR++) + ldw y, (0x10, sp) + ldw (0x2c, sp), y +00161$: + ldw y, (0x05, sp) + ldw (0x28, sp), y + ldw x, y + incw x + ldw (0x2a, sp), x + ldw (0x05, sp), x + ldw x, (0x28, sp) + ld a, (x) + ld xl, a + tnz a + jrne 00719$ + jp 00231$ +00719$: +; ../printf_large.c: 700: OUTPUT_CHAR (c, p); + ldw y, (0x32, sp) + pushw y + ld a, xl + push a + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x2c, sp) + incw x + ldw (0x2c, sp), x + ldw (0x10, sp), x + jra 00161$ +00226$: +; ../printf_large.c: 718: else if (radix != 0) + tnz (0x24, sp) + jrne 00721$ + jp 00231$ +00721$: +; ../printf_large.c: 723: unsigned char MEM_SPACE_BUF_PP *pstore = &store[5]; + ldw x, (0x12, sp) + ldw (0x2b, sp), x +; ../printf_large.c: 726: if (char_argument) + tnz (0x21, sp) + jreq 00172$ +; ../printf_large.c: 728: value.l = va_arg(ap, char); + ldw x, (0x36, sp) + incw x + ldw (0x36, sp), x + addw x, #0xffff + ld a, (x) + clrw x + ld xl, a + clrw y + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../printf_large.c: 729: if (!signed_argument) + tnz (0x20, sp) + jrne 00173$ +; ../printf_large.c: 731: value.l &= 0xFF; + ldw x, (0x07, sp) + clr a + ld xh, a + clrw y + ldw (0x07, sp), x + ldw (0x05, sp), y + jra 00173$ +00172$: +; ../printf_large.c: 734: else if (long_argument) + tnz (0x22, sp) + jreq 00169$ +; ../printf_large.c: 736: value.l = va_arg(ap, long); + ldw x, (0x36, sp) + addw x, #0x0004 + ldw (0x36, sp), x + subw x, #0x0004 + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ldw (0x07, sp), y + ldw (0x05, sp), x + jra 00173$ +00169$: +; ../printf_large.c: 740: value.l = va_arg(ap, int); + ldw x, (0x36, sp) + incw x + incw x + ldw (0x36, sp), x + decw x + decw x + ldw x, (x) + clrw y + tnzw x + jrpl 00725$ + decw y +00725$: + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../printf_large.c: 741: if (!signed_argument) + tnz (0x20, sp) + jrne 00173$ +; ../printf_large.c: 743: value.l &= 0xFFFF; + ldw y, (0x07, sp) + clrw x + ldw (0x07, sp), y + ldw (0x05, sp), x +00173$: +; ../printf_large.c: 747: if ( signed_argument ) + tnz (0x20, sp) + jreq 00178$ +; ../printf_large.c: 749: if (value.l < 0) + ldw x, (0x05, sp) + jrpl 00175$ +; ../printf_large.c: 750: value.l = -value.l; + ldw y, (0x07, sp) + ldw (0x03, sp), y + ldw y, (0x05, sp) + ldw (0x01, sp), y + ldw y, (0x03, sp) + negw y + ldw x, (0x01, sp) + jrnc 00729$ + incw x +00729$: + negw x + ldw (0x07, sp), y + ldw (0x05, sp), x +; ../printf_large.c: 752: signed_argument = 0; + .byte 0xc5 +00175$: + clr (0x20, sp) +00178$: +; ../printf_large.c: 756: lsd = 1; + ld a, #0x01 + ld (0x2d, sp), a +; ../printf_large.c: 758: do { + ldw y, (0x2b, sp) + ldw (0x29, sp), y + clrw x + ldw (0x2b, sp), x +00182$: +; ../printf_large.c: 759: value.byte[4] = 0; + clr (0x09, sp) +; ../printf_large.c: 761: calculate_digit(&value, radix); + ldw x, (0x14, sp) + ld a, (0x24, sp) + push a + pushw x + call _calculate_digit + addw sp, #3 +; ../printf_large.c: 765: if (!lsd) + tnz (0x2d, sp) + jrne 00180$ +; ../printf_large.c: 767: *pstore = (value.byte[4] << 4) | (value.byte[4] >> 4) | *pstore; + ldw x, (0x18, sp) + ld a, (x) + swap a + and a, #0xf0 + ld xl, a + ldw y, (0x18, sp) + ld a, (y) + swap a + and a, #0x0f + pushw x + or a, (2, sp) + popw x + ld (0x28, sp), a + ldw x, (0x29, sp) + ld a, (x) + or a, (0x28, sp) + ldw x, (0x29, sp) + ld (x), a +; ../printf_large.c: 768: pstore--; + ldw x, (0x29, sp) + decw x + ldw (0x29, sp), x + jra 00181$ +00180$: +; ../printf_large.c: 772: *pstore = value.byte[4]; + ldw x, (0x16, sp) + ld a, (x) + ldw x, (0x29, sp) + ld (x), a +00181$: +; ../printf_large.c: 774: length++; + ldw x, (0x2b, sp) + incw x + ldw (0x2b, sp), x +; ../printf_large.c: 775: lsd = !lsd; + ld a, (0x2d, sp) + sub a, #0x01 + clr a + rlc a + ld (0x2d, sp), a +; ../printf_large.c: 776: } while( value.ul ); + ldw x, (0x14, sp) + ldw y, x + ldw y, (0x2, y) + ldw (0x03, sp), y + ldw x, (x) + ldw (0x01, sp), x + ldw x, (0x03, sp) + jrne 00182$ + ldw x, (0x01, sp) + jrne 00182$ +; ../printf_large.c: 778: if (width == 0) + ldw y, (0x29, sp) + ldw (0x21, sp), y + ldw y, (0x2b, sp) + ldw (0x23, sp), y + ldw x, (0x25, sp) + jrne 00186$ +; ../printf_large.c: 783: width = 1; + ldw x, #0x0001 + ldw (0x25, sp), x +00186$: +; ../printf_large.c: 787: if (!zero_padding && !left_justify) + tnz (0x1d, sp) + jrne 00191$ + tnz (0x1c, sp) + jrne 00191$ +; ../printf_large.c: 789: while ( width > (unsigned char) (length+1) ) + ldw y, (0x10, sp) + ldw (0x29, sp), y + ldw y, (0x25, sp) + ldw (0x2b, sp), y +00187$: + ld a, (0x24, sp) + inc a + clrw x + ld xl, a + cpw x, (0x2b, sp) + jrnc 00316$ +; ../printf_large.c: 791: OUTPUT_CHAR( ' ', p ); + ldw x, (0x32, sp) + pushw x + push #0x20 + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x29, sp) + incw x + ldw (0x29, sp), x +; ../printf_large.c: 792: width--; + ldw x, (0x2b, sp) + decw x + ldw (0x2b, sp), x + jra 00187$ +00316$: + ldw y, (0x29, sp) + ldw (0x10, sp), y + ldw y, (0x2b, sp) + ldw (0x25, sp), y +00191$: +; ../printf_large.c: 796: if (signed_argument) // this now means the original value was negative + tnz (0x20, sp) + jreq 00201$ +; ../printf_large.c: 798: OUTPUT_CHAR( '-', p ); + ldw x, (0x32, sp) + pushw x + push #0x2d + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x +; ../printf_large.c: 800: width--; + ldw x, (0x25, sp) + decw x + ldw (0x25, sp), x + jra 00202$ +00201$: +; ../printf_large.c: 802: else if (length != 0) + ldw x, (0x23, sp) + jreq 00202$ +; ../printf_large.c: 805: if (prefix_sign) + tnz (0x1e, sp) + jreq 00196$ +; ../printf_large.c: 807: OUTPUT_CHAR( '+', p ); + ldw x, (0x32, sp) + pushw x + push #0x2b + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x +; ../printf_large.c: 809: width--; + ldw x, (0x25, sp) + decw x + ldw (0x25, sp), x + jra 00202$ +00196$: +; ../printf_large.c: 811: else if (prefix_space) + tnz (0x1f, sp) + jreq 00202$ +; ../printf_large.c: 813: OUTPUT_CHAR( ' ', p ); + ldw x, (0x32, sp) + pushw x + push #0x20 + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x +; ../printf_large.c: 815: width--; + ldw x, (0x25, sp) + decw x + ldw (0x25, sp), x +00202$: +; ../printf_large.c: 820: if (!left_justify) + tnz (0x1c, sp) + jrne 00210$ +; ../printf_large.c: 822: while ( width-- > length ) + ldw y, (0x10, sp) + ldw (0x29, sp), y + ldw y, (0x25, sp) + ldw (0x2b, sp), y +00203$: + ldw y, (0x2b, sp) + ldw x, (0x2b, sp) + decw x + ldw (0x2b, sp), x + ldw x, y + cpw x, (0x23, sp) + jrule 00317$ +; ../printf_large.c: 824: OUTPUT_CHAR( zero_padding ? '0' : ' ', p ); + tnz (0x1d, sp) + jreq 00236$ + ldw x, #0x0030 + .byte 0xbc +00236$: + ldw x, #0x0020 +00237$: + ld a, xl + ldw x, (0x32, sp) + pushw x + push a + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x29, sp) + incw x + ldw (0x29, sp), x + jra 00203$ +00210$: +; ../printf_large.c: 830: if (width > length) + ldw x, (0x25, sp) + cpw x, (0x23, sp) + jrule 00207$ +; ../printf_large.c: 831: width -= length; + ldw x, (0x25, sp) + subw x, (0x23, sp) + ldw (0x28, sp), x + jra 00309$ +00207$: +; ../printf_large.c: 833: width = 0; + clrw x + ldw (0x28, sp), x +; ../printf_large.c: 872: return charsOutputted; + jra 00309$ +; ../printf_large.c: 837: while( length-- ) +00317$: + ldw y, (0x29, sp) + ldw (0x10, sp), y + ldw y, (0x2b, sp) + ldw (0x28, sp), y +00309$: + ldw y, (0x21, sp) + ldw (0x2b, sp), y + ldw y, (0x10, sp) + ldw (0x25, sp), y +00215$: + ldw x, (0x23, sp) + ldw y, (0x23, sp) + decw y + ldw (0x23, sp), y + tnzw x + jreq 00318$ +; ../printf_large.c: 839: lsd = !lsd; + ld a, (0x2d, sp) + sub a, #0x01 + clr a + rlc a +; ../printf_large.c: 840: if (!lsd) + ld (0x2d, sp), a + jrne 00213$ +; ../printf_large.c: 842: pstore++; + ldw x, (0x2b, sp) + incw x +; ../printf_large.c: 843: value.byte[4] = *pstore >> 4; + ldw (0x2b, sp), x + ld a, (x) + swap a + and a, #0x0f + ldw x, (0x16, sp) + ld (x), a + jra 00214$ +00213$: +; ../printf_large.c: 847: value.byte[4] = *pstore & 0x0F; + ldw x, (0x2b, sp) + ld a, (x) + and a, #0x0f + ldw x, (0x16, sp) + ld (x), a +00214$: +; ../printf_large.c: 850: output_digit( value.byte[4], lower_case, output_char, p ); + ldw x, (0x1a, sp) + ld a, (x) + ld (0x2a, sp), a + ldw x, (0x32, sp) + pushw x + ldw x, (0x32, sp) + pushw x + ld a, (0x2b, sp) + push a + ld a, (0x2f, sp) + push a + call _output_digit + addw sp, #6 +; ../printf_large.c: 851: charsOutputted++; + ldw x, (0x25, sp) + incw x + ldw (0x25, sp), x + jra 00215$ +00318$: + ldw y, (0x25, sp) + ldw (0x10, sp), y +; ../printf_large.c: 856: if (left_justify) + tnz (0x1c, sp) + jrne 00752$ + jp 00231$ +00752$: +; ../printf_large.c: 858: while (width-- > 0) + ldw y, (0x25, sp) + ldw (0x2c, sp), y + ldw y, (0x28, sp) + ldw (0x2a, sp), y +00218$: + ldw x, (0x2a, sp) + ldw y, (0x2a, sp) + decw y + ldw (0x2a, sp), y + tnzw x + jrne 00753$ + jp 00231$ +00753$: +; ../printf_large.c: 860: OUTPUT_CHAR(' ', p); + ldw x, (0x32, sp) + pushw x + push #0x20 + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x2c, sp) + incw x + ldw (0x2c, sp), x + ldw (0x10, sp), x + jra 00218$ +00229$: +; ../printf_large.c: 868: OUTPUT_CHAR( c, p ); + ldw x, (0x32, sp) + pushw x + ld a, (0x2f, sp) + push a + ldw x, (0x33, sp) + call (x) + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x + jp 00231$ +00233$: +; ../printf_large.c: 872: return charsOutputted; + ldw x, (0x10, sp) +; ../printf_large.c: 873: } + addw sp, #45 + ret + .area CODE + .area CONST + .area CONST +___str_0: + .ascii "<NO FLOAT>" + .db 0x00 + .area CODE + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/printf_large.lst b/device/lib/stm8/printf_large.lst new file mode 100644 index 0000000..eebb2a1 --- /dev/null +++ b/device/lib/stm8/printf_large.lst @@ -0,0 +1,1296 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module printf_large + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strlen + 12 .globl __print_format + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../printf_large.c: 116: output_digit (unsigned char n, bool lower_case, pfn_outputchar output_char, void* p) + 51 ; ----------------------------------------- + 52 ; function output_digit + 53 ; ----------------------------------------- + 000000 54 _output_digit: + 55 ; ../printf_large.c: 118: register unsigned char c = n + (unsigned char)'0'; + 000000 7B 03 [ 1] 56 ld a, (0x03, sp) + 000002 AB 30 [ 1] 57 add a, #0x30 + 58 ; ../printf_large.c: 120: if (c > (unsigned char)'9') + 000004 A1 39 [ 1] 59 cp a, #0x39 + 000006 23 08 [ 2] 60 jrule 00104$ + 61 ; ../printf_large.c: 122: c += (unsigned char)('A' - '0' - 10); + 000008 AB 07 [ 1] 62 add a, #0x07 + 63 ; ../printf_large.c: 123: if (lower_case) + 00000A 0D 04 [ 1] 64 tnz (0x04, sp) + 00000C 27 02 [ 1] 65 jreq 00104$ + 66 ; ../printf_large.c: 124: c += (unsigned char)('a' - 'A'); + 00000E AB 20 [ 1] 67 add a, #0x20 + 000010 68 00104$: + 69 ; ../printf_large.c: 126: output_char( c, p ); + 000010 1E 07 [ 2] 70 ldw x, (0x07, sp) + 000012 89 [ 2] 71 pushw x + 000013 88 [ 1] 72 push a + 000014 1E 08 [ 2] 73 ldw x, (0x08, sp) + 000016 FD [ 4] 74 call (x) + 000017 5B 03 [ 2] 75 addw sp, #3 + 76 ; ../printf_large.c: 127: } + 000019 81 [ 4] 77 ret + 78 ; ../printf_large.c: 149: output_2digits (unsigned char b, bool lower_case, pfn_outputchar output_char, void* p) + 79 ; ----------------------------------------- + 80 ; function output_2digits + 81 ; ----------------------------------------- + 00001A 82 _output_2digits: + 00001A 88 [ 1] 83 push a + 84 ; ../printf_large.c: 151: output_digit( b>>4, lower_case, output_char, p ); + 00001B 7B 04 [ 1] 85 ld a, (0x04, sp) + 00001D 4E [ 1] 86 swap a + 00001E A4 0F [ 1] 87 and a, #0x0f + 000020 6B 01 [ 1] 88 ld (0x01, sp), a + 000022 1E 08 [ 2] 89 ldw x, (0x08, sp) + 000024 89 [ 2] 90 pushw x + 000025 1E 08 [ 2] 91 ldw x, (0x08, sp) + 000027 89 [ 2] 92 pushw x + 000028 7B 09 [ 1] 93 ld a, (0x09, sp) + 00002A 88 [ 1] 94 push a + 00002B 7B 06 [ 1] 95 ld a, (0x06, sp) + 00002D 88 [ 1] 96 push a + 00002E CDr00r00 [ 4] 97 call _output_digit + 000031 5B 06 [ 2] 98 addw sp, #6 + 99 ; ../printf_large.c: 152: output_digit( b&0x0F, lower_case, output_char, p ); + 000033 7B 04 [ 1] 100 ld a, (0x04, sp) + 000035 A4 0F [ 1] 101 and a, #0x0f + 000037 6B 01 [ 1] 102 ld (0x01, sp), a + 000039 1E 08 [ 2] 103 ldw x, (0x08, sp) + 00003B 89 [ 2] 104 pushw x + 00003C 1E 08 [ 2] 105 ldw x, (0x08, sp) + 00003E 89 [ 2] 106 pushw x + 00003F 7B 09 [ 1] 107 ld a, (0x09, sp) + 000041 88 [ 1] 108 push a + 000042 7B 06 [ 1] 109 ld a, (0x06, sp) + 000044 88 [ 1] 110 push a + 000045 CDr00r00 [ 4] 111 call _output_digit + 112 ; ../printf_large.c: 153: } + 000048 5B 07 [ 2] 113 addw sp, #7 + 00004A 81 [ 4] 114 ret + 115 ; ../printf_large.c: 168: calculate_digit (value_t _AUTOMEM * value, unsigned char radix) + 116 ; ----------------------------------------- + 117 ; function calculate_digit + 118 ; ----------------------------------------- + 00004B 119 _calculate_digit: + 00004B 52 09 [ 2] 120 sub sp, #9 + 121 ; ../printf_large.c: 170: unsigned long ul = value->ul; + 00004D 16 0C [ 2] 122 ldw y, (0x0c, sp) + 00004F 17 01 [ 2] 123 ldw (0x01, sp), y + 000051 93 [ 1] 124 ldw x, y + 000052 90 EE 02 [ 2] 125 ldw y, (0x2, y) + 000055 FE [ 2] 126 ldw x, (x) + 000056 17 08 [ 2] 127 ldw (0x08, sp), y + 000058 1F 06 [ 2] 128 ldw (0x06, sp), x + 129 ; ../printf_large.c: 171: unsigned char _AUTOMEM * pb4 = &value->byte[4]; + 00005A 1E 01 [ 2] 130 ldw x, (0x01, sp) + 00005C 1C 00 04 [ 2] 131 addw x, #0x0004 + 00005F 1F 03 [ 2] 132 ldw (0x03, sp), x + 133 ; ../printf_large.c: 172: unsigned char i = 32; + 000061 A6 20 [ 1] 134 ld a, #0x20 + 000063 6B 05 [ 1] 135 ld (0x05, sp), a + 136 ; ../printf_large.c: 174: do + 000065 137 00103$: + 138 ; ../printf_large.c: 176: *pb4 = (*pb4 << 1) | ((ul >> 31) & 0x01); + 000065 1E 03 [ 2] 139 ldw x, (0x03, sp) + 000067 F6 [ 1] 140 ld a, (x) + 000068 48 [ 1] 141 sll a + 000069 97 [ 1] 142 ld xl, a + 00006A 7B 06 [ 1] 143 ld a, (0x06, sp) + 00006C 48 [ 1] 144 sll a + 00006D 4F [ 1] 145 clr a + 00006E 49 [ 1] 146 rlc a + 00006F 89 [ 2] 147 pushw x + 000070 1A 02 [ 1] 148 or a, (2, sp) + 000072 85 [ 2] 149 popw x + 000073 1E 03 [ 2] 150 ldw x, (0x03, sp) + 000075 F7 [ 1] 151 ld (x), a + 152 ; ../printf_large.c: 177: ul <<= 1; + 000076 08 09 [ 1] 153 sll (0x09, sp) + 000078 09 08 [ 1] 154 rlc (0x08, sp) + 00007A 09 07 [ 1] 155 rlc (0x07, sp) + 00007C 09 06 [ 1] 156 rlc (0x06, sp) + 157 ; ../printf_large.c: 179: if (radix <= *pb4 ) + 00007E 11 0E [ 1] 158 cp a, (0x0e, sp) + 000080 25 1C [ 1] 159 jrc 00104$ + 160 ; ../printf_large.c: 181: *pb4 -= radix; + 000082 1E 03 [ 2] 161 ldw x, (0x03, sp) + 000084 F6 [ 1] 162 ld a, (x) + 000085 10 0E [ 1] 163 sub a, (0x0e, sp) + 000087 1E 03 [ 2] 164 ldw x, (0x03, sp) + 000089 F7 [ 1] 165 ld (x), a + 166 ; ../printf_large.c: 182: ul |= 1; + 00008A 7B 09 [ 1] 167 ld a, (0x09, sp) + 00008C AA 01 [ 1] 168 or a, #0x01 + 00008E 90 97 [ 1] 169 ld yl, a + 000090 7B 08 [ 1] 170 ld a, (0x08, sp) + 000092 90 95 [ 1] 171 ld yh, a + 000094 7B 07 [ 1] 172 ld a, (0x07, sp) + 000096 97 [ 1] 173 ld xl, a + 000097 7B 06 [ 1] 174 ld a, (0x06, sp) + 000099 95 [ 1] 175 ld xh, a + 00009A 17 08 [ 2] 176 ldw (0x08, sp), y + 00009C 1F 06 [ 2] 177 ldw (0x06, sp), x + 00009E 178 00104$: + 179 ; ../printf_large.c: 184: } while (--i); + 00009E 0A 05 [ 1] 180 dec (0x05, sp) + 0000A0 26 C3 [ 1] 181 jrne 00103$ + 182 ; ../printf_large.c: 185: value->ul = ul; + 0000A2 1E 01 [ 2] 183 ldw x, (0x01, sp) + 0000A4 16 08 [ 2] 184 ldw y, (0x08, sp) + 0000A6 EF 02 [ 2] 185 ldw (0x2, x), y + 0000A8 16 06 [ 2] 186 ldw y, (0x06, sp) + 0000AA FF [ 2] 187 ldw (x), y + 188 ; ../printf_large.c: 186: } + 0000AB 5B 09 [ 2] 189 addw sp, #9 + 0000AD 81 [ 4] 190 ret + 191 ; ../printf_large.c: 434: _print_format (pfn_outputchar pfn, void* pvoid, const char *format, va_list ap) + 192 ; ----------------------------------------- + 193 ; function _print_format + 194 ; ----------------------------------------- + 0000AE 195 __print_format: + 0000AE 52 2D [ 2] 196 sub sp, #45 + 197 ; ../printf_large.c: 466: charsOutputted = 0; + 0000B0 5F [ 1] 198 clrw x + 0000B1 1F 10 [ 2] 199 ldw (0x10, sp), x + 200 ; ../printf_large.c: 475: while( c=*format++ ) + 0000B3 96 [ 1] 201 ldw x, sp + 0000B4 1C 00 0F [ 2] 202 addw x, #15 + 0000B7 1F 12 [ 2] 203 ldw (0x12, sp), x + 0000B9 96 [ 1] 204 ldw x, sp + 0000BA 1C 00 05 [ 2] 205 addw x, #5 + 0000BD 1F 14 [ 2] 206 ldw (0x14, sp), x + 0000BF 1C 00 04 [ 2] 207 addw x, #0x0004 + 0000C2 1F 16 [ 2] 208 ldw (0x16, sp), x + 0000C4 1F 18 [ 2] 209 ldw (0x18, sp), x + 0000C6 16 16 [ 2] 210 ldw y, (0x16, sp) + 0000C8 17 1A [ 2] 211 ldw (0x1a, sp), y + 0000CA 212 00231$: + 0000CA 1E 34 [ 2] 213 ldw x, (0x34, sp) + 0000CC F6 [ 1] 214 ld a, (x) + 0000CD 5C [ 1] 215 incw x + 0000CE 1F 34 [ 2] 216 ldw (0x34, sp), x + 0000D0 6B 2D [ 1] 217 ld (0x2d, sp), a + 0000D2 26 03 [ 1] 218 jrne 00627$ + 0000D4 CCr06rBA [ 2] 219 jp 00233$ + 0000D7 220 00627$: + 221 ; ../printf_large.c: 477: if ( c=='%' ) + 0000D7 7B 2D [ 1] 222 ld a, (0x2d, sp) + 0000D9 A1 25 [ 1] 223 cp a, #0x25 + 0000DB 27 03 [ 1] 224 jreq 00630$ + 0000DD CCr06rA7 [ 2] 225 jp 00229$ + 0000E0 226 00630$: + 227 ; ../printf_large.c: 479: left_justify = 0; + 0000E0 0F 1C [ 1] 228 clr (0x1c, sp) + 229 ; ../printf_large.c: 480: zero_padding = 0; + 0000E2 0F 1D [ 1] 230 clr (0x1d, sp) + 231 ; ../printf_large.c: 481: prefix_sign = 0; + 0000E4 0F 1E [ 1] 232 clr (0x1e, sp) + 233 ; ../printf_large.c: 482: prefix_space = 0; + 0000E6 0F 1F [ 1] 234 clr (0x1f, sp) + 235 ; ../printf_large.c: 483: signed_argument = 0; + 0000E8 0F 20 [ 1] 236 clr (0x20, sp) + 237 ; ../printf_large.c: 484: char_argument = 0; + 0000EA 0F 21 [ 1] 238 clr (0x21, sp) + 239 ; ../printf_large.c: 485: long_argument = 0; + 0000EC 0F 22 [ 1] 240 clr (0x22, sp) + 241 ; ../printf_large.c: 486: float_argument = 0; + 0000EE 0F 23 [ 1] 242 clr (0x23, sp) + 243 ; ../printf_large.c: 487: radix = 0; + 0000F0 0F 24 [ 1] 244 clr (0x24, sp) + 245 ; ../printf_large.c: 488: width = 0; + 0000F2 5F [ 1] 246 clrw x + 0000F3 1F 25 [ 2] 247 ldw (0x25, sp), x + 248 ; ../printf_large.c: 489: decimals = -1; + 0000F5 AE FF FF [ 2] 249 ldw x, #0xffff + 0000F8 1F 2A [ 2] 250 ldw (0x2a, sp), x + 251 ; ../printf_large.c: 491: get_conversion_spec: + 0000FA 16 34 [ 2] 252 ldw y, (0x34, sp) + 0000FC 17 28 [ 2] 253 ldw (0x28, sp), y + 0000FE 254 00101$: + 255 ; ../printf_large.c: 493: c = *format++; + 0000FE 1E 28 [ 2] 256 ldw x, (0x28, sp) + 000100 F6 [ 1] 257 ld a, (x) + 000101 6B 2D [ 1] 258 ld (0x2d, sp), a + 000103 1E 28 [ 2] 259 ldw x, (0x28, sp) + 000105 5C [ 1] 260 incw x + 000106 1F 28 [ 2] 261 ldw (0x28, sp), x + 000108 1F 34 [ 2] 262 ldw (0x34, sp), x + 263 ; ../printf_large.c: 495: if (c=='%') + 00010A 7B 2D [ 1] 264 ld a, (0x2d, sp) + 00010C A1 25 [ 1] 265 cp a, #0x25 + 00010E 26 12 [ 1] 266 jrne 00103$ + 267 ; ../printf_large.c: 497: OUTPUT_CHAR(c, p); + 000110 1E 32 [ 2] 268 ldw x, (0x32, sp) + 000112 89 [ 2] 269 pushw x + 000113 7B 2F [ 1] 270 ld a, (0x2f, sp) + 000115 88 [ 1] 271 push a + 000116 1E 33 [ 2] 272 ldw x, (0x33, sp) + 000118 FD [ 4] 273 call (x) + 000119 5B 03 [ 2] 274 addw sp, #3 + 00011B 1E 10 [ 2] 275 ldw x, (0x10, sp) + 00011D 5C [ 1] 276 incw x + 00011E 1F 10 [ 2] 277 ldw (0x10, sp), x + 278 ; ../printf_large.c: 498: continue; + 000120 20 A8 [ 2] 279 jra 00231$ + 000122 280 00103$: + 281 ; ../printf_large.c: 501: if (isdigit(c)) + 000122 7B 2D [ 1] 282 ld a, (0x2d, sp) + 000124 A1 30 [ 1] 283 cp a, #0x30 + 000126 25 49 [ 1] 284 jrc 00110$ + 000128 7B 2D [ 1] 285 ld a, (0x2d, sp) + 00012A A1 39 [ 1] 286 cp a, #0x39 + 00012C 22 43 [ 1] 287 jrugt 00110$ + 288 ; ../printf_large.c: 503: if (decimals==-1) + 00012E 1E 2A [ 2] 289 ldw x, (0x2a, sp) + 000130 5C [ 1] 290 incw x + 000131 26 22 [ 1] 291 jrne 00107$ + 292 ; ../printf_large.c: 505: width = 10*width + c - '0'; + 000133 1E 25 [ 2] 293 ldw x, (0x25, sp) + 000135 58 [ 2] 294 sllw x + 000136 58 [ 2] 295 sllw x + 000137 72 FB 25 [ 2] 296 addw x, (0x25, sp) + 00013A 58 [ 2] 297 sllw x + 00013B 1F 03 [ 2] 298 ldw (0x03, sp), x + 00013D 0F 2C [ 1] 299 clr (0x2c, sp) + 00013F 1E 03 [ 2] 300 ldw x, (0x03, sp) + 000141 72 FB 2C [ 2] 301 addw x, (0x2c, sp) + 000144 1F 26 [ 2] 302 ldw (0x26, sp), x + 000146 1D 00 30 [ 2] 303 subw x, #0x0030 + 000149 1F 2C [ 2] 304 ldw (0x2c, sp), x + 305 ; ../printf_large.c: 506: if (width == 0) + 00014B 1F 25 [ 2] 306 ldw (0x25, sp), x + 00014D 26 AF [ 1] 307 jrne 00101$ + 308 ; ../printf_large.c: 509: zero_padding = 1; + 00014F A6 01 [ 1] 309 ld a, #0x01 + 000151 6B 1D [ 1] 310 ld (0x1d, sp), a + 000153 20 A9 [ 2] 311 jra 00101$ + 000155 312 00107$: + 313 ; ../printf_large.c: 514: decimals = 10*decimals + c - '0'; + 000155 1E 2A [ 2] 314 ldw x, (0x2a, sp) + 000157 58 [ 2] 315 sllw x + 000158 58 [ 2] 316 sllw x + 000159 72 FB 2A [ 2] 317 addw x, (0x2a, sp) + 00015C 58 [ 2] 318 sllw x + 00015D 1F 03 [ 2] 319 ldw (0x03, sp), x + 00015F 0F 2C [ 1] 320 clr (0x2c, sp) + 000161 1E 03 [ 2] 321 ldw x, (0x03, sp) + 000163 72 FB 2C [ 2] 322 addw x, (0x2c, sp) + 000166 1F 2A [ 2] 323 ldw (0x2a, sp), x + 000168 1D 00 30 [ 2] 324 subw x, #0x0030 + 00016B 1F 2C [ 2] 325 ldw (0x2c, sp), x + 00016D 1F 2A [ 2] 326 ldw (0x2a, sp), x + 327 ; ../printf_large.c: 516: goto get_conversion_spec; + 00016F 20 8D [ 2] 328 jra 00101$ + 000171 329 00110$: + 330 ; ../printf_large.c: 519: if (c=='.') + 000171 7B 2D [ 1] 331 ld a, (0x2d, sp) + 000173 A1 2E [ 1] 332 cp a, #0x2e + 000175 26 0E [ 1] 333 jrne 00115$ + 334 ; ../printf_large.c: 521: if (decimals==-1) + 000177 1E 2A [ 2] 335 ldw x, (0x2a, sp) + 000179 5C [ 1] 336 incw x + 00017A 27 03 [ 1] 337 jreq 00646$ + 00017C CCr00rFE [ 2] 338 jp 00101$ + 00017F 339 00646$: + 340 ; ../printf_large.c: 522: decimals=0; + 00017F 5F [ 1] 341 clrw x + 000180 1F 2A [ 2] 342 ldw (0x2a, sp), x + 343 ; ../printf_large.c: 525: goto get_conversion_spec; + 000182 CCr00rFE [ 2] 344 jp 00101$ + 000185 345 00115$: + 346 ; ../printf_large.c: 528: if (islower(c)) + 000185 7B 2D [ 1] 347 ld a, (0x2d, sp) + 000187 A1 61 [ 1] 348 cp a, #0x61 + 000189 25 11 [ 1] 349 jrc 00117$ + 00018B 7B 2D [ 1] 350 ld a, (0x2d, sp) + 00018D A1 7A [ 1] 351 cp a, #0x7a + 00018F 22 0B [ 1] 352 jrugt 00117$ + 353 ; ../printf_large.c: 530: c = toupper(c); + 000191 7B 2D [ 1] 354 ld a, (0x2d, sp) + 000193 A4 DF [ 1] 355 and a, #0xdf + 000195 6B 2D [ 1] 356 ld (0x2d, sp), a + 357 ; ../printf_large.c: 531: lower_case = 1; + 000197 A6 01 [ 1] 358 ld a, #0x01 + 000199 6B 27 [ 1] 359 ld (0x27, sp), a + 360 ; ../printf_large.c: 534: lower_case = 0; + 00019B C5 361 .byte 0xc5 + 00019C 362 00117$: + 00019C 0F 27 [ 1] 363 clr (0x27, sp) + 00019E 364 00118$: + 365 ; ../printf_large.c: 536: switch( c ) + 00019E 7B 2D [ 1] 366 ld a, (0x2d, sp) + 0001A0 A1 20 [ 1] 367 cp a, #0x20 + 0001A2 26 03 [ 1] 368 jrne 00650$ + 0001A4 CCr02r4B [ 2] 369 jp 00122$ + 0001A7 370 00650$: + 0001A7 7B 2D [ 1] 371 ld a, (0x2d, sp) + 0001A9 A1 2B [ 1] 372 cp a, #0x2b + 0001AB 26 03 [ 1] 373 jrne 00653$ + 0001AD CCr02r44 [ 2] 374 jp 00121$ + 0001B0 375 00653$: + 0001B0 7B 2D [ 1] 376 ld a, (0x2d, sp) + 0001B2 A1 2D [ 1] 377 cp a, #0x2d + 0001B4 26 03 [ 1] 378 jrne 00656$ + 0001B6 CCr02r3D [ 2] 379 jp 00120$ + 0001B9 380 00656$: + 0001B9 7B 2D [ 1] 381 ld a, (0x2d, sp) + 0001BB A1 42 [ 1] 382 cp a, #0x42 + 0001BD 26 03 [ 1] 383 jrne 00659$ + 0001BF CCr02r52 [ 2] 384 jp 00123$ + 0001C2 385 00659$: + 0001C2 7B 2D [ 1] 386 ld a, (0x2d, sp) + 0001C4 A1 43 [ 1] 387 cp a, #0x43 + 0001C6 26 03 [ 1] 388 jrne 00662$ + 0001C8 CCr02r60 [ 2] 389 jp 00129$ + 0001CB 390 00662$: + 0001CB 7B 2D [ 1] 391 ld a, (0x2d, sp) + 0001CD A1 44 [ 1] 392 cp a, #0x44 + 0001CF 26 03 [ 1] 393 jrne 00665$ + 0001D1 CCr03rC4 [ 2] 394 jp 00154$ + 0001D4 395 00665$: + 0001D4 7B 2D [ 1] 396 ld a, (0x2d, sp) + 0001D6 A1 46 [ 1] 397 cp a, #0x46 + 0001D8 26 03 [ 1] 398 jrne 00668$ + 0001DA CCr03rE0 [ 2] 399 jp 00158$ + 0001DD 400 00668$: + 0001DD 7B 2D [ 1] 401 ld a, (0x2d, sp) + 0001DF A1 48 [ 1] 402 cp a, #0x48 + 0001E1 26 03 [ 1] 403 jrne 00671$ + 0001E3 CCr00rFE [ 2] 404 jp 00101$ + 0001E6 405 00671$: + 0001E6 7B 2D [ 1] 406 ld a, (0x2d, sp) + 0001E8 A1 49 [ 1] 407 cp a, #0x49 + 0001EA 26 03 [ 1] 408 jrne 00674$ + 0001EC CCr03rC4 [ 2] 409 jp 00154$ + 0001EF 410 00674$: + 0001EF 7B 2D [ 1] 411 ld a, (0x2d, sp) + 0001F1 A1 4A [ 1] 412 cp a, #0x4a + 0001F3 26 03 [ 1] 413 jrne 00677$ + 0001F5 CCr00rFE [ 2] 414 jp 00101$ + 0001F8 415 00677$: + 0001F8 7B 2D [ 1] 416 ld a, (0x2d, sp) + 0001FA A1 4C [ 1] 417 cp a, #0x4c + 0001FC 27 5B [ 1] 418 jreq 00128$ + 0001FE 7B 2D [ 1] 419 ld a, (0x2d, sp) + 000200 A1 4F [ 1] 420 cp a, #0x4f + 000202 26 03 [ 1] 421 jrne 00683$ + 000204 CCr03rCE [ 2] 422 jp 00155$ + 000207 423 00683$: + 000207 7B 2D [ 1] 424 ld a, (0x2d, sp) + 000209 A1 50 [ 1] 425 cp a, #0x50 + 00020B 26 03 [ 1] 426 jrne 00686$ + 00020D CCr03r51 [ 2] 427 jp 00152$ + 000210 428 00686$: + 000210 7B 2D [ 1] 429 ld a, (0x2d, sp) + 000212 A1 53 [ 1] 430 cp a, #0x53 + 000214 27 74 [ 1] 431 jreq 00133$ + 000216 7B 2D [ 1] 432 ld a, (0x2d, sp) + 000218 A1 54 [ 1] 433 cp a, #0x54 + 00021A 26 03 [ 1] 434 jrne 00692$ + 00021C CCr00rFE [ 2] 435 jp 00101$ + 00021F 436 00692$: + 00021F 7B 2D [ 1] 437 ld a, (0x2d, sp) + 000221 A1 55 [ 1] 438 cp a, #0x55 + 000223 26 03 [ 1] 439 jrne 00695$ + 000225 CCr03rD4 [ 2] 440 jp 00156$ + 000228 441 00695$: + 000228 7B 2D [ 1] 442 ld a, (0x2d, sp) + 00022A A1 58 [ 1] 443 cp a, #0x58 + 00022C 26 03 [ 1] 444 jrne 00698$ + 00022E CCr03rDA [ 2] 445 jp 00157$ + 000231 446 00698$: + 000231 7B 2D [ 1] 447 ld a, (0x2d, sp) + 000233 A1 5A [ 1] 448 cp a, #0x5a + 000235 26 03 [ 1] 449 jrne 00701$ + 000237 CCr00rFE [ 2] 450 jp 00101$ + 00023A 451 00701$: + 00023A CCr03rE6 [ 2] 452 jp 00159$ + 453 ; ../printf_large.c: 538: case '-': + 00023D 454 00120$: + 455 ; ../printf_large.c: 539: left_justify = 1; + 00023D A6 01 [ 1] 456 ld a, #0x01 + 00023F 6B 1C [ 1] 457 ld (0x1c, sp), a + 458 ; ../printf_large.c: 540: goto get_conversion_spec; + 000241 CCr00rFE [ 2] 459 jp 00101$ + 460 ; ../printf_large.c: 541: case '+': + 000244 461 00121$: + 462 ; ../printf_large.c: 542: prefix_sign = 1; + 000244 A6 01 [ 1] 463 ld a, #0x01 + 000246 6B 1E [ 1] 464 ld (0x1e, sp), a + 465 ; ../printf_large.c: 543: goto get_conversion_spec; + 000248 CCr00rFE [ 2] 466 jp 00101$ + 467 ; ../printf_large.c: 544: case ' ': + 00024B 468 00122$: + 469 ; ../printf_large.c: 545: prefix_space = 1; + 00024B A6 01 [ 1] 470 ld a, #0x01 + 00024D 6B 1F [ 1] 471 ld (0x1f, sp), a + 472 ; ../printf_large.c: 546: goto get_conversion_spec; + 00024F CCr00rFE [ 2] 473 jp 00101$ + 474 ; ../printf_large.c: 547: case 'B': /* byte */ + 000252 475 00123$: + 476 ; ../printf_large.c: 548: char_argument = 1; + 000252 A6 01 [ 1] 477 ld a, #0x01 + 000254 6B 21 [ 1] 478 ld (0x21, sp), a + 479 ; ../printf_large.c: 549: goto get_conversion_spec; + 000256 CCr00rFE [ 2] 480 jp 00101$ + 481 ; ../printf_large.c: 556: case 'L': /* long */ + 000259 482 00128$: + 483 ; ../printf_large.c: 557: long_argument = 1; + 000259 A6 01 [ 1] 484 ld a, #0x01 + 00025B 6B 22 [ 1] 485 ld (0x22, sp), a + 486 ; ../printf_large.c: 558: goto get_conversion_spec; + 00025D CCr00rFE [ 2] 487 jp 00101$ + 488 ; ../printf_large.c: 560: case 'C': + 000260 489 00129$: + 490 ; ../printf_large.c: 561: if( char_argument ) + 000260 0D 21 [ 1] 491 tnz (0x21, sp) + 000262 27 0B [ 1] 492 jreq 00131$ + 493 ; ../printf_large.c: 562: c = va_arg(ap,char); + 000264 1E 36 [ 2] 494 ldw x, (0x36, sp) + 000266 5C [ 1] 495 incw x + 000267 1F 36 [ 2] 496 ldw (0x36, sp), x + 000269 1C FF FF [ 2] 497 addw x, #0xffff + 00026C F6 [ 1] 498 ld a, (x) + 00026D 20 0A [ 2] 499 jra 00132$ + 00026F 500 00131$: + 501 ; ../printf_large.c: 564: c = va_arg(ap,int); + 00026F 1E 36 [ 2] 502 ldw x, (0x36, sp) + 000271 5C [ 1] 503 incw x + 000272 5C [ 1] 504 incw x + 000273 1F 36 [ 2] 505 ldw (0x36, sp), x + 000275 5A [ 2] 506 decw x + 000276 5A [ 2] 507 decw x + 000277 E6 01 [ 1] 508 ld a, (0x1, x) + 000279 509 00132$: + 510 ; ../printf_large.c: 565: OUTPUT_CHAR( c, p ); + 000279 1E 32 [ 2] 511 ldw x, (0x32, sp) + 00027B 89 [ 2] 512 pushw x + 00027C 88 [ 1] 513 push a + 00027D 1E 33 [ 2] 514 ldw x, (0x33, sp) + 00027F FD [ 4] 515 call (x) + 000280 5B 03 [ 2] 516 addw sp, #3 + 000282 1E 10 [ 2] 517 ldw x, (0x10, sp) + 000284 5C [ 1] 518 incw x + 000285 1F 10 [ 2] 519 ldw (0x10, sp), x + 520 ; ../printf_large.c: 566: break; + 000287 CCr04r02 [ 2] 521 jp 00160$ + 522 ; ../printf_large.c: 568: case 'S': + 00028A 523 00133$: + 524 ; ../printf_large.c: 569: PTR = va_arg(ap,ptr_t); + 00028A 1E 36 [ 2] 525 ldw x, (0x36, sp) + 00028C 5C [ 1] 526 incw x + 00028D 5C [ 1] 527 incw x + 00028E 1F 36 [ 2] 528 ldw (0x36, sp), x + 000290 5A [ 2] 529 decw x + 000291 5A [ 2] 530 decw x + 000292 FE [ 2] 531 ldw x, (x) + 000293 1F 05 [ 2] 532 ldw (0x05, sp), x + 533 ; ../printf_large.c: 582: length = strlen(PTR); + 000295 89 [ 2] 534 pushw x + 000296 CDr00r00 [ 4] 535 call _strlen + 000299 5B 02 [ 2] 536 addw sp, #2 + 00029B 1F 28 [ 2] 537 ldw (0x28, sp), x + 538 ; ../printf_large.c: 584: if ( decimals == -1 ) + 00029D 1E 2A [ 2] 539 ldw x, (0x2a, sp) + 00029F 5C [ 1] 540 incw x + 0002A0 26 04 [ 1] 541 jrne 00135$ + 542 ; ../printf_large.c: 586: decimals = length; + 0002A2 16 28 [ 2] 543 ldw y, (0x28, sp) + 0002A4 17 2A [ 2] 544 ldw (0x2a, sp), y + 0002A6 545 00135$: + 546 ; ../printf_large.c: 588: if ( ( !left_justify ) && (length < width) ) + 0002A6 0D 1C [ 1] 547 tnz (0x1c, sp) + 0002A8 26 35 [ 1] 548 jrne 00277$ + 0002AA 1E 28 [ 2] 549 ldw x, (0x28, sp) + 0002AC 13 25 [ 2] 550 cpw x, (0x25, sp) + 0002AE 24 2F [ 1] 551 jrnc 00277$ + 552 ; ../printf_large.c: 590: width -= length; + 0002B0 1E 25 [ 2] 553 ldw x, (0x25, sp) + 0002B2 72 F0 28 [ 2] 554 subw x, (0x28, sp) + 555 ; ../printf_large.c: 591: while( width-- != 0 ) + 0002B5 16 10 [ 2] 556 ldw y, (0x10, sp) + 0002B7 17 25 [ 2] 557 ldw (0x25, sp), y + 0002B9 1F 2C [ 2] 558 ldw (0x2c, sp), x + 0002BB 559 00136$: + 0002BB 1E 2C [ 2] 560 ldw x, (0x2c, sp) + 0002BD 16 2C [ 2] 561 ldw y, (0x2c, sp) + 0002BF 90 5A [ 2] 562 decw y + 0002C1 17 2C [ 2] 563 ldw (0x2c, sp), y + 0002C3 5D [ 2] 564 tnzw x + 0002C4 27 11 [ 1] 565 jreq 00312$ + 566 ; ../printf_large.c: 593: OUTPUT_CHAR( ' ', p ); + 0002C6 1E 32 [ 2] 567 ldw x, (0x32, sp) + 0002C8 89 [ 2] 568 pushw x + 0002C9 4B 20 [ 1] 569 push #0x20 + 0002CB 1E 33 [ 2] 570 ldw x, (0x33, sp) + 0002CD FD [ 4] 571 call (x) + 0002CE 5B 03 [ 2] 572 addw sp, #3 + 0002D0 1E 25 [ 2] 573 ldw x, (0x25, sp) + 0002D2 5C [ 1] 574 incw x + 0002D3 1F 25 [ 2] 575 ldw (0x25, sp), x + 0002D5 20 E4 [ 2] 576 jra 00136$ + 577 ; ../printf_large.c: 597: while ( (c = *PTR) && (decimals-- > 0)) + 0002D7 578 00312$: + 0002D7 16 25 [ 2] 579 ldw y, (0x25, sp) + 0002D9 17 10 [ 2] 580 ldw (0x10, sp), y + 0002DB 16 2C [ 2] 581 ldw y, (0x2c, sp) + 0002DD 17 25 [ 2] 582 ldw (0x25, sp), y + 0002DF 583 00277$: + 0002DF 16 10 [ 2] 584 ldw y, (0x10, sp) + 0002E1 17 2C [ 2] 585 ldw (0x2c, sp), y + 0002E3 586 00143$: + 0002E3 1E 05 [ 2] 587 ldw x, (0x05, sp) + 0002E5 F6 [ 1] 588 ld a, (x) + 0002E6 6B 11 [ 1] 589 ld (0x11, sp), a + 0002E8 27 23 [ 1] 590 jreq 00313$ + 0002EA 1E 2A [ 2] 591 ldw x, (0x2a, sp) + 0002EC A3 00 00 [ 2] 592 cpw x, #0x0000 + 0002EF 2D 1C [ 1] 593 jrsle 00313$ + 0002F1 1E 2A [ 2] 594 ldw x, (0x2a, sp) + 0002F3 5A [ 2] 595 decw x + 0002F4 1F 2A [ 2] 596 ldw (0x2a, sp), x + 597 ; ../printf_large.c: 599: OUTPUT_CHAR( c, p ); + 0002F6 1E 32 [ 2] 598 ldw x, (0x32, sp) + 0002F8 89 [ 2] 599 pushw x + 0002F9 7B 13 [ 1] 600 ld a, (0x13, sp) + 0002FB 88 [ 1] 601 push a + 0002FC 1E 33 [ 2] 602 ldw x, (0x33, sp) + 0002FE FD [ 4] 603 call (x) + 0002FF 5B 03 [ 2] 604 addw sp, #3 + 000301 1E 2C [ 2] 605 ldw x, (0x2c, sp) + 000303 5C [ 1] 606 incw x + 000304 1F 2C [ 2] 607 ldw (0x2c, sp), x + 608 ; ../printf_large.c: 600: PTR++; + 000306 1E 05 [ 2] 609 ldw x, (0x05, sp) + 000308 5C [ 1] 610 incw x + 000309 1F 05 [ 2] 611 ldw (0x05, sp), x + 00030B 20 D6 [ 2] 612 jra 00143$ + 00030D 613 00313$: + 00030D 16 2C [ 2] 614 ldw y, (0x2c, sp) + 00030F 17 10 [ 2] 615 ldw (0x10, sp), y + 616 ; ../printf_large.c: 603: if ( left_justify && (length < width)) + 000311 0D 1C [ 1] 617 tnz (0x1c, sp) + 000313 26 03 [ 1] 618 jrne 00714$ + 000315 CCr04r02 [ 2] 619 jp 00160$ + 000318 620 00714$: + 000318 1E 28 [ 2] 621 ldw x, (0x28, sp) + 00031A 13 25 [ 2] 622 cpw x, (0x25, sp) + 00031C 25 03 [ 1] 623 jrc 00715$ + 00031E CCr04r02 [ 2] 624 jp 00160$ + 000321 625 00715$: + 626 ; ../printf_large.c: 605: width -= length; + 000321 1E 25 [ 2] 627 ldw x, (0x25, sp) + 000323 72 F0 28 [ 2] 628 subw x, (0x28, sp) + 000326 1F 2A [ 2] 629 ldw (0x2a, sp), x + 000328 1F 25 [ 2] 630 ldw (0x25, sp), x + 631 ; ../printf_large.c: 606: while( width-- != 0 ) + 00032A 16 2C [ 2] 632 ldw y, (0x2c, sp) + 00032C 17 29 [ 2] 633 ldw (0x29, sp), y + 00032E 16 25 [ 2] 634 ldw y, (0x25, sp) + 000330 17 2C [ 2] 635 ldw (0x2c, sp), y + 000332 636 00146$: + 000332 1E 2C [ 2] 637 ldw x, (0x2c, sp) + 000334 16 2C [ 2] 638 ldw y, (0x2c, sp) + 000336 90 5A [ 2] 639 decw y + 000338 17 2C [ 2] 640 ldw (0x2c, sp), y + 00033A 5D [ 2] 641 tnzw x + 00033B 26 03 [ 1] 642 jrne 00716$ + 00033D CCr03rFA [ 2] 643 jp 00314$ + 000340 644 00716$: + 645 ; ../printf_large.c: 608: OUTPUT_CHAR( ' ', p ); + 000340 1E 32 [ 2] 646 ldw x, (0x32, sp) + 000342 89 [ 2] 647 pushw x + 000343 4B 20 [ 1] 648 push #0x20 + 000345 1E 33 [ 2] 649 ldw x, (0x33, sp) + 000347 FD [ 4] 650 call (x) + 000348 5B 03 [ 2] 651 addw sp, #3 + 00034A 1E 29 [ 2] 652 ldw x, (0x29, sp) + 00034C 5C [ 1] 653 incw x + 00034D 1F 29 [ 2] 654 ldw (0x29, sp), x + 00034F 20 E1 [ 2] 655 jra 00146$ + 656 ; ../printf_large.c: 613: case 'P': + 000351 657 00152$: + 658 ; ../printf_large.c: 614: PTR = va_arg(ap,ptr_t); + 000351 1E 36 [ 2] 659 ldw x, (0x36, sp) + 000353 5C [ 1] 660 incw x + 000354 5C [ 1] 661 incw x + 000355 1F 2A [ 2] 662 ldw (0x2a, sp), x + 000357 1F 36 [ 2] 663 ldw (0x36, sp), x + 000359 1E 2A [ 2] 664 ldw x, (0x2a, sp) + 00035B 5A [ 2] 665 decw x + 00035C 5A [ 2] 666 decw x + 00035D 1F 2C [ 2] 667 ldw (0x2c, sp), x + 00035F 1F 2A [ 2] 668 ldw (0x2a, sp), x + 000361 FE [ 2] 669 ldw x, (x) + 000362 1F 2C [ 2] 670 ldw (0x2c, sp), x + 000364 1F 05 [ 2] 671 ldw (0x05, sp), x + 672 ; ../printf_large.c: 658: OUTPUT_CHAR('0', p); + 000366 1E 32 [ 2] 673 ldw x, (0x32, sp) + 000368 89 [ 2] 674 pushw x + 000369 4B 30 [ 1] 675 push #0x30 + 00036B 1E 33 [ 2] 676 ldw x, (0x33, sp) + 00036D FD [ 4] 677 call (x) + 00036E 5B 03 [ 2] 678 addw sp, #3 + 000370 1E 10 [ 2] 679 ldw x, (0x10, sp) + 000372 5C [ 1] 680 incw x + 000373 1F 2C [ 2] 681 ldw (0x2c, sp), x + 000375 1F 2A [ 2] 682 ldw (0x2a, sp), x + 683 ; ../printf_large.c: 659: OUTPUT_CHAR('x', p); + 000377 1E 32 [ 2] 684 ldw x, (0x32, sp) + 000379 89 [ 2] 685 pushw x + 00037A 4B 78 [ 1] 686 push #0x78 + 00037C 1E 33 [ 2] 687 ldw x, (0x33, sp) + 00037E FD [ 4] 688 call (x) + 00037F 5B 03 [ 2] 689 addw sp, #3 + 000381 1E 2A [ 2] 690 ldw x, (0x2a, sp) + 000383 5C [ 1] 691 incw x + 000384 1F 2C [ 2] 692 ldw (0x2c, sp), x + 000386 1F 2A [ 2] 693 ldw (0x2a, sp), x + 694 ; ../printf_large.c: 660: OUTPUT_2DIGITS( value.byte[1] ); + 000388 7B 06 [ 1] 695 ld a, (0x06, sp) + 00038A 6B 2D [ 1] 696 ld (0x2d, sp), a + 00038C 1E 32 [ 2] 697 ldw x, (0x32, sp) + 00038E 89 [ 2] 698 pushw x + 00038F 1E 32 [ 2] 699 ldw x, (0x32, sp) + 000391 89 [ 2] 700 pushw x + 000392 7B 2B [ 1] 701 ld a, (0x2b, sp) + 000394 88 [ 1] 702 push a + 000395 7B 32 [ 1] 703 ld a, (0x32, sp) + 000397 88 [ 1] 704 push a + 000398 CDr00r1A [ 4] 705 call _output_2digits + 00039B 5B 06 [ 2] 706 addw sp, #6 + 00039D 1E 2A [ 2] 707 ldw x, (0x2a, sp) + 00039F 5C [ 1] 708 incw x + 0003A0 5C [ 1] 709 incw x + 0003A1 1F 2C [ 2] 710 ldw (0x2c, sp), x + 0003A3 1F 2A [ 2] 711 ldw (0x2a, sp), x + 712 ; ../printf_large.c: 661: OUTPUT_2DIGITS( value.byte[0] ); + 0003A5 7B 05 [ 1] 713 ld a, (0x05, sp) + 0003A7 6B 2D [ 1] 714 ld (0x2d, sp), a + 0003A9 1E 32 [ 2] 715 ldw x, (0x32, sp) + 0003AB 89 [ 2] 716 pushw x + 0003AC 1E 32 [ 2] 717 ldw x, (0x32, sp) + 0003AE 89 [ 2] 718 pushw x + 0003AF 7B 2B [ 1] 719 ld a, (0x2b, sp) + 0003B1 88 [ 1] 720 push a + 0003B2 7B 32 [ 1] 721 ld a, (0x32, sp) + 0003B4 88 [ 1] 722 push a + 0003B5 CDr00r1A [ 4] 723 call _output_2digits + 0003B8 5B 06 [ 2] 724 addw sp, #6 + 0003BA 1E 2A [ 2] 725 ldw x, (0x2a, sp) + 0003BC 5C [ 1] 726 incw x + 0003BD 5C [ 1] 727 incw x + 0003BE 1F 2C [ 2] 728 ldw (0x2c, sp), x + 0003C0 1F 10 [ 2] 729 ldw (0x10, sp), x + 730 ; ../printf_large.c: 663: break; + 0003C2 20 3E [ 2] 731 jra 00160$ + 732 ; ../printf_large.c: 666: case 'I': + 0003C4 733 00154$: + 734 ; ../printf_large.c: 667: signed_argument = 1; + 0003C4 A6 01 [ 1] 735 ld a, #0x01 + 0003C6 6B 20 [ 1] 736 ld (0x20, sp), a + 737 ; ../printf_large.c: 668: radix = 10; + 0003C8 A6 0A [ 1] 738 ld a, #0x0a + 0003CA 6B 24 [ 1] 739 ld (0x24, sp), a + 740 ; ../printf_large.c: 669: break; + 0003CC 20 34 [ 2] 741 jra 00160$ + 742 ; ../printf_large.c: 671: case 'O': + 0003CE 743 00155$: + 744 ; ../printf_large.c: 672: radix = 8; + 0003CE A6 08 [ 1] 745 ld a, #0x08 + 0003D0 6B 24 [ 1] 746 ld (0x24, sp), a + 747 ; ../printf_large.c: 673: break; + 0003D2 20 2E [ 2] 748 jra 00160$ + 749 ; ../printf_large.c: 675: case 'U': + 0003D4 750 00156$: + 751 ; ../printf_large.c: 676: radix = 10; + 0003D4 A6 0A [ 1] 752 ld a, #0x0a + 0003D6 6B 24 [ 1] 753 ld (0x24, sp), a + 754 ; ../printf_large.c: 677: break; + 0003D8 20 28 [ 2] 755 jra 00160$ + 756 ; ../printf_large.c: 679: case 'X': + 0003DA 757 00157$: + 758 ; ../printf_large.c: 680: radix = 16; + 0003DA A6 10 [ 1] 759 ld a, #0x10 + 0003DC 6B 24 [ 1] 760 ld (0x24, sp), a + 761 ; ../printf_large.c: 681: break; + 0003DE 20 22 [ 2] 762 jra 00160$ + 763 ; ../printf_large.c: 683: case 'F': + 0003E0 764 00158$: + 765 ; ../printf_large.c: 684: float_argument=1; + 0003E0 A6 01 [ 1] 766 ld a, #0x01 + 0003E2 6B 23 [ 1] 767 ld (0x23, sp), a + 768 ; ../printf_large.c: 685: break; + 0003E4 20 1C [ 2] 769 jra 00160$ + 770 ; ../printf_large.c: 687: default: + 0003E6 771 00159$: + 772 ; ../printf_large.c: 689: OUTPUT_CHAR( c, p ); + 0003E6 1E 32 [ 2] 773 ldw x, (0x32, sp) + 0003E8 89 [ 2] 774 pushw x + 0003E9 7B 2F [ 1] 775 ld a, (0x2f, sp) + 0003EB 88 [ 1] 776 push a + 0003EC 1E 33 [ 2] 777 ldw x, (0x33, sp) + 0003EE FD [ 4] 778 call (x) + 0003EF 5B 03 [ 2] 779 addw sp, #3 + 0003F1 1E 10 [ 2] 780 ldw x, (0x10, sp) + 0003F3 5C [ 1] 781 incw x + 0003F4 1F 2C [ 2] 782 ldw (0x2c, sp), x + 0003F6 1F 10 [ 2] 783 ldw (0x10, sp), x + 784 ; ../printf_large.c: 872: return charsOutputted; + 0003F8 20 08 [ 2] 785 jra 00160$ + 786 ; ../printf_large.c: 691: } + 0003FA 787 00314$: + 0003FA 16 29 [ 2] 788 ldw y, (0x29, sp) + 0003FC 17 10 [ 2] 789 ldw (0x10, sp), y + 0003FE 16 2C [ 2] 790 ldw y, (0x2c, sp) + 000400 17 25 [ 2] 791 ldw (0x25, sp), y + 000402 792 00160$: + 793 ; ../printf_large.c: 693: if (float_argument) + 000402 0D 23 [ 1] 794 tnz (0x23, sp) + 000404 27 45 [ 1] 795 jreq 00226$ + 796 ; ../printf_large.c: 695: value.f = va_arg(ap, float); + 000406 1E 36 [ 2] 797 ldw x, (0x36, sp) + 000408 1C 00 04 [ 2] 798 addw x, #0x0004 + 00040B 1F 36 [ 2] 799 ldw (0x36, sp), x + 00040D 1D 00 04 [ 2] 800 subw x, #0x0004 + 000410 90 93 [ 1] 801 ldw y, x + 000412 90 EE 02 [ 2] 802 ldw y, (0x2, y) + 000415 FE [ 2] 803 ldw x, (x) + 000416 17 07 [ 2] 804 ldw (0x07, sp), y + 000418 1F 05 [ 2] 805 ldw (0x05, sp), x + 806 ; ../printf_large.c: 697: PTR="<NO FLOAT>"; + 00041A AEr00r00 [ 2] 807 ldw x, #(___str_0 + 0) + 00041D 1F 05 [ 2] 808 ldw (0x05, sp), x + 809 ; ../printf_large.c: 698: while (c=*PTR++) + 00041F 16 10 [ 2] 810 ldw y, (0x10, sp) + 000421 17 2C [ 2] 811 ldw (0x2c, sp), y + 000423 812 00161$: + 000423 16 05 [ 2] 813 ldw y, (0x05, sp) + 000425 17 28 [ 2] 814 ldw (0x28, sp), y + 000427 93 [ 1] 815 ldw x, y + 000428 5C [ 1] 816 incw x + 000429 1F 2A [ 2] 817 ldw (0x2a, sp), x + 00042B 1F 05 [ 2] 818 ldw (0x05, sp), x + 00042D 1E 28 [ 2] 819 ldw x, (0x28, sp) + 00042F F6 [ 1] 820 ld a, (x) + 000430 97 [ 1] 821 ld xl, a + 000431 4D [ 1] 822 tnz a + 000432 26 03 [ 1] 823 jrne 00719$ + 000434 CCr00rCA [ 2] 824 jp 00231$ + 000437 825 00719$: + 826 ; ../printf_large.c: 700: OUTPUT_CHAR (c, p); + 000437 16 32 [ 2] 827 ldw y, (0x32, sp) + 000439 90 89 [ 2] 828 pushw y + 00043B 9F [ 1] 829 ld a, xl + 00043C 88 [ 1] 830 push a + 00043D 1E 33 [ 2] 831 ldw x, (0x33, sp) + 00043F FD [ 4] 832 call (x) + 000440 5B 03 [ 2] 833 addw sp, #3 + 000442 1E 2C [ 2] 834 ldw x, (0x2c, sp) + 000444 5C [ 1] 835 incw x + 000445 1F 2C [ 2] 836 ldw (0x2c, sp), x + 000447 1F 10 [ 2] 837 ldw (0x10, sp), x + 000449 20 D8 [ 2] 838 jra 00161$ + 00044B 839 00226$: + 840 ; ../printf_large.c: 718: else if (radix != 0) + 00044B 0D 24 [ 1] 841 tnz (0x24, sp) + 00044D 26 03 [ 1] 842 jrne 00721$ + 00044F CCr00rCA [ 2] 843 jp 00231$ + 000452 844 00721$: + 845 ; ../printf_large.c: 723: unsigned char MEM_SPACE_BUF_PP *pstore = &store[5]; + 000452 1E 12 [ 2] 846 ldw x, (0x12, sp) + 000454 1F 2B [ 2] 847 ldw (0x2b, sp), x + 848 ; ../printf_large.c: 726: if (char_argument) + 000456 0D 21 [ 1] 849 tnz (0x21, sp) + 000458 27 21 [ 1] 850 jreq 00172$ + 851 ; ../printf_large.c: 728: value.l = va_arg(ap, char); + 00045A 1E 36 [ 2] 852 ldw x, (0x36, sp) + 00045C 5C [ 1] 853 incw x + 00045D 1F 36 [ 2] 854 ldw (0x36, sp), x + 00045F 1C FF FF [ 2] 855 addw x, #0xffff + 000462 F6 [ 1] 856 ld a, (x) + 000463 5F [ 1] 857 clrw x + 000464 97 [ 1] 858 ld xl, a + 000465 90 5F [ 1] 859 clrw y + 000467 1F 07 [ 2] 860 ldw (0x07, sp), x + 000469 17 05 [ 2] 861 ldw (0x05, sp), y + 862 ; ../printf_large.c: 729: if (!signed_argument) + 00046B 0D 20 [ 1] 863 tnz (0x20, sp) + 00046D 26 45 [ 1] 864 jrne 00173$ + 865 ; ../printf_large.c: 731: value.l &= 0xFF; + 00046F 1E 07 [ 2] 866 ldw x, (0x07, sp) + 000471 4F [ 1] 867 clr a + 000472 95 [ 1] 868 ld xh, a + 000473 90 5F [ 1] 869 clrw y + 000475 1F 07 [ 2] 870 ldw (0x07, sp), x + 000477 17 05 [ 2] 871 ldw (0x05, sp), y + 000479 20 39 [ 2] 872 jra 00173$ + 00047B 873 00172$: + 874 ; ../printf_large.c: 734: else if (long_argument) + 00047B 0D 22 [ 1] 875 tnz (0x22, sp) + 00047D 27 16 [ 1] 876 jreq 00169$ + 877 ; ../printf_large.c: 736: value.l = va_arg(ap, long); + 00047F 1E 36 [ 2] 878 ldw x, (0x36, sp) + 000481 1C 00 04 [ 2] 879 addw x, #0x0004 + 000484 1F 36 [ 2] 880 ldw (0x36, sp), x + 000486 1D 00 04 [ 2] 881 subw x, #0x0004 + 000489 90 93 [ 1] 882 ldw y, x + 00048B 90 EE 02 [ 2] 883 ldw y, (0x2, y) + 00048E FE [ 2] 884 ldw x, (x) + 00048F 17 07 [ 2] 885 ldw (0x07, sp), y + 000491 1F 05 [ 2] 886 ldw (0x05, sp), x + 000493 20 1F [ 2] 887 jra 00173$ + 000495 888 00169$: + 889 ; ../printf_large.c: 740: value.l = va_arg(ap, int); + 000495 1E 36 [ 2] 890 ldw x, (0x36, sp) + 000497 5C [ 1] 891 incw x + 000498 5C [ 1] 892 incw x + 000499 1F 36 [ 2] 893 ldw (0x36, sp), x + 00049B 5A [ 2] 894 decw x + 00049C 5A [ 2] 895 decw x + 00049D FE [ 2] 896 ldw x, (x) + 00049E 90 5F [ 1] 897 clrw y + 0004A0 5D [ 2] 898 tnzw x + 0004A1 2A 02 [ 1] 899 jrpl 00725$ + 0004A3 90 5A [ 2] 900 decw y + 0004A5 901 00725$: + 0004A5 1F 07 [ 2] 902 ldw (0x07, sp), x + 0004A7 17 05 [ 2] 903 ldw (0x05, sp), y + 904 ; ../printf_large.c: 741: if (!signed_argument) + 0004A9 0D 20 [ 1] 905 tnz (0x20, sp) + 0004AB 26 07 [ 1] 906 jrne 00173$ + 907 ; ../printf_large.c: 743: value.l &= 0xFFFF; + 0004AD 16 07 [ 2] 908 ldw y, (0x07, sp) + 0004AF 5F [ 1] 909 clrw x + 0004B0 17 07 [ 2] 910 ldw (0x07, sp), y + 0004B2 1F 05 [ 2] 911 ldw (0x05, sp), x + 0004B4 912 00173$: + 913 ; ../printf_large.c: 747: if ( signed_argument ) + 0004B4 0D 20 [ 1] 914 tnz (0x20, sp) + 0004B6 27 1D [ 1] 915 jreq 00178$ + 916 ; ../printf_large.c: 749: if (value.l < 0) + 0004B8 1E 05 [ 2] 917 ldw x, (0x05, sp) + 0004BA 2A 17 [ 1] 918 jrpl 00175$ + 919 ; ../printf_large.c: 750: value.l = -value.l; + 0004BC 16 07 [ 2] 920 ldw y, (0x07, sp) + 0004BE 17 03 [ 2] 921 ldw (0x03, sp), y + 0004C0 16 05 [ 2] 922 ldw y, (0x05, sp) + 0004C2 17 01 [ 2] 923 ldw (0x01, sp), y + 0004C4 16 03 [ 2] 924 ldw y, (0x03, sp) + 0004C6 90 50 [ 2] 925 negw y + 0004C8 1E 01 [ 2] 926 ldw x, (0x01, sp) + 0004CA 24 01 [ 1] 927 jrnc 00729$ + 0004CC 5C [ 1] 928 incw x + 0004CD 929 00729$: + 0004CD 50 [ 2] 930 negw x + 0004CE 17 07 [ 2] 931 ldw (0x07, sp), y + 0004D0 1F 05 [ 2] 932 ldw (0x05, sp), x + 933 ; ../printf_large.c: 752: signed_argument = 0; + 0004D2 C5 934 .byte 0xc5 + 0004D3 935 00175$: + 0004D3 0F 20 [ 1] 936 clr (0x20, sp) + 0004D5 937 00178$: + 938 ; ../printf_large.c: 756: lsd = 1; + 0004D5 A6 01 [ 1] 939 ld a, #0x01 + 0004D7 6B 2D [ 1] 940 ld (0x2d, sp), a + 941 ; ../printf_large.c: 758: do { + 0004D9 16 2B [ 2] 942 ldw y, (0x2b, sp) + 0004DB 17 29 [ 2] 943 ldw (0x29, sp), y + 0004DD 5F [ 1] 944 clrw x + 0004DE 1F 2B [ 2] 945 ldw (0x2b, sp), x + 0004E0 946 00182$: + 947 ; ../printf_large.c: 759: value.byte[4] = 0; + 0004E0 0F 09 [ 1] 948 clr (0x09, sp) + 949 ; ../printf_large.c: 761: calculate_digit(&value, radix); + 0004E2 1E 14 [ 2] 950 ldw x, (0x14, sp) + 0004E4 7B 24 [ 1] 951 ld a, (0x24, sp) + 0004E6 88 [ 1] 952 push a + 0004E7 89 [ 2] 953 pushw x + 0004E8 CDr00r4B [ 4] 954 call _calculate_digit + 0004EB 5B 03 [ 2] 955 addw sp, #3 + 956 ; ../printf_large.c: 765: if (!lsd) + 0004ED 0D 2D [ 1] 957 tnz (0x2d, sp) + 0004EF 26 23 [ 1] 958 jrne 00180$ + 959 ; ../printf_large.c: 767: *pstore = (value.byte[4] << 4) | (value.byte[4] >> 4) | *pstore; + 0004F1 1E 18 [ 2] 960 ldw x, (0x18, sp) + 0004F3 F6 [ 1] 961 ld a, (x) + 0004F4 4E [ 1] 962 swap a + 0004F5 A4 F0 [ 1] 963 and a, #0xf0 + 0004F7 97 [ 1] 964 ld xl, a + 0004F8 16 18 [ 2] 965 ldw y, (0x18, sp) + 0004FA 90 F6 [ 1] 966 ld a, (y) + 0004FC 4E [ 1] 967 swap a + 0004FD A4 0F [ 1] 968 and a, #0x0f + 0004FF 89 [ 2] 969 pushw x + 000500 1A 02 [ 1] 970 or a, (2, sp) + 000502 85 [ 2] 971 popw x + 000503 6B 28 [ 1] 972 ld (0x28, sp), a + 000505 1E 29 [ 2] 973 ldw x, (0x29, sp) + 000507 F6 [ 1] 974 ld a, (x) + 000508 1A 28 [ 1] 975 or a, (0x28, sp) + 00050A 1E 29 [ 2] 976 ldw x, (0x29, sp) + 00050C F7 [ 1] 977 ld (x), a + 978 ; ../printf_large.c: 768: pstore--; + 00050D 1E 29 [ 2] 979 ldw x, (0x29, sp) + 00050F 5A [ 2] 980 decw x + 000510 1F 29 [ 2] 981 ldw (0x29, sp), x + 000512 20 06 [ 2] 982 jra 00181$ + 000514 983 00180$: + 984 ; ../printf_large.c: 772: *pstore = value.byte[4]; + 000514 1E 16 [ 2] 985 ldw x, (0x16, sp) + 000516 F6 [ 1] 986 ld a, (x) + 000517 1E 29 [ 2] 987 ldw x, (0x29, sp) + 000519 F7 [ 1] 988 ld (x), a + 00051A 989 00181$: + 990 ; ../printf_large.c: 774: length++; + 00051A 1E 2B [ 2] 991 ldw x, (0x2b, sp) + 00051C 5C [ 1] 992 incw x + 00051D 1F 2B [ 2] 993 ldw (0x2b, sp), x + 994 ; ../printf_large.c: 775: lsd = !lsd; + 00051F 7B 2D [ 1] 995 ld a, (0x2d, sp) + 000521 A0 01 [ 1] 996 sub a, #0x01 + 000523 4F [ 1] 997 clr a + 000524 49 [ 1] 998 rlc a + 000525 6B 2D [ 1] 999 ld (0x2d, sp), a + 1000 ; ../printf_large.c: 776: } while( value.ul ); + 000527 1E 14 [ 2] 1001 ldw x, (0x14, sp) + 000529 90 93 [ 1] 1002 ldw y, x + 00052B 90 EE 02 [ 2] 1003 ldw y, (0x2, y) + 00052E 17 03 [ 2] 1004 ldw (0x03, sp), y + 000530 FE [ 2] 1005 ldw x, (x) + 000531 1F 01 [ 2] 1006 ldw (0x01, sp), x + 000533 1E 03 [ 2] 1007 ldw x, (0x03, sp) + 000535 26 A9 [ 1] 1008 jrne 00182$ + 000537 1E 01 [ 2] 1009 ldw x, (0x01, sp) + 000539 26 A5 [ 1] 1010 jrne 00182$ + 1011 ; ../printf_large.c: 778: if (width == 0) + 00053B 16 29 [ 2] 1012 ldw y, (0x29, sp) + 00053D 17 21 [ 2] 1013 ldw (0x21, sp), y + 00053F 16 2B [ 2] 1014 ldw y, (0x2b, sp) + 000541 17 23 [ 2] 1015 ldw (0x23, sp), y + 000543 1E 25 [ 2] 1016 ldw x, (0x25, sp) + 000545 26 05 [ 1] 1017 jrne 00186$ + 1018 ; ../printf_large.c: 783: width = 1; + 000547 AE 00 01 [ 2] 1019 ldw x, #0x0001 + 00054A 1F 25 [ 2] 1020 ldw (0x25, sp), x + 00054C 1021 00186$: + 1022 ; ../printf_large.c: 787: if (!zero_padding && !left_justify) + 00054C 0D 1D [ 1] 1023 tnz (0x1d, sp) + 00054E 26 33 [ 1] 1024 jrne 00191$ + 000550 0D 1C [ 1] 1025 tnz (0x1c, sp) + 000552 26 2F [ 1] 1026 jrne 00191$ + 1027 ; ../printf_large.c: 789: while ( width > (unsigned char) (length+1) ) + 000554 16 10 [ 2] 1028 ldw y, (0x10, sp) + 000556 17 29 [ 2] 1029 ldw (0x29, sp), y + 000558 16 25 [ 2] 1030 ldw y, (0x25, sp) + 00055A 17 2B [ 2] 1031 ldw (0x2b, sp), y + 00055C 1032 00187$: + 00055C 7B 24 [ 1] 1033 ld a, (0x24, sp) + 00055E 4C [ 1] 1034 inc a + 00055F 5F [ 1] 1035 clrw x + 000560 97 [ 1] 1036 ld xl, a + 000561 13 2B [ 2] 1037 cpw x, (0x2b, sp) + 000563 24 16 [ 1] 1038 jrnc 00316$ + 1039 ; ../printf_large.c: 791: OUTPUT_CHAR( ' ', p ); + 000565 1E 32 [ 2] 1040 ldw x, (0x32, sp) + 000567 89 [ 2] 1041 pushw x + 000568 4B 20 [ 1] 1042 push #0x20 + 00056A 1E 33 [ 2] 1043 ldw x, (0x33, sp) + 00056C FD [ 4] 1044 call (x) + 00056D 5B 03 [ 2] 1045 addw sp, #3 + 00056F 1E 29 [ 2] 1046 ldw x, (0x29, sp) + 000571 5C [ 1] 1047 incw x + 000572 1F 29 [ 2] 1048 ldw (0x29, sp), x + 1049 ; ../printf_large.c: 792: width--; + 000574 1E 2B [ 2] 1050 ldw x, (0x2b, sp) + 000576 5A [ 2] 1051 decw x + 000577 1F 2B [ 2] 1052 ldw (0x2b, sp), x + 000579 20 E1 [ 2] 1053 jra 00187$ + 00057B 1054 00316$: + 00057B 16 29 [ 2] 1055 ldw y, (0x29, sp) + 00057D 17 10 [ 2] 1056 ldw (0x10, sp), y + 00057F 16 2B [ 2] 1057 ldw y, (0x2b, sp) + 000581 17 25 [ 2] 1058 ldw (0x25, sp), y + 000583 1059 00191$: + 1060 ; ../printf_large.c: 796: if (signed_argument) // this now means the original value was negative + 000583 0D 20 [ 1] 1061 tnz (0x20, sp) + 000585 27 16 [ 1] 1062 jreq 00201$ + 1063 ; ../printf_large.c: 798: OUTPUT_CHAR( '-', p ); + 000587 1E 32 [ 2] 1064 ldw x, (0x32, sp) + 000589 89 [ 2] 1065 pushw x + 00058A 4B 2D [ 1] 1066 push #0x2d + 00058C 1E 33 [ 2] 1067 ldw x, (0x33, sp) + 00058E FD [ 4] 1068 call (x) + 00058F 5B 03 [ 2] 1069 addw sp, #3 + 000591 1E 10 [ 2] 1070 ldw x, (0x10, sp) + 000593 5C [ 1] 1071 incw x + 000594 1F 10 [ 2] 1072 ldw (0x10, sp), x + 1073 ; ../printf_large.c: 800: width--; + 000596 1E 25 [ 2] 1074 ldw x, (0x25, sp) + 000598 5A [ 2] 1075 decw x + 000599 1F 25 [ 2] 1076 ldw (0x25, sp), x + 00059B 20 36 [ 2] 1077 jra 00202$ + 00059D 1078 00201$: + 1079 ; ../printf_large.c: 802: else if (length != 0) + 00059D 1E 23 [ 2] 1080 ldw x, (0x23, sp) + 00059F 27 32 [ 1] 1081 jreq 00202$ + 1082 ; ../printf_large.c: 805: if (prefix_sign) + 0005A1 0D 1E [ 1] 1083 tnz (0x1e, sp) + 0005A3 27 16 [ 1] 1084 jreq 00196$ + 1085 ; ../printf_large.c: 807: OUTPUT_CHAR( '+', p ); + 0005A5 1E 32 [ 2] 1086 ldw x, (0x32, sp) + 0005A7 89 [ 2] 1087 pushw x + 0005A8 4B 2B [ 1] 1088 push #0x2b + 0005AA 1E 33 [ 2] 1089 ldw x, (0x33, sp) + 0005AC FD [ 4] 1090 call (x) + 0005AD 5B 03 [ 2] 1091 addw sp, #3 + 0005AF 1E 10 [ 2] 1092 ldw x, (0x10, sp) + 0005B1 5C [ 1] 1093 incw x + 0005B2 1F 10 [ 2] 1094 ldw (0x10, sp), x + 1095 ; ../printf_large.c: 809: width--; + 0005B4 1E 25 [ 2] 1096 ldw x, (0x25, sp) + 0005B6 5A [ 2] 1097 decw x + 0005B7 1F 25 [ 2] 1098 ldw (0x25, sp), x + 0005B9 20 18 [ 2] 1099 jra 00202$ + 0005BB 1100 00196$: + 1101 ; ../printf_large.c: 811: else if (prefix_space) + 0005BB 0D 1F [ 1] 1102 tnz (0x1f, sp) + 0005BD 27 14 [ 1] 1103 jreq 00202$ + 1104 ; ../printf_large.c: 813: OUTPUT_CHAR( ' ', p ); + 0005BF 1E 32 [ 2] 1105 ldw x, (0x32, sp) + 0005C1 89 [ 2] 1106 pushw x + 0005C2 4B 20 [ 1] 1107 push #0x20 + 0005C4 1E 33 [ 2] 1108 ldw x, (0x33, sp) + 0005C6 FD [ 4] 1109 call (x) + 0005C7 5B 03 [ 2] 1110 addw sp, #3 + 0005C9 1E 10 [ 2] 1111 ldw x, (0x10, sp) + 0005CB 5C [ 1] 1112 incw x + 0005CC 1F 10 [ 2] 1113 ldw (0x10, sp), x + 1114 ; ../printf_large.c: 815: width--; + 0005CE 1E 25 [ 2] 1115 ldw x, (0x25, sp) + 0005D0 5A [ 2] 1116 decw x + 0005D1 1F 25 [ 2] 1117 ldw (0x25, sp), x + 0005D3 1118 00202$: + 1119 ; ../printf_large.c: 820: if (!left_justify) + 0005D3 0D 1C [ 1] 1120 tnz (0x1c, sp) + 0005D5 26 30 [ 1] 1121 jrne 00210$ + 1122 ; ../printf_large.c: 822: while ( width-- > length ) + 0005D7 16 10 [ 2] 1123 ldw y, (0x10, sp) + 0005D9 17 29 [ 2] 1124 ldw (0x29, sp), y + 0005DB 16 25 [ 2] 1125 ldw y, (0x25, sp) + 0005DD 17 2B [ 2] 1126 ldw (0x2b, sp), y + 0005DF 1127 00203$: + 0005DF 16 2B [ 2] 1128 ldw y, (0x2b, sp) + 0005E1 1E 2B [ 2] 1129 ldw x, (0x2b, sp) + 0005E3 5A [ 2] 1130 decw x + 0005E4 1F 2B [ 2] 1131 ldw (0x2b, sp), x + 0005E6 93 [ 1] 1132 ldw x, y + 0005E7 13 23 [ 2] 1133 cpw x, (0x23, sp) + 0005E9 23 30 [ 2] 1134 jrule 00317$ + 1135 ; ../printf_large.c: 824: OUTPUT_CHAR( zero_padding ? '0' : ' ', p ); + 0005EB 0D 1D [ 1] 1136 tnz (0x1d, sp) + 0005ED 27 04 [ 1] 1137 jreq 00236$ + 0005EF AE 00 30 [ 2] 1138 ldw x, #0x0030 + 0005F2 BC 1139 .byte 0xbc + 0005F3 1140 00236$: + 0005F3 AE 00 20 [ 2] 1141 ldw x, #0x0020 + 0005F6 1142 00237$: + 0005F6 9F [ 1] 1143 ld a, xl + 0005F7 1E 32 [ 2] 1144 ldw x, (0x32, sp) + 0005F9 89 [ 2] 1145 pushw x + 0005FA 88 [ 1] 1146 push a + 0005FB 1E 33 [ 2] 1147 ldw x, (0x33, sp) + 0005FD FD [ 4] 1148 call (x) + 0005FE 5B 03 [ 2] 1149 addw sp, #3 + 000600 1E 29 [ 2] 1150 ldw x, (0x29, sp) + 000602 5C [ 1] 1151 incw x + 000603 1F 29 [ 2] 1152 ldw (0x29, sp), x + 000605 20 D8 [ 2] 1153 jra 00203$ + 000607 1154 00210$: + 1155 ; ../printf_large.c: 830: if (width > length) + 000607 1E 25 [ 2] 1156 ldw x, (0x25, sp) + 000609 13 23 [ 2] 1157 cpw x, (0x23, sp) + 00060B 23 09 [ 2] 1158 jrule 00207$ + 1159 ; ../printf_large.c: 831: width -= length; + 00060D 1E 25 [ 2] 1160 ldw x, (0x25, sp) + 00060F 72 F0 23 [ 2] 1161 subw x, (0x23, sp) + 000612 1F 28 [ 2] 1162 ldw (0x28, sp), x + 000614 20 0D [ 2] 1163 jra 00309$ + 000616 1164 00207$: + 1165 ; ../printf_large.c: 833: width = 0; + 000616 5F [ 1] 1166 clrw x + 000617 1F 28 [ 2] 1167 ldw (0x28, sp), x + 1168 ; ../printf_large.c: 872: return charsOutputted; + 000619 20 08 [ 2] 1169 jra 00309$ + 1170 ; ../printf_large.c: 837: while( length-- ) + 00061B 1171 00317$: + 00061B 16 29 [ 2] 1172 ldw y, (0x29, sp) + 00061D 17 10 [ 2] 1173 ldw (0x10, sp), y + 00061F 16 2B [ 2] 1174 ldw y, (0x2b, sp) + 000621 17 28 [ 2] 1175 ldw (0x28, sp), y + 000623 1176 00309$: + 000623 16 21 [ 2] 1177 ldw y, (0x21, sp) + 000625 17 2B [ 2] 1178 ldw (0x2b, sp), y + 000627 16 10 [ 2] 1179 ldw y, (0x10, sp) + 000629 17 25 [ 2] 1180 ldw (0x25, sp), y + 00062B 1181 00215$: + 00062B 1E 23 [ 2] 1182 ldw x, (0x23, sp) + 00062D 16 23 [ 2] 1183 ldw y, (0x23, sp) + 00062F 90 5A [ 2] 1184 decw y + 000631 17 23 [ 2] 1185 ldw (0x23, sp), y + 000633 5D [ 2] 1186 tnzw x + 000634 27 3D [ 1] 1187 jreq 00318$ + 1188 ; ../printf_large.c: 839: lsd = !lsd; + 000636 7B 2D [ 1] 1189 ld a, (0x2d, sp) + 000638 A0 01 [ 1] 1190 sub a, #0x01 + 00063A 4F [ 1] 1191 clr a + 00063B 49 [ 1] 1192 rlc a + 1193 ; ../printf_large.c: 840: if (!lsd) + 00063C 6B 2D [ 1] 1194 ld (0x2d, sp), a + 00063E 26 0E [ 1] 1195 jrne 00213$ + 1196 ; ../printf_large.c: 842: pstore++; + 000640 1E 2B [ 2] 1197 ldw x, (0x2b, sp) + 000642 5C [ 1] 1198 incw x + 1199 ; ../printf_large.c: 843: value.byte[4] = *pstore >> 4; + 000643 1F 2B [ 2] 1200 ldw (0x2b, sp), x + 000645 F6 [ 1] 1201 ld a, (x) + 000646 4E [ 1] 1202 swap a + 000647 A4 0F [ 1] 1203 and a, #0x0f + 000649 1E 16 [ 2] 1204 ldw x, (0x16, sp) + 00064B F7 [ 1] 1205 ld (x), a + 00064C 20 08 [ 2] 1206 jra 00214$ + 00064E 1207 00213$: + 1208 ; ../printf_large.c: 847: value.byte[4] = *pstore & 0x0F; + 00064E 1E 2B [ 2] 1209 ldw x, (0x2b, sp) + 000650 F6 [ 1] 1210 ld a, (x) + 000651 A4 0F [ 1] 1211 and a, #0x0f + 000653 1E 16 [ 2] 1212 ldw x, (0x16, sp) + 000655 F7 [ 1] 1213 ld (x), a + 000656 1214 00214$: + 1215 ; ../printf_large.c: 850: output_digit( value.byte[4], lower_case, output_char, p ); + 000656 1E 1A [ 2] 1216 ldw x, (0x1a, sp) + 000658 F6 [ 1] 1217 ld a, (x) + 000659 6B 2A [ 1] 1218 ld (0x2a, sp), a + 00065B 1E 32 [ 2] 1219 ldw x, (0x32, sp) + 00065D 89 [ 2] 1220 pushw x + 00065E 1E 32 [ 2] 1221 ldw x, (0x32, sp) + 000660 89 [ 2] 1222 pushw x + 000661 7B 2B [ 1] 1223 ld a, (0x2b, sp) + 000663 88 [ 1] 1224 push a + 000664 7B 2F [ 1] 1225 ld a, (0x2f, sp) + 000666 88 [ 1] 1226 push a + 000667 CDr00r00 [ 4] 1227 call _output_digit + 00066A 5B 06 [ 2] 1228 addw sp, #6 + 1229 ; ../printf_large.c: 851: charsOutputted++; + 00066C 1E 25 [ 2] 1230 ldw x, (0x25, sp) + 00066E 5C [ 1] 1231 incw x + 00066F 1F 25 [ 2] 1232 ldw (0x25, sp), x + 000671 20 B8 [ 2] 1233 jra 00215$ + 000673 1234 00318$: + 000673 16 25 [ 2] 1235 ldw y, (0x25, sp) + 000675 17 10 [ 2] 1236 ldw (0x10, sp), y + 1237 ; ../printf_large.c: 856: if (left_justify) + 000677 0D 1C [ 1] 1238 tnz (0x1c, sp) + 000679 26 03 [ 1] 1239 jrne 00752$ + 00067B CCr00rCA [ 2] 1240 jp 00231$ + 00067E 1241 00752$: + 1242 ; ../printf_large.c: 858: while (width-- > 0) + 00067E 16 25 [ 2] 1243 ldw y, (0x25, sp) + 000680 17 2C [ 2] 1244 ldw (0x2c, sp), y + 000682 16 28 [ 2] 1245 ldw y, (0x28, sp) + 000684 17 2A [ 2] 1246 ldw (0x2a, sp), y + 000686 1247 00218$: + 000686 1E 2A [ 2] 1248 ldw x, (0x2a, sp) + 000688 16 2A [ 2] 1249 ldw y, (0x2a, sp) + 00068A 90 5A [ 2] 1250 decw y + 00068C 17 2A [ 2] 1251 ldw (0x2a, sp), y + 00068E 5D [ 2] 1252 tnzw x + 00068F 26 03 [ 1] 1253 jrne 00753$ + 000691 CCr00rCA [ 2] 1254 jp 00231$ + 000694 1255 00753$: + 1256 ; ../printf_large.c: 860: OUTPUT_CHAR(' ', p); + 000694 1E 32 [ 2] 1257 ldw x, (0x32, sp) + 000696 89 [ 2] 1258 pushw x + 000697 4B 20 [ 1] 1259 push #0x20 + 000699 1E 33 [ 2] 1260 ldw x, (0x33, sp) + 00069B FD [ 4] 1261 call (x) + 00069C 5B 03 [ 2] 1262 addw sp, #3 + 00069E 1E 2C [ 2] 1263 ldw x, (0x2c, sp) + 0006A0 5C [ 1] 1264 incw x + 0006A1 1F 2C [ 2] 1265 ldw (0x2c, sp), x + 0006A3 1F 10 [ 2] 1266 ldw (0x10, sp), x + 0006A5 20 DF [ 2] 1267 jra 00218$ + 0006A7 1268 00229$: + 1269 ; ../printf_large.c: 868: OUTPUT_CHAR( c, p ); + 0006A7 1E 32 [ 2] 1270 ldw x, (0x32, sp) + 0006A9 89 [ 2] 1271 pushw x + 0006AA 7B 2F [ 1] 1272 ld a, (0x2f, sp) + 0006AC 88 [ 1] 1273 push a + 0006AD 1E 33 [ 2] 1274 ldw x, (0x33, sp) + 0006AF FD [ 4] 1275 call (x) + 0006B0 5B 03 [ 2] 1276 addw sp, #3 + 0006B2 1E 10 [ 2] 1277 ldw x, (0x10, sp) + 0006B4 5C [ 1] 1278 incw x + 0006B5 1F 10 [ 2] 1279 ldw (0x10, sp), x + 0006B7 CCr00rCA [ 2] 1280 jp 00231$ + 0006BA 1281 00233$: + 1282 ; ../printf_large.c: 872: return charsOutputted; + 0006BA 1E 10 [ 2] 1283 ldw x, (0x10, sp) + 1284 ; ../printf_large.c: 873: } + 0006BC 5B 2D [ 2] 1285 addw sp, #45 + 0006BE 81 [ 4] 1286 ret + 1287 .area CODE + 1288 .area CONST + 1289 .area CONST + 000000 1290 ___str_0: + 000000 3C 4E 4F 20 46 4C 4F 1291 .ascii "<NO FLOAT>" + 41 54 3E + 00000A 00 1292 .db 0x00 + 1293 .area CODE + 1294 .area INITIALIZER + 1295 .area CABS (ABS) diff --git a/device/lib/stm8/printf_large.rel b/device/lib/stm8/printf_large.rel new file mode 100644 index 0000000..0c0fb9d --- /dev/null +++ b/device/lib/stm8/printf_large.rel @@ -0,0 +1,582 @@ +XH3 +H B areas 3 global symbols +M printf_large +O -mstm8 +S .__.ABS. Def000000 +S _strlen Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size B flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 6BF flags 0 addr 0 +S __print_format Def0000AE +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 03 AB 30 A1 39 23 08 AB 07 0D 04 27 +R 00 00 00 09 +T 00 00 0D 02 AB 20 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 1E 07 89 88 1E 08 FD 5B 03 81 +R 00 00 00 09 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 88 7B 04 4E A4 0F 6B 01 1E 08 89 1E 08 +R 00 00 00 09 +T 00 00 27 89 7B 09 88 7B 06 88 CD 00 00 5B 06 7B +R 00 00 00 09 00 0B 00 09 +T 00 00 34 04 A4 0F 6B 01 1E 08 89 1E 08 89 7B 09 +R 00 00 00 09 +T 00 00 41 88 7B 06 88 CD 00 00 5B 07 81 +R 00 00 00 09 00 08 00 09 +T 00 00 4B +R 00 00 00 09 +T 00 00 4B 52 09 16 0C 17 01 93 90 EE 02 FE 17 08 +R 00 00 00 09 +T 00 00 58 1F 06 1E 01 1C 00 04 1F 03 A6 20 6B 05 +R 00 00 00 09 +T 00 00 65 +R 00 00 00 09 +T 00 00 65 1E 03 F6 48 97 7B 06 48 4F 49 89 1A 02 +R 00 00 00 09 +T 00 00 72 85 1E 03 F7 08 09 09 08 09 07 09 06 11 +R 00 00 00 09 +T 00 00 7F 0E 25 1C 1E 03 F6 10 0E 1E 03 F7 7B 09 +R 00 00 00 09 +T 00 00 8C AA 01 90 97 7B 08 90 95 7B 07 97 7B 06 +R 00 00 00 09 +T 00 00 99 95 17 08 1F 06 +R 00 00 00 09 +T 00 00 9E +R 00 00 00 09 +T 00 00 9E 0A 05 26 C3 1E 01 16 08 EF 02 16 06 FF +R 00 00 00 09 +T 00 00 AB 5B 09 81 +R 00 00 00 09 +T 00 00 AE +R 00 00 00 09 +T 00 00 AE 52 2D 5F 1F 10 96 1C 00 0F 1F 12 96 1C +R 00 00 00 09 +T 00 00 BB 00 05 1F 14 1C 00 04 1F 16 1F 18 16 16 +R 00 00 00 09 +T 00 00 C8 17 1A +R 00 00 00 09 +T 00 00 CA +R 00 00 00 09 +T 00 00 CA 1E 34 F6 5C 1F 34 6B 2D 26 03 CC 06 BA +R 00 00 00 09 00 0E 00 09 +T 00 00 D7 +R 00 00 00 09 +T 00 00 D7 7B 2D A1 25 27 03 CC 06 A7 +R 00 00 00 09 00 0A 00 09 +T 00 00 E0 +R 00 00 00 09 +T 00 00 E0 0F 1C 0F 1D 0F 1E 0F 1F 0F 20 0F 21 0F +R 00 00 00 09 +T 00 00 ED 22 0F 23 0F 24 5F 1F 25 AE FF FF 1F 2A +R 00 00 00 09 +T 00 00 FA 16 34 17 28 +R 00 00 00 09 +T 00 00 FE +R 00 00 00 09 +T 00 00 FE 1E 28 F6 6B 2D 1E 28 5C 1F 28 1F 34 7B +R 00 00 00 09 +T 00 01 0B 2D A1 25 26 12 1E 32 89 7B 2F 88 1E 33 +R 00 00 00 09 +T 00 01 18 FD 5B 03 1E 10 5C 1F 10 20 A8 +R 00 00 00 09 +T 00 01 22 +R 00 00 00 09 +T 00 01 22 7B 2D A1 30 25 49 7B 2D A1 39 22 43 1E +R 00 00 00 09 +T 00 01 2F 2A 5C 26 22 1E 25 58 58 72 FB 25 58 1F +R 00 00 00 09 +T 00 01 3C 03 0F 2C 1E 03 72 FB 2C 1F 26 1D 00 30 +R 00 00 00 09 +T 00 01 49 1F 2C 1F 25 26 AF A6 01 6B 1D 20 A9 +R 00 00 00 09 +T 00 01 55 +R 00 00 00 09 +T 00 01 55 1E 2A 58 58 72 FB 2A 58 1F 03 0F 2C 1E +R 00 00 00 09 +T 00 01 62 03 72 FB 2C 1F 2A 1D 00 30 1F 2C 1F 2A +R 00 00 00 09 +T 00 01 6F 20 8D +R 00 00 00 09 +T 00 01 71 +R 00 00 00 09 +T 00 01 71 7B 2D A1 2E 26 0E 1E 2A 5C 27 03 CC +R 00 00 00 09 +T 00 01 7D 00 FE +R 00 00 00 09 00 03 00 09 +T 00 01 7F +R 00 00 00 09 +T 00 01 7F 5F 1F 2A CC 00 FE +R 00 00 00 09 00 07 00 09 +T 00 01 85 +R 00 00 00 09 +T 00 01 85 7B 2D A1 61 25 11 7B 2D A1 7A 22 0B 7B +R 00 00 00 09 +T 00 01 92 2D A4 DF 6B 2D A6 01 6B 27 C5 +R 00 00 00 09 +T 00 01 9C +R 00 00 00 09 +T 00 01 9C 0F 27 +R 00 00 00 09 +T 00 01 9E +R 00 00 00 09 +T 00 01 9E 7B 2D A1 20 26 03 CC 02 4B +R 00 00 00 09 00 0A 00 09 +T 00 01 A7 +R 00 00 00 09 +T 00 01 A7 7B 2D A1 2B 26 03 CC 02 44 +R 00 00 00 09 00 0A 00 09 +T 00 01 B0 +R 00 00 00 09 +T 00 01 B0 7B 2D A1 2D 26 03 CC 02 3D +R 00 00 00 09 00 0A 00 09 +T 00 01 B9 +R 00 00 00 09 +T 00 01 B9 7B 2D A1 42 26 03 CC 02 52 +R 00 00 00 09 00 0A 00 09 +T 00 01 C2 +R 00 00 00 09 +T 00 01 C2 7B 2D A1 43 26 03 CC 02 60 +R 00 00 00 09 00 0A 00 09 +T 00 01 CB +R 00 00 00 09 +T 00 01 CB 7B 2D A1 44 26 03 CC 03 C4 +R 00 00 00 09 00 0A 00 09 +T 00 01 D4 +R 00 00 00 09 +T 00 01 D4 7B 2D A1 46 26 03 CC 03 E0 +R 00 00 00 09 00 0A 00 09 +T 00 01 DD +R 00 00 00 09 +T 00 01 DD 7B 2D A1 48 26 03 CC 00 FE +R 00 00 00 09 00 0A 00 09 +T 00 01 E6 +R 00 00 00 09 +T 00 01 E6 7B 2D A1 49 26 03 CC 03 C4 +R 00 00 00 09 00 0A 00 09 +T 00 01 EF +R 00 00 00 09 +T 00 01 EF 7B 2D A1 4A 26 03 CC 00 FE +R 00 00 00 09 00 0A 00 09 +T 00 01 F8 +R 00 00 00 09 +T 00 01 F8 7B 2D A1 4C 27 5B 7B 2D A1 4F 26 03 CC +R 00 00 00 09 +T 00 02 05 03 CE +R 00 00 00 09 00 03 00 09 +T 00 02 07 +R 00 00 00 09 +T 00 02 07 7B 2D A1 50 26 03 CC 03 51 +R 00 00 00 09 00 0A 00 09 +T 00 02 10 +R 00 00 00 09 +T 00 02 10 7B 2D A1 53 27 74 7B 2D A1 54 26 03 CC +R 00 00 00 09 +T 00 02 1D 00 FE +R 00 00 00 09 00 03 00 09 +T 00 02 1F +R 00 00 00 09 +T 00 02 1F 7B 2D A1 55 26 03 CC 03 D4 +R 00 00 00 09 00 0A 00 09 +T 00 02 28 +R 00 00 00 09 +T 00 02 28 7B 2D A1 58 26 03 CC 03 DA +R 00 00 00 09 00 0A 00 09 +T 00 02 31 +R 00 00 00 09 +T 00 02 31 7B 2D A1 5A 26 03 CC 00 FE +R 00 00 00 09 00 0A 00 09 +T 00 02 3A +R 00 00 00 09 +T 00 02 3A CC 03 E6 +R 00 00 00 09 00 04 00 09 +T 00 02 3D +R 00 00 00 09 +T 00 02 3D A6 01 6B 1C CC 00 FE +R 00 00 00 09 00 08 00 09 +T 00 02 44 +R 00 00 00 09 +T 00 02 44 A6 01 6B 1E CC 00 FE +R 00 00 00 09 00 08 00 09 +T 00 02 4B +R 00 00 00 09 +T 00 02 4B A6 01 6B 1F CC 00 FE +R 00 00 00 09 00 08 00 09 +T 00 02 52 +R 00 00 00 09 +T 00 02 52 A6 01 6B 21 CC 00 FE +R 00 00 00 09 00 08 00 09 +T 00 02 59 +R 00 00 00 09 +T 00 02 59 A6 01 6B 22 CC 00 FE +R 00 00 00 09 00 08 00 09 +T 00 02 60 +R 00 00 00 09 +T 00 02 60 0D 21 27 0B 1E 36 5C 1F 36 1C FF FF F6 +R 00 00 00 09 +T 00 02 6D 20 0A +R 00 00 00 09 +T 00 02 6F +R 00 00 00 09 +T 00 02 6F 1E 36 5C 5C 1F 36 5A 5A E6 01 +R 00 00 00 09 +T 00 02 79 +R 00 00 00 09 +T 00 02 79 1E 32 89 88 1E 33 FD 5B 03 1E 10 5C 1F +R 00 00 00 09 +T 00 02 86 10 CC 04 02 +R 00 00 00 09 00 05 00 09 +T 00 02 8A +R 00 00 00 09 +T 00 02 8A 1E 36 5C 5C 1F 36 5A 5A FE 1F 05 89 CD +R 00 00 00 09 +T 00 02 97 00 00 5B 02 1F 28 1E 2A 5C 26 04 16 28 +R 00 00 00 09 02 03 00 01 +T 00 02 A4 17 2A +R 00 00 00 09 +T 00 02 A6 +R 00 00 00 09 +T 00 02 A6 0D 1C 26 35 1E 28 13 25 24 2F 1E 25 72 +R 00 00 00 09 +T 00 02 B3 F0 28 16 10 17 25 1F 2C +R 00 00 00 09 +T 00 02 BB +R 00 00 00 09 +T 00 02 BB 1E 2C 16 2C 90 5A 17 2C 5D 27 11 1E 32 +R 00 00 00 09 +T 00 02 C8 89 4B 20 1E 33 FD 5B 03 1E 25 5C 1F 25 +R 00 00 00 09 +T 00 02 D5 20 E4 +R 00 00 00 09 +T 00 02 D7 +R 00 00 00 09 +T 00 02 D7 16 25 17 10 16 2C 17 25 +R 00 00 00 09 +T 00 02 DF +R 00 00 00 09 +T 00 02 DF 16 10 17 2C +R 00 00 00 09 +T 00 02 E3 +R 00 00 00 09 +T 00 02 E3 1E 05 F6 6B 11 27 23 1E 2A A3 00 00 2D +R 00 00 00 09 +T 00 02 F0 1C 1E 2A 5A 1F 2A 1E 32 89 7B 13 88 1E +R 00 00 00 09 +T 00 02 FD 33 FD 5B 03 1E 2C 5C 1F 2C 1E 05 5C 1F +R 00 00 00 09 +T 00 03 0A 05 20 D6 +R 00 00 00 09 +T 00 03 0D +R 00 00 00 09 +T 00 03 0D 16 2C 17 10 0D 1C 26 03 CC 04 02 +R 00 00 00 09 00 0C 00 09 +T 00 03 18 +R 00 00 00 09 +T 00 03 18 1E 28 13 25 25 03 CC 04 02 +R 00 00 00 09 00 0A 00 09 +T 00 03 21 +R 00 00 00 09 +T 00 03 21 1E 25 72 F0 28 1F 2A 1F 25 16 2C 17 29 +R 00 00 00 09 +T 00 03 2E 16 25 17 2C +R 00 00 00 09 +T 00 03 32 +R 00 00 00 09 +T 00 03 32 1E 2C 16 2C 90 5A 17 2C 5D 26 03 CC +R 00 00 00 09 +T 00 03 3E 03 FA +R 00 00 00 09 00 03 00 09 +T 00 03 40 +R 00 00 00 09 +T 00 03 40 1E 32 89 4B 20 1E 33 FD 5B 03 1E 29 5C +R 00 00 00 09 +T 00 03 4D 1F 29 20 E1 +R 00 00 00 09 +T 00 03 51 +R 00 00 00 09 +T 00 03 51 1E 36 5C 5C 1F 2A 1F 36 1E 2A 5A 5A 1F +R 00 00 00 09 +T 00 03 5E 2C 1F 2A FE 1F 2C 1F 05 1E 32 89 4B 30 +R 00 00 00 09 +T 00 03 6B 1E 33 FD 5B 03 1E 10 5C 1F 2C 1F 2A 1E +R 00 00 00 09 +T 00 03 78 32 89 4B 78 1E 33 FD 5B 03 1E 2A 5C 1F +R 00 00 00 09 +T 00 03 85 2C 1F 2A 7B 06 6B 2D 1E 32 89 1E 32 89 +R 00 00 00 09 +T 00 03 92 7B 2B 88 7B 32 88 CD 00 1A 5B 06 1E 2A +R 00 00 00 09 00 0A 00 09 +T 00 03 9F 5C 5C 1F 2C 1F 2A 7B 05 6B 2D 1E 32 89 +R 00 00 00 09 +T 00 03 AC 1E 32 89 7B 2B 88 7B 32 88 CD 00 1A 5B +R 00 00 00 09 00 0D 00 09 +T 00 03 B9 06 1E 2A 5C 5C 1F 2C 1F 10 20 3E +R 00 00 00 09 +T 00 03 C4 +R 00 00 00 09 +T 00 03 C4 A6 01 6B 20 A6 0A 6B 24 20 34 +R 00 00 00 09 +T 00 03 CE +R 00 00 00 09 +T 00 03 CE A6 08 6B 24 20 2E +R 00 00 00 09 +T 00 03 D4 +R 00 00 00 09 +T 00 03 D4 A6 0A 6B 24 20 28 +R 00 00 00 09 +T 00 03 DA +R 00 00 00 09 +T 00 03 DA A6 10 6B 24 20 22 +R 00 00 00 09 +T 00 03 E0 +R 00 00 00 09 +T 00 03 E0 A6 01 6B 23 20 1C +R 00 00 00 09 +T 00 03 E6 +R 00 00 00 09 +T 00 03 E6 1E 32 89 7B 2F 88 1E 33 FD 5B 03 1E 10 +R 00 00 00 09 +T 00 03 F3 5C 1F 2C 1F 10 20 08 +R 00 00 00 09 +T 00 03 FA +R 00 00 00 09 +T 00 03 FA 16 29 17 10 16 2C 17 25 +R 00 00 00 09 +T 00 04 02 +R 00 00 00 09 +T 00 04 02 0D 23 27 45 1E 36 1C 00 04 1F 36 1D +R 00 00 00 09 +T 00 04 0E 00 04 90 93 90 EE 02 FE 17 07 1F 05 AE +R 00 00 00 09 +T 00 04 1B 00 00 1F 05 16 10 17 2C +R 00 00 00 09 00 03 00 07 +T 00 04 23 +R 00 00 00 09 +T 00 04 23 16 05 17 28 93 5C 1F 2A 1F 05 1E 28 F6 +R 00 00 00 09 +T 00 04 30 97 4D 26 03 CC 00 CA +R 00 00 00 09 00 08 00 09 +T 00 04 37 +R 00 00 00 09 +T 00 04 37 16 32 90 89 9F 88 1E 33 FD 5B 03 1E 2C +R 00 00 00 09 +T 00 04 44 5C 1F 2C 1F 10 20 D8 +R 00 00 00 09 +T 00 04 4B +R 00 00 00 09 +T 00 04 4B 0D 24 26 03 CC 00 CA +R 00 00 00 09 00 08 00 09 +T 00 04 52 +R 00 00 00 09 +T 00 04 52 1E 12 1F 2B 0D 21 27 21 1E 36 5C 1F 36 +R 00 00 00 09 +T 00 04 5F 1C FF FF F6 5F 97 90 5F 1F 07 17 05 0D +R 00 00 00 09 +T 00 04 6C 20 26 45 1E 07 4F 95 90 5F 1F 07 17 05 +R 00 00 00 09 +T 00 04 79 20 39 +R 00 00 00 09 +T 00 04 7B +R 00 00 00 09 +T 00 04 7B 0D 22 27 16 1E 36 1C 00 04 1F 36 1D +R 00 00 00 09 +T 00 04 87 00 04 90 93 90 EE 02 FE 17 07 1F 05 20 +R 00 00 00 09 +T 00 04 94 1F +R 00 00 00 09 +T 00 04 95 +R 00 00 00 09 +T 00 04 95 1E 36 5C 5C 1F 36 5A 5A FE 90 5F 5D 2A +R 00 00 00 09 +T 00 04 A2 02 90 5A +R 00 00 00 09 +T 00 04 A5 +R 00 00 00 09 +T 00 04 A5 1F 07 17 05 0D 20 26 07 16 07 5F 17 07 +R 00 00 00 09 +T 00 04 B2 1F 05 +R 00 00 00 09 +T 00 04 B4 +R 00 00 00 09 +T 00 04 B4 0D 20 27 1D 1E 05 2A 17 16 07 17 03 16 +R 00 00 00 09 +T 00 04 C1 05 17 01 16 03 90 50 1E 01 24 01 5C +R 00 00 00 09 +T 00 04 CD +R 00 00 00 09 +T 00 04 CD 50 17 07 1F 05 C5 +R 00 00 00 09 +T 00 04 D3 +R 00 00 00 09 +T 00 04 D3 0F 20 +R 00 00 00 09 +T 00 04 D5 +R 00 00 00 09 +T 00 04 D5 A6 01 6B 2D 16 2B 17 29 5F 1F 2B +R 00 00 00 09 +T 00 04 E0 +R 00 00 00 09 +T 00 04 E0 0F 09 1E 14 7B 24 88 89 CD 00 4B 5B 03 +R 00 00 00 09 00 0C 00 09 +T 00 04 ED 0D 2D 26 23 1E 18 F6 4E A4 F0 97 16 18 +R 00 00 00 09 +T 00 04 FA 90 F6 4E A4 0F 89 1A 02 85 6B 28 1E 29 +R 00 00 00 09 +T 00 05 07 F6 1A 28 1E 29 F7 1E 29 5A 1F 29 20 06 +R 00 00 00 09 +T 00 05 14 +R 00 00 00 09 +T 00 05 14 1E 16 F6 1E 29 F7 +R 00 00 00 09 +T 00 05 1A +R 00 00 00 09 +T 00 05 1A 1E 2B 5C 1F 2B 7B 2D A0 01 4F 49 6B 2D +R 00 00 00 09 +T 00 05 27 1E 14 90 93 90 EE 02 17 03 FE 1F 01 1E +R 00 00 00 09 +T 00 05 34 03 26 A9 1E 01 26 A5 16 29 17 21 16 2B +R 00 00 00 09 +T 00 05 41 17 23 1E 25 26 05 AE 00 01 1F 25 +R 00 00 00 09 +T 00 05 4C +R 00 00 00 09 +T 00 05 4C 0D 1D 26 33 0D 1C 26 2F 16 10 17 29 16 +R 00 00 00 09 +T 00 05 59 25 17 2B +R 00 00 00 09 +T 00 05 5C +R 00 00 00 09 +T 00 05 5C 7B 24 4C 5F 97 13 2B 24 16 1E 32 89 4B +R 00 00 00 09 +T 00 05 69 20 1E 33 FD 5B 03 1E 29 5C 1F 29 1E 2B +R 00 00 00 09 +T 00 05 76 5A 1F 2B 20 E1 +R 00 00 00 09 +T 00 05 7B +R 00 00 00 09 +T 00 05 7B 16 29 17 10 16 2B 17 25 +R 00 00 00 09 +T 00 05 83 +R 00 00 00 09 +T 00 05 83 0D 20 27 16 1E 32 89 4B 2D 1E 33 FD 5B +R 00 00 00 09 +T 00 05 90 03 1E 10 5C 1F 10 1E 25 5A 1F 25 20 36 +R 00 00 00 09 +T 00 05 9D +R 00 00 00 09 +T 00 05 9D 1E 23 27 32 0D 1E 27 16 1E 32 89 4B 2B +R 00 00 00 09 +T 00 05 AA 1E 33 FD 5B 03 1E 10 5C 1F 10 1E 25 5A +R 00 00 00 09 +T 00 05 B7 1F 25 20 18 +R 00 00 00 09 +T 00 05 BB +R 00 00 00 09 +T 00 05 BB 0D 1F 27 14 1E 32 89 4B 20 1E 33 FD 5B +R 00 00 00 09 +T 00 05 C8 03 1E 10 5C 1F 10 1E 25 5A 1F 25 +R 00 00 00 09 +T 00 05 D3 +R 00 00 00 09 +T 00 05 D3 0D 1C 26 30 16 10 17 29 16 25 17 2B +R 00 00 00 09 +T 00 05 DF +R 00 00 00 09 +T 00 05 DF 16 2B 1E 2B 5A 1F 2B 93 13 23 23 30 0D +R 00 00 00 09 +T 00 05 EC 1D 27 04 AE 00 30 BC +R 00 00 00 09 +T 00 05 F3 +R 00 00 00 09 +T 00 05 F3 AE 00 20 +R 00 00 00 09 +T 00 05 F6 +R 00 00 00 09 +T 00 05 F6 9F 1E 32 89 88 1E 33 FD 5B 03 1E 29 5C +R 00 00 00 09 +T 00 06 03 1F 29 20 D8 +R 00 00 00 09 +T 00 06 07 +R 00 00 00 09 +T 00 06 07 1E 25 13 23 23 09 1E 25 72 F0 23 1F 28 +R 00 00 00 09 +T 00 06 14 20 0D +R 00 00 00 09 +T 00 06 16 +R 00 00 00 09 +T 00 06 16 5F 1F 28 20 08 +R 00 00 00 09 +T 00 06 1B +R 00 00 00 09 +T 00 06 1B 16 29 17 10 16 2B 17 28 +R 00 00 00 09 +T 00 06 23 +R 00 00 00 09 +T 00 06 23 16 21 17 2B 16 10 17 25 +R 00 00 00 09 +T 00 06 2B +R 00 00 00 09 +T 00 06 2B 1E 23 16 23 90 5A 17 23 5D 27 3D 7B 2D +R 00 00 00 09 +T 00 06 38 A0 01 4F 49 6B 2D 26 0E 1E 2B 5C 1F 2B +R 00 00 00 09 +T 00 06 45 F6 4E A4 0F 1E 16 F7 20 08 +R 00 00 00 09 +T 00 06 4E +R 00 00 00 09 +T 00 06 4E 1E 2B F6 A4 0F 1E 16 F7 +R 00 00 00 09 +T 00 06 56 +R 00 00 00 09 +T 00 06 56 1E 1A F6 6B 2A 1E 32 89 1E 32 89 7B 2B +R 00 00 00 09 +T 00 06 63 88 7B 2F 88 CD 00 00 5B 06 1E 25 5C 1F +R 00 00 00 09 00 08 00 09 +T 00 06 70 25 20 B8 +R 00 00 00 09 +T 00 06 73 +R 00 00 00 09 +T 00 06 73 16 25 17 10 0D 1C 26 03 CC 00 CA +R 00 00 00 09 00 0C 00 09 +T 00 06 7E +R 00 00 00 09 +T 00 06 7E 16 25 17 2C 16 28 17 2A +R 00 00 00 09 +T 00 06 86 +R 00 00 00 09 +T 00 06 86 1E 2A 16 2A 90 5A 17 2A 5D 26 03 CC +R 00 00 00 09 +T 00 06 92 00 CA +R 00 00 00 09 00 03 00 09 +T 00 06 94 +R 00 00 00 09 +T 00 06 94 1E 32 89 4B 20 1E 33 FD 5B 03 1E 2C 5C +R 00 00 00 09 +T 00 06 A1 1F 2C 1F 10 20 DF +R 00 00 00 09 +T 00 06 A7 +R 00 00 00 09 +T 00 06 A7 1E 32 89 7B 2F 88 1E 33 FD 5B 03 1E 10 +R 00 00 00 09 +T 00 06 B4 5C 1F 10 CC 00 CA +R 00 00 00 09 00 07 00 09 +T 00 06 BA +R 00 00 00 09 +T 00 06 BA 1E 10 5B 2D 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 07 +T 00 00 00 3C 4E 4F 20 46 4C 4F 41 54 3E 00 +R 00 00 00 07 diff --git a/device/lib/stm8/printf_large.sym b/device/lib/stm8/printf_large.sym new file mode 100644 index 0000000..564a6ff --- /dev/null +++ b/device/lib/stm8/printf_large.sym @@ -0,0 +1,34 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 7 ___str_0 000000 R + 9 __print_format 0000AE GR + 9 _calculate_digit 00004B R + 9 _output_2digits 00001A R + 9 _output_digit 000000 R + _strlen ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size B flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 6BF flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/puts.asm b/device/lib/stm8/puts.asm new file mode 100644 index 0000000..63f7fe4 --- /dev/null +++ b/device/lib/stm8/puts.asm @@ -0,0 +1,86 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module puts + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _putchar + .globl _puts +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../puts.c: 31: int puts (const char *s) +; ----------------------------------------- +; function puts +; ----------------------------------------- +_puts: +; ../puts.c: 33: while (*s) + ldw y, (0x03, sp) +00103$: + ld a, (y) + jreq 00105$ +; ../puts.c: 34: if (putchar(*s++) == EOF) + incw y + clrw x + ld xl, a + pushw y + pushw x + call _putchar + addw sp, #2 + popw y + incw x + jrne 00103$ +; ../puts.c: 35: return EOF; + clrw x + decw x + ret +00105$: +; ../puts.c: 36: return putchar('\n'); + push #0x0a + push #0x00 + call _putchar + addw sp, #2 +; ../puts.c: 37: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/puts.lst b/device/lib/stm8/puts.lst new file mode 100644 index 0000000..a25ce23 --- /dev/null +++ b/device/lib/stm8/puts.lst @@ -0,0 +1,86 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module puts + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _putchar + 12 .globl _puts + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../puts.c: 31: int puts (const char *s) + 51 ; ----------------------------------------- + 52 ; function puts + 53 ; ----------------------------------------- + 000000 54 _puts: + 55 ; ../puts.c: 33: while (*s) + 000000 16 03 [ 2] 56 ldw y, (0x03, sp) + 000002 57 00103$: + 000002 90 F6 [ 1] 58 ld a, (y) + 000004 27 14 [ 1] 59 jreq 00105$ + 60 ; ../puts.c: 34: if (putchar(*s++) == EOF) + 000006 90 5C [ 1] 61 incw y + 000008 5F [ 1] 62 clrw x + 000009 97 [ 1] 63 ld xl, a + 00000A 90 89 [ 2] 64 pushw y + 00000C 89 [ 2] 65 pushw x + 00000D CDr00r00 [ 4] 66 call _putchar + 000010 5B 02 [ 2] 67 addw sp, #2 + 000012 90 85 [ 2] 68 popw y + 000014 5C [ 1] 69 incw x + 000015 26 EB [ 1] 70 jrne 00103$ + 71 ; ../puts.c: 35: return EOF; + 000017 5F [ 1] 72 clrw x + 000018 5A [ 2] 73 decw x + 000019 81 [ 4] 74 ret + 00001A 75 00105$: + 76 ; ../puts.c: 36: return putchar('\n'); + 00001A 4B 0A [ 1] 77 push #0x0a + 00001C 4B 00 [ 1] 78 push #0x00 + 00001E CDr00r00 [ 4] 79 call _putchar + 000021 5B 02 [ 2] 80 addw sp, #2 + 81 ; ../puts.c: 37: } + 000023 81 [ 4] 82 ret + 83 .area CODE + 84 .area CONST + 85 .area INITIALIZER + 86 .area CABS (ABS) diff --git a/device/lib/stm8/puts.rel b/device/lib/stm8/puts.rel new file mode 100644 index 0000000..825b9cd --- /dev/null +++ b/device/lib/stm8/puts.rel @@ -0,0 +1,32 @@ +XH3 +H B areas 3 global symbols +M puts +O -mstm8 +S _putchar Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 24 flags 0 addr 0 +S _puts Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 16 03 +R 00 00 00 09 +T 00 00 02 +R 00 00 00 09 +T 00 00 02 90 F6 27 14 90 5C 5F 97 90 89 89 CD +R 00 00 00 09 +T 00 00 0E 00 00 5B 02 90 85 5C 26 EB 5F 5A 81 +R 00 00 00 09 02 03 00 00 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 4B 0A 4B 00 CD 00 00 5B 02 81 +R 00 00 00 09 02 08 00 00 diff --git a/device/lib/stm8/puts.sym b/device/lib/stm8/puts.sym new file mode 100644 index 0000000..b335ee1 --- /dev/null +++ b/device/lib/stm8/puts.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _putchar ****** GX + 9 _puts 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 24 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/qsort.asm b/device/lib/stm8/qsort.asm new file mode 100644 index 0000000..f425ea9 --- /dev/null +++ b/device/lib/stm8/qsort.asm @@ -0,0 +1,169 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module qsort + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _qsort +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../qsort.c: 33: static void swap(void *restrict dst, void *restrict src, size_t n) +; ----------------------------------------- +; function swap +; ----------------------------------------- +_swap: + sub sp, #6 +; ../qsort.c: 35: unsigned char *restrict d = dst; + ldw x, (0x09, sp) +; ../qsort.c: 36: unsigned char *restrict s = src; + ldw y, (0x0b, sp) +; ../qsort.c: 38: while(n--) + ldw (0x03, sp), y + ldw y, (0x0d, sp) + ldw (0x05, sp), y +00101$: + ldw y, (0x05, sp) + ldw (0x01, sp), y + ldw y, (0x05, sp) + decw y + ldw (0x05, sp), y + ldw y, (0x01, sp) + jreq 00104$ +; ../qsort.c: 40: unsigned char tmp = *d; + ld a, (x) + ld (0x02, sp), a +; ../qsort.c: 41: *d = *s; + ldw y, (0x03, sp) + ld a, (y) + ld (x), a +; ../qsort.c: 42: *s = tmp; + ldw y, (0x03, sp) + ld a, (0x02, sp) + ld (y), a +; ../qsort.c: 43: d++; + incw x +; ../qsort.c: 44: s++; + ldw y, (0x03, sp) + incw y + ldw (0x03, sp), y + jra 00101$ +00104$: +; ../qsort.c: 46: } + addw sp, #6 + ret +; ../qsort.c: 48: void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) __reentrant) +; ----------------------------------------- +; function qsort +; ----------------------------------------- +_qsort: + sub sp, #12 +; ../qsort.c: 50: unsigned char *b = base; + ldw y, (0x0f, sp) + ldw (0x0b, sp), y + ldw (0x01, sp), y +; ../qsort.c: 52: if(nmemb <= 1) + ldw x, (0x11, sp) + cpw x, #0x0001 +; ../qsort.c: 53: return; + jrule 00112$ +; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size) + ldw y, (0x0b, sp) + ldw (0x03, sp), y + ldw y, (0x13, sp) + ldw (0x05, sp), y + ldw x, y + pushw x + ldw x, (0x13, sp) + pushw x + call __mulint + addw sp, #4 + addw x, (0x01, sp) + ldw (0x07, sp), x +00110$: + ldw x, (0x03, sp) + cpw x, (0x07, sp) + jrnc 00112$ +; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size) + ldw y, (0x03, sp) +00107$: + exgw x, y + cpw x, (0x01, sp) + exgw x, y + jrule 00111$ + ldw x, y + subw x, (0x05, sp) + ldw (0x09, sp), x + ldw (0x0b, sp), y + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x19, sp) + call (x) + addw sp, #4 + tnzw x + jrpl 00111$ +; ../qsort.c: 58: swap(j, j - size, size); + ldw x, (0x09, sp) + ldw y, (0x05, sp) + pushw y + pushw x + ldw x, (0x0f, sp) + pushw x + call _swap + addw sp, #6 +; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size) + ldw y, (0x09, sp) + jra 00107$ +00111$: +; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size) + ldw x, (0x03, sp) + addw x, (0x05, sp) + ldw (0x03, sp), x + jra 00110$ +00112$: +; ../qsort.c: 60: } + addw sp, #12 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/qsort.lst b/device/lib/stm8/qsort.lst new file mode 100644 index 0000000..e8b0de9 --- /dev/null +++ b/device/lib/stm8/qsort.lst @@ -0,0 +1,169 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module qsort + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _qsort + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../qsort.c: 33: static void swap(void *restrict dst, void *restrict src, size_t n) + 50 ; ----------------------------------------- + 51 ; function swap + 52 ; ----------------------------------------- + 000000 53 _swap: + 000000 52 06 [ 2] 54 sub sp, #6 + 55 ; ../qsort.c: 35: unsigned char *restrict d = dst; + 000002 1E 09 [ 2] 56 ldw x, (0x09, sp) + 57 ; ../qsort.c: 36: unsigned char *restrict s = src; + 000004 16 0B [ 2] 58 ldw y, (0x0b, sp) + 59 ; ../qsort.c: 38: while(n--) + 000006 17 03 [ 2] 60 ldw (0x03, sp), y + 000008 16 0D [ 2] 61 ldw y, (0x0d, sp) + 00000A 17 05 [ 2] 62 ldw (0x05, sp), y + 00000C 63 00101$: + 00000C 16 05 [ 2] 64 ldw y, (0x05, sp) + 00000E 17 01 [ 2] 65 ldw (0x01, sp), y + 000010 16 05 [ 2] 66 ldw y, (0x05, sp) + 000012 90 5A [ 2] 67 decw y + 000014 17 05 [ 2] 68 ldw (0x05, sp), y + 000016 16 01 [ 2] 69 ldw y, (0x01, sp) + 000018 27 17 [ 1] 70 jreq 00104$ + 71 ; ../qsort.c: 40: unsigned char tmp = *d; + 00001A F6 [ 1] 72 ld a, (x) + 00001B 6B 02 [ 1] 73 ld (0x02, sp), a + 74 ; ../qsort.c: 41: *d = *s; + 00001D 16 03 [ 2] 75 ldw y, (0x03, sp) + 00001F 90 F6 [ 1] 76 ld a, (y) + 000021 F7 [ 1] 77 ld (x), a + 78 ; ../qsort.c: 42: *s = tmp; + 000022 16 03 [ 2] 79 ldw y, (0x03, sp) + 000024 7B 02 [ 1] 80 ld a, (0x02, sp) + 000026 90 F7 [ 1] 81 ld (y), a + 82 ; ../qsort.c: 43: d++; + 000028 5C [ 1] 83 incw x + 84 ; ../qsort.c: 44: s++; + 000029 16 03 [ 2] 85 ldw y, (0x03, sp) + 00002B 90 5C [ 1] 86 incw y + 00002D 17 03 [ 2] 87 ldw (0x03, sp), y + 00002F 20 DB [ 2] 88 jra 00101$ + 000031 89 00104$: + 90 ; ../qsort.c: 46: } + 000031 5B 06 [ 2] 91 addw sp, #6 + 000033 81 [ 4] 92 ret + 93 ; ../qsort.c: 48: void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *) __reentrant) + 94 ; ----------------------------------------- + 95 ; function qsort + 96 ; ----------------------------------------- + 000034 97 _qsort: + 000034 52 0C [ 2] 98 sub sp, #12 + 99 ; ../qsort.c: 50: unsigned char *b = base; + 000036 16 0F [ 2] 100 ldw y, (0x0f, sp) + 000038 17 0B [ 2] 101 ldw (0x0b, sp), y + 00003A 17 01 [ 2] 102 ldw (0x01, sp), y + 103 ; ../qsort.c: 52: if(nmemb <= 1) + 00003C 1E 11 [ 2] 104 ldw x, (0x11, sp) + 00003E A3 00 01 [ 2] 105 cpw x, #0x0001 + 106 ; ../qsort.c: 53: return; + 000041 23 55 [ 2] 107 jrule 00112$ + 108 ; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size) + 000043 16 0B [ 2] 109 ldw y, (0x0b, sp) + 000045 17 03 [ 2] 110 ldw (0x03, sp), y + 000047 16 13 [ 2] 111 ldw y, (0x13, sp) + 000049 17 05 [ 2] 112 ldw (0x05, sp), y + 00004B 93 [ 1] 113 ldw x, y + 00004C 89 [ 2] 114 pushw x + 00004D 1E 13 [ 2] 115 ldw x, (0x13, sp) + 00004F 89 [ 2] 116 pushw x + 000050 CDr00r00 [ 4] 117 call __mulint + 000053 5B 04 [ 2] 118 addw sp, #4 + 000055 72 FB 01 [ 2] 119 addw x, (0x01, sp) + 000058 1F 07 [ 2] 120 ldw (0x07, sp), x + 00005A 121 00110$: + 00005A 1E 03 [ 2] 122 ldw x, (0x03, sp) + 00005C 13 07 [ 2] 123 cpw x, (0x07, sp) + 00005E 24 38 [ 1] 124 jrnc 00112$ + 125 ; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size) + 000060 16 03 [ 2] 126 ldw y, (0x03, sp) + 000062 127 00107$: + 000062 51 [ 1] 128 exgw x, y + 000063 13 01 [ 2] 129 cpw x, (0x01, sp) + 000065 51 [ 1] 130 exgw x, y + 000066 23 27 [ 2] 131 jrule 00111$ + 000068 93 [ 1] 132 ldw x, y + 000069 72 F0 05 [ 2] 133 subw x, (0x05, sp) + 00006C 1F 09 [ 2] 134 ldw (0x09, sp), x + 00006E 17 0B [ 2] 135 ldw (0x0b, sp), y + 000070 89 [ 2] 136 pushw x + 000071 1E 0D [ 2] 137 ldw x, (0x0d, sp) + 000073 89 [ 2] 138 pushw x + 000074 1E 19 [ 2] 139 ldw x, (0x19, sp) + 000076 FD [ 4] 140 call (x) + 000077 5B 04 [ 2] 141 addw sp, #4 + 000079 5D [ 2] 142 tnzw x + 00007A 2A 13 [ 1] 143 jrpl 00111$ + 144 ; ../qsort.c: 58: swap(j, j - size, size); + 00007C 1E 09 [ 2] 145 ldw x, (0x09, sp) + 00007E 16 05 [ 2] 146 ldw y, (0x05, sp) + 000080 90 89 [ 2] 147 pushw y + 000082 89 [ 2] 148 pushw x + 000083 1E 0F [ 2] 149 ldw x, (0x0f, sp) + 000085 89 [ 2] 150 pushw x + 000086 CDr00r00 [ 4] 151 call _swap + 000089 5B 06 [ 2] 152 addw sp, #6 + 153 ; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size) + 00008B 16 09 [ 2] 154 ldw y, (0x09, sp) + 00008D 20 D3 [ 2] 155 jra 00107$ + 00008F 156 00111$: + 157 ; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size) + 00008F 1E 03 [ 2] 158 ldw x, (0x03, sp) + 000091 72 FB 05 [ 2] 159 addw x, (0x05, sp) + 000094 1F 03 [ 2] 160 ldw (0x03, sp), x + 000096 20 C2 [ 2] 161 jra 00110$ + 000098 162 00112$: + 163 ; ../qsort.c: 60: } + 000098 5B 0C [ 2] 164 addw sp, #12 + 00009A 81 [ 4] 165 ret + 166 .area CODE + 167 .area CONST + 168 .area INITIALIZER + 169 .area CABS (ABS) diff --git a/device/lib/stm8/qsort.rel b/device/lib/stm8/qsort.rel new file mode 100644 index 0000000..ac283b6 --- /dev/null +++ b/device/lib/stm8/qsort.rel @@ -0,0 +1,64 @@ +XH3 +H B areas 3 global symbols +M qsort +O -mstm8 +S __mulint Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 9B flags 0 addr 0 +S _qsort Def000034 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 06 1E 09 16 0B 17 03 16 0D 17 05 +R 00 00 00 09 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C 16 05 17 01 16 05 90 5A 17 05 16 01 27 +R 00 00 00 09 +T 00 00 19 17 F6 6B 02 16 03 90 F6 F7 16 03 7B 02 +R 00 00 00 09 +T 00 00 26 90 F7 5C 16 03 90 5C 17 03 20 DB +R 00 00 00 09 +T 00 00 31 +R 00 00 00 09 +T 00 00 31 5B 06 81 +R 00 00 00 09 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 52 0C 16 0F 17 0B 17 01 1E 11 A3 00 01 +R 00 00 00 09 +T 00 00 41 23 55 16 0B 17 03 16 13 17 05 93 89 1E +R 00 00 00 09 +T 00 00 4E 13 89 CD 00 00 5B 04 72 FB 01 1F 07 +R 00 00 00 09 02 06 00 00 +T 00 00 5A +R 00 00 00 09 +T 00 00 5A 1E 03 13 07 24 38 16 03 +R 00 00 00 09 +T 00 00 62 +R 00 00 00 09 +T 00 00 62 51 13 01 51 23 27 93 72 F0 05 1F 09 17 +R 00 00 00 09 +T 00 00 6F 0B 89 1E 0D 89 1E 19 FD 5B 04 5D 2A 13 +R 00 00 00 09 +T 00 00 7C 1E 09 16 05 90 89 89 1E 0F 89 CD 00 00 +R 00 00 00 09 00 0E 00 09 +T 00 00 89 5B 06 16 09 20 D3 +R 00 00 00 09 +T 00 00 8F +R 00 00 00 09 +T 00 00 8F 1E 03 72 FB 05 1F 03 20 C2 +R 00 00 00 09 +T 00 00 98 +R 00 00 00 09 +T 00 00 98 5B 0C 81 +R 00 00 00 09 diff --git a/device/lib/stm8/qsort.sym b/device/lib/stm8/qsort.sym new file mode 100644 index 0000000..d0c583f --- /dev/null +++ b/device/lib/stm8/qsort.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + __mulint ****** GX + 9 _qsort 000034 GR + 9 _swap 000000 R + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 9B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/rand.asm b/device/lib/stm8/rand.asm new file mode 100644 index 0000000..92a3f11 --- /dev/null +++ b/device/lib/stm8/rand.asm @@ -0,0 +1,156 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module rand + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _rand + .globl _srand +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +_s: + .ds 4 +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../rand.c: 40: int rand(void) +; ----------------------------------------- +; function rand +; ----------------------------------------- +_rand: + sub sp, #8 +; ../rand.c: 42: register unsigned long t = s; + ldw x, _s+2 + ldw (0x03, sp), x + ldw x, _s+0 + ldw (0x01, sp), x +; ../rand.c: 44: t ^= t >> 10; + ldw y, (0x02, sp) + ldw (0x07, sp), y + ld a, (0x01, sp) + ld (0x06, sp), a + clr (0x05, sp) + srl (0x06, sp) + rrc (0x07, sp) + rrc (0x08, sp) + srl (0x06, sp) + rrc (0x07, sp) + rrc (0x08, sp) + ld a, (0x04, sp) + xor a, (0x08, sp) + ld xl, a + ld a, (0x03, sp) + xor a, (0x07, sp) + ld xh, a + ld a, (0x02, sp) + xor a, (0x06, sp) + push a + ld a, (0x02, sp) + xor a, (0x06, sp) + ld yh, a + pop a +; ../rand.c: 45: t ^= t << 9; + ldw (0x06, sp), x + ld (0x05, sp), a + clr (0x08, sp) + sll (0x08, sp) + rlc (0x07, sp) + rlc (0x06, sp) + rlc (0x05, sp) + xor a, (0x06, sp) + ld yl, a + ld a, xl + xor a, (0x08, sp) + rlwa x + xor a, (0x07, sp) + ld xh, a + ld a, yh + xor a, (0x05, sp) + ld yh, a + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../rand.c: 46: t ^= t >> 25; + ld a, (0x01, sp) + ld (0x08, sp), a + clr (0x07, sp) + clr (0x06, sp) + clr (0x05, sp) + srl (0x08, sp) + ld a, (0x04, sp) + xor a, (0x08, sp) + ld xl, a + ld a, (0x03, sp) + xor a, (0x07, sp) + ld xh, a + ld a, (0x02, sp) + xor a, (0x06, sp) + ld yl, a + ld a, (0x01, sp) + xor a, (0x05, sp) + ld yh, a +; ../rand.c: 48: s = t; + ldw _s+2, x + ldw _s+0, y +; ../rand.c: 50: return(t & RAND_MAX); + sllw x + srlw x +; ../rand.c: 51: } + addw sp, #8 + ret +; ../rand.c: 53: void srand(unsigned int seed) +; ----------------------------------------- +; function srand +; ----------------------------------------- +_srand: +; ../rand.c: 55: s = seed | 0x80000000; /* s shall not become 0 */ + ldw y, (0x03, sp) + clrw x + sllw x + scf + rrcw x + ldw _s+2, y + ldw _s+0, x +; ../rand.c: 56: } + ret + .area CODE + .area CONST + .area INITIALIZER +__xinit__s: + .byte #0x80, #0x00, #0x00, #0x01 ; 2147483649 + .area CABS (ABS) diff --git a/device/lib/stm8/rand.lst b/device/lib/stm8/rand.lst new file mode 100644 index 0000000..391f6f2 --- /dev/null +++ b/device/lib/stm8/rand.lst @@ -0,0 +1,156 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module rand + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _rand + 12 .globl _srand + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 000000 21 _s: + 000000 22 .ds 4 + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../rand.c: 40: int rand(void) + 53 ; ----------------------------------------- + 54 ; function rand + 55 ; ----------------------------------------- + 000000 56 _rand: + 000000 52 08 [ 2] 57 sub sp, #8 + 58 ; ../rand.c: 42: register unsigned long t = s; + 000002 CEu00u02 [ 2] 59 ldw x, _s+2 + 000005 1F 03 [ 2] 60 ldw (0x03, sp), x + 000007 CEu00u00 [ 2] 61 ldw x, _s+0 + 00000A 1F 01 [ 2] 62 ldw (0x01, sp), x + 63 ; ../rand.c: 44: t ^= t >> 10; + 00000C 16 02 [ 2] 64 ldw y, (0x02, sp) + 00000E 17 07 [ 2] 65 ldw (0x07, sp), y + 000010 7B 01 [ 1] 66 ld a, (0x01, sp) + 000012 6B 06 [ 1] 67 ld (0x06, sp), a + 000014 0F 05 [ 1] 68 clr (0x05, sp) + 000016 04 06 [ 1] 69 srl (0x06, sp) + 000018 06 07 [ 1] 70 rrc (0x07, sp) + 00001A 06 08 [ 1] 71 rrc (0x08, sp) + 00001C 04 06 [ 1] 72 srl (0x06, sp) + 00001E 06 07 [ 1] 73 rrc (0x07, sp) + 000020 06 08 [ 1] 74 rrc (0x08, sp) + 000022 7B 04 [ 1] 75 ld a, (0x04, sp) + 000024 18 08 [ 1] 76 xor a, (0x08, sp) + 000026 97 [ 1] 77 ld xl, a + 000027 7B 03 [ 1] 78 ld a, (0x03, sp) + 000029 18 07 [ 1] 79 xor a, (0x07, sp) + 00002B 95 [ 1] 80 ld xh, a + 00002C 7B 02 [ 1] 81 ld a, (0x02, sp) + 00002E 18 06 [ 1] 82 xor a, (0x06, sp) + 000030 88 [ 1] 83 push a + 000031 7B 02 [ 1] 84 ld a, (0x02, sp) + 000033 18 06 [ 1] 85 xor a, (0x06, sp) + 000035 90 95 [ 1] 86 ld yh, a + 000037 84 [ 1] 87 pop a + 88 ; ../rand.c: 45: t ^= t << 9; + 000038 1F 06 [ 2] 89 ldw (0x06, sp), x + 00003A 6B 05 [ 1] 90 ld (0x05, sp), a + 00003C 0F 08 [ 1] 91 clr (0x08, sp) + 00003E 08 08 [ 1] 92 sll (0x08, sp) + 000040 09 07 [ 1] 93 rlc (0x07, sp) + 000042 09 06 [ 1] 94 rlc (0x06, sp) + 000044 09 05 [ 1] 95 rlc (0x05, sp) + 000046 18 06 [ 1] 96 xor a, (0x06, sp) + 000048 90 97 [ 1] 97 ld yl, a + 00004A 9F [ 1] 98 ld a, xl + 00004B 18 08 [ 1] 99 xor a, (0x08, sp) + 00004D 02 [ 1] 100 rlwa x + 00004E 18 07 [ 1] 101 xor a, (0x07, sp) + 000050 95 [ 1] 102 ld xh, a + 000051 90 9E [ 1] 103 ld a, yh + 000053 18 05 [ 1] 104 xor a, (0x05, sp) + 000055 90 95 [ 1] 105 ld yh, a + 000057 1F 03 [ 2] 106 ldw (0x03, sp), x + 000059 17 01 [ 2] 107 ldw (0x01, sp), y + 108 ; ../rand.c: 46: t ^= t >> 25; + 00005B 7B 01 [ 1] 109 ld a, (0x01, sp) + 00005D 6B 08 [ 1] 110 ld (0x08, sp), a + 00005F 0F 07 [ 1] 111 clr (0x07, sp) + 000061 0F 06 [ 1] 112 clr (0x06, sp) + 000063 0F 05 [ 1] 113 clr (0x05, sp) + 000065 04 08 [ 1] 114 srl (0x08, sp) + 000067 7B 04 [ 1] 115 ld a, (0x04, sp) + 000069 18 08 [ 1] 116 xor a, (0x08, sp) + 00006B 97 [ 1] 117 ld xl, a + 00006C 7B 03 [ 1] 118 ld a, (0x03, sp) + 00006E 18 07 [ 1] 119 xor a, (0x07, sp) + 000070 95 [ 1] 120 ld xh, a + 000071 7B 02 [ 1] 121 ld a, (0x02, sp) + 000073 18 06 [ 1] 122 xor a, (0x06, sp) + 000075 90 97 [ 1] 123 ld yl, a + 000077 7B 01 [ 1] 124 ld a, (0x01, sp) + 000079 18 05 [ 1] 125 xor a, (0x05, sp) + 00007B 90 95 [ 1] 126 ld yh, a + 127 ; ../rand.c: 48: s = t; + 00007D CFu00u02 [ 2] 128 ldw _s+2, x + 000080 90 CFu00u00 [ 2] 129 ldw _s+0, y + 130 ; ../rand.c: 50: return(t & RAND_MAX); + 000084 58 [ 2] 131 sllw x + 000085 54 [ 2] 132 srlw x + 133 ; ../rand.c: 51: } + 000086 5B 08 [ 2] 134 addw sp, #8 + 000088 81 [ 4] 135 ret + 136 ; ../rand.c: 53: void srand(unsigned int seed) + 137 ; ----------------------------------------- + 138 ; function srand + 139 ; ----------------------------------------- + 000089 140 _srand: + 141 ; ../rand.c: 55: s = seed | 0x80000000; /* s shall not become 0 */ + 000089 16 03 [ 2] 142 ldw y, (0x03, sp) + 00008B 5F [ 1] 143 clrw x + 00008C 58 [ 2] 144 sllw x + 00008D 99 [ 1] 145 scf + 00008E 56 [ 2] 146 rrcw x + 00008F 90 CFu00u02 [ 2] 147 ldw _s+2, y + 000093 CFu00u00 [ 2] 148 ldw _s+0, x + 149 ; ../rand.c: 56: } + 000096 81 [ 4] 150 ret + 151 .area CODE + 152 .area CONST + 153 .area INITIALIZER + 000000 154 __xinit__s: + 000000 80 00 00 01 155 .byte #0x80, #0x00, #0x00, #0x01 ; 2147483649 + 156 .area CABS (ABS) diff --git a/device/lib/stm8/rand.rel b/device/lib/stm8/rand.rel new file mode 100644 index 0000000..6f942e8 --- /dev/null +++ b/device/lib/stm8/rand.rel @@ -0,0 +1,56 @@ +XH3 +H B areas 3 global symbols +M rand +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 4 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 4 flags 0 addr 0 +A CODE size 97 flags 0 addr 0 +S _rand Def000000 +S _srand Def000089 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 02 +T 00 00 00 +R 00 00 00 02 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 08 CE 00 02 1F 03 CE 00 00 1F 01 16 +R 00 00 00 09 10 06 00 02 10 0B 00 02 +T 00 00 0D 02 17 07 7B 01 6B 06 0F 05 04 06 06 07 +R 00 00 00 09 +T 00 00 1A 06 08 04 06 06 07 06 08 7B 04 18 08 97 +R 00 00 00 09 +T 00 00 27 7B 03 18 07 95 7B 02 18 06 88 7B 02 18 +R 00 00 00 09 +T 00 00 34 06 90 95 84 1F 06 6B 05 0F 08 08 08 09 +R 00 00 00 09 +T 00 00 41 07 09 06 09 05 18 06 90 97 9F 18 08 02 +R 00 00 00 09 +T 00 00 4E 18 07 95 90 9E 18 05 90 95 1F 03 17 01 +R 00 00 00 09 +T 00 00 5B 7B 01 6B 08 0F 07 0F 06 0F 05 04 08 7B +R 00 00 00 09 +T 00 00 68 04 18 08 97 7B 03 18 07 95 7B 02 18 06 +R 00 00 00 09 +T 00 00 75 90 97 7B 01 18 05 90 95 CF 00 02 90 CF +R 00 00 00 09 10 0C 00 02 +T 00 00 82 00 00 58 54 5B 08 81 +R 00 00 00 09 10 03 00 02 +T 00 00 89 +R 00 00 00 09 +T 00 00 89 16 03 5F 58 99 56 90 CF 00 02 CF 00 00 +R 00 00 00 09 10 0B 00 02 10 0E 00 02 +T 00 00 96 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 08 +T 00 00 00 80 00 00 01 +R 00 00 00 08 diff --git a/device/lib/stm8/rand.sym b/device/lib/stm8/rand.sym new file mode 100644 index 0000000..0f31826 --- /dev/null +++ b/device/lib/stm8/rand.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 8 __xinit__s 000000 R + 9 _rand 000000 GR + 2 _s 000000 R + 9 _srand 000089 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 4 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 4 flags 0 + 9 CODE size 97 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/realloc.asm b/device/lib/stm8/realloc.asm new file mode 100644 index 0000000..7d494ff --- /dev/null +++ b/device/lib/stm8/realloc.asm @@ -0,0 +1,313 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module realloc + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___memcpy + .globl _memmove + .globl _free + .globl _malloc + .globl _realloc +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../realloc.c: 56: void *realloc(void *ptr, size_t size) +; ----------------------------------------- +; function realloc +; ----------------------------------------- +_realloc: + sub sp, #20 +; ../realloc.c: 69: if(!ptr) + ldw x, (0x17, sp) + jrne 00102$ +; ../realloc.c: 70: return(malloc(size)); + ldw x, (0x19, sp) + pushw x + call _malloc + addw sp, #2 + jp 00132$ +00102$: +; ../realloc.c: 72: if(!size) + ldw x, (0x19, sp) + jrne 00104$ +; ../realloc.c: 74: free(ptr); + ldw x, (0x17, sp) + pushw x + call _free + addw sp, #2 +; ../realloc.c: 75: return(0); + clrw x + jp 00132$ +00104$: +; ../realloc.c: 78: prev_free = 0, pf = 0; + clrw x + ldw (0x01, sp), x + clrw x + ldw (0x03, sp), x +; ../realloc.c: 79: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h && h < ptr; prev_free = h, pf = f, f = &(h->next_free), h = h->next_free); // Find adjacent blocks in free list + ldw x, ___sdcc_heap_free+0 + ldw (0x13, sp), x + ldw x, #(___sdcc_heap_free + 0) + ldw (0x05, sp), x +00130$: + ldw x, (0x13, sp) + jreq 00105$ + ldw y, (0x17, sp) + ldw (0x11, sp), y + ldw x, (0x13, sp) + cpw x, (0x11, sp) + jrnc 00105$ + ldw y, (0x13, sp) + ldw (0x01, sp), y + ldw y, (0x05, sp) + ldw (0x03, sp), y + ldw x, (0x13, sp) + incw x + incw x + ldw (0x05, sp), x + ldw x, (x) + ldw (0x13, sp), x + jra 00130$ +00105$: +; ../realloc.c: 80: next_free = h; + ldw y, (0x13, sp) + ldw (0x07, sp), y +; ../realloc.c: 82: if(!size || size + offsetof(struct header, next_free) < size) + ldw x, (0x19, sp) + jreq 00106$ + incw x + incw x + cpw x, (0x19, sp) + jrnc 00107$ +00106$: +; ../realloc.c: 83: return(0); + clrw x + jp 00132$ +00107$: +; ../realloc.c: 84: blocksize = size + offsetof(struct header, next_free); +; ../realloc.c: 85: if(blocksize < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks. + ldw (0x09, sp), x + cpw x, #0x0004 + jrnc 00110$ +; ../realloc.c: 86: blocksize = sizeof(struct header); + ldw x, #0x0004 + ldw (0x09, sp), x +00110$: +; ../realloc.c: 88: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free)); + ldw x, (0x17, sp) + decw x + decw x +; ../realloc.c: 89: oldblocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h; + ldw (0x0b, sp), x + ldw x, (x) + ldw (0x0d, sp), x + ldw y, (0x0b, sp) + ldw (0x0f, sp), y + subw x, (0x0f, sp) +; ../realloc.c: 91: maxblocksize = oldblocksize; + ldw (0x11, sp), x + ldw (0x13, sp), x +; ../realloc.c: 92: if(prev_free && prev_free->next == h) // Can merge with previous block + ldw x, (0x01, sp) + jreq 00112$ + ldw x, (x) + cpw x, (0x0b, sp) + jrne 00112$ +; ../realloc.c: 93: maxblocksize += (char HEAPSPACE *)h - (char HEAPSPACE *)prev_free; + ldw x, (0x01, sp) + negw x + addw x, (0x0f, sp) + addw x, (0x11, sp) + ldw (0x13, sp), x +00112$: +; ../realloc.c: 94: if(next_free == h->next) // Can merge with next block + ldw x, (0x07, sp) + cpw x, (0x0d, sp) + jrne 00115$ +; ../realloc.c: 95: maxblocksize += (char HEAPSPACE *)(next_free->next) - (char HEAPSPACE *)next_free; + ldw x, (0x07, sp) + ldw x, (x) + ldw y, (0x07, sp) + ldw (0x0f, sp), y + subw x, (0x0f, sp) + addw x, (0x13, sp) + ldw (0x13, sp), x +00115$: +; ../realloc.c: 97: if(blocksize <= maxblocksize) // Can resize in place. + ldw x, (0x09, sp) + cpw x, (0x13, sp) + jrule 00247$ + jp 00125$ +00247$: +; ../realloc.c: 99: if(prev_free && prev_free->next == h) // Always move into previous block to defragment + ldw x, (0x01, sp) + jreq 00117$ + ldw x, (x) + cpw x, (0x0b, sp) + jrne 00117$ +; ../realloc.c: 101: memmove(prev_free, h, blocksize <= oldblocksize ? blocksize : oldblocksize); + ldw x, (0x09, sp) + cpw x, (0x11, sp) + jrugt 00134$ + ldw y, (0x09, sp) + ldw (0x11, sp), y +00134$: + ldw y, (0x0b, sp) + ldw x, (0x01, sp) + ld a, (0x12, sp) + push a + ld a, (0x12, sp) + push a + pushw y + pushw x + call _memmove + addw sp, #6 +; ../realloc.c: 102: h = prev_free; + ldw y, (0x01, sp) + ldw (0x0b, sp), y +; ../realloc.c: 103: *pf = next_free; + ldw x, (0x03, sp) + ldw y, (0x07, sp) + ldw (x), y +; ../realloc.c: 104: f = pf; + ldw y, (0x03, sp) + ldw (0x05, sp), y +00117$: +; ../realloc.c: 107: if(next_free && next_free == h->next) // Merge with following block + ldw x, (0x07, sp) + jreq 00120$ + ldw x, (0x0b, sp) + ldw x, (x) + cpw x, (0x07, sp) + jrne 00120$ +; ../realloc.c: 109: h->next = next_free->next; + ldw x, (0x07, sp) + ldw x, (x) + ldw y, (0x0b, sp) + ldw (y), x +; ../realloc.c: 110: *f = next_free->next_free; + ldw x, (0x07, sp) + ldw x, (0x2, x) + ldw y, (0x05, sp) + ldw (y), x +00120$: +; ../realloc.c: 113: if(maxblocksize >= blocksize + sizeof(struct header)) // Create new block from free space + ldw x, (0x09, sp) + addw x, #0x0004 + ldw (0x11, sp), x + ldw x, (0x13, sp) + cpw x, (0x11, sp) + jrc 00123$ +; ../realloc.c: 115: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + blocksize); + ldw x, (0x0b, sp) + addw x, (0x09, sp) + ldw (0x13, sp), x +; ../realloc.c: 116: newheader->next = h->next; + ldw x, (0x0b, sp) + ldw x, (x) + ldw y, (0x13, sp) + ldw (y), x +; ../realloc.c: 117: newheader->next_free = *f; + ldw x, (0x13, sp) + incw x + incw x + ldw y, (0x05, sp) + ldw y, (y) + ldw (x), y +; ../realloc.c: 118: *f = newheader; + ldw x, (0x05, sp) + ldw y, (0x13, sp) + ldw (x), y +; ../realloc.c: 119: h->next = newheader; + ldw x, (0x0b, sp) + ldw y, (0x13, sp) + ldw (x), y +00123$: +; ../realloc.c: 122: return(&(h->next_free)); + ldw x, (0x0b, sp) + incw x + incw x + jra 00132$ +00125$: +; ../realloc.c: 125: if(ret = malloc(size)) + ldw x, (0x19, sp) + pushw x + call _malloc + addw sp, #2 + ldw (0x13, sp), x + tnzw x + jreq 00127$ +; ../realloc.c: 127: size_t oldsize = oldblocksize - offsetof(struct header, next_free); + ldw x, (0x11, sp) + decw x + decw x +; ../realloc.c: 128: memcpy(ret, ptr, size <= oldsize ? size : oldsize); + cpw x, (0x19, sp) + jrc 00136$ + ldw x, (0x19, sp) +00136$: + pushw x + ldw x, (0x19, sp) + pushw x + ldw x, (0x17, sp) + pushw x + call ___memcpy + addw sp, #6 +; ../realloc.c: 129: free(ptr); + ldw x, (0x17, sp) + pushw x + call _free + addw sp, #2 +; ../realloc.c: 130: return(ret); + ldw x, (0x13, sp) +; ../realloc.c: 133: return(0); + .byte 0x21 +00127$: + clrw x +00132$: +; ../realloc.c: 134: } + addw sp, #20 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/realloc.lst b/device/lib/stm8/realloc.lst new file mode 100644 index 0000000..d33cd87 --- /dev/null +++ b/device/lib/stm8/realloc.lst @@ -0,0 +1,313 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module realloc + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___memcpy + 12 .globl _memmove + 13 .globl _free + 14 .globl _malloc + 15 .globl _realloc + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area DATA + 20 ;-------------------------------------------------------- + 21 ; ram data + 22 ;-------------------------------------------------------- + 23 .area INITIALIZED + 24 ;-------------------------------------------------------- + 25 ; absolute external ram data + 26 ;-------------------------------------------------------- + 27 .area DABS (ABS) + 28 + 29 ; default segment ordering for linker + 30 .area HOME + 31 .area GSINIT + 32 .area GSFINAL + 33 .area CONST + 34 .area INITIALIZER + 35 .area CODE + 36 + 37 ;-------------------------------------------------------- + 38 ; global & static initialisations + 39 ;-------------------------------------------------------- + 40 .area HOME + 41 .area GSINIT + 42 .area GSFINAL + 43 .area GSINIT + 44 ;-------------------------------------------------------- + 45 ; Home + 46 ;-------------------------------------------------------- + 47 .area HOME + 48 .area HOME + 49 ;-------------------------------------------------------- + 50 ; code + 51 ;-------------------------------------------------------- + 52 .area CODE + 53 ; ../realloc.c: 56: void *realloc(void *ptr, size_t size) + 54 ; ----------------------------------------- + 55 ; function realloc + 56 ; ----------------------------------------- + 000000 57 _realloc: + 000000 52 14 [ 2] 58 sub sp, #20 + 59 ; ../realloc.c: 69: if(!ptr) + 000002 1E 17 [ 2] 60 ldw x, (0x17, sp) + 000004 26 0B [ 1] 61 jrne 00102$ + 62 ; ../realloc.c: 70: return(malloc(size)); + 000006 1E 19 [ 2] 63 ldw x, (0x19, sp) + 000008 89 [ 2] 64 pushw x + 000009 CDr00r00 [ 4] 65 call _malloc + 00000C 5B 02 [ 2] 66 addw sp, #2 + 00000E CCr01r65 [ 2] 67 jp 00132$ + 000011 68 00102$: + 69 ; ../realloc.c: 72: if(!size) + 000011 1E 19 [ 2] 70 ldw x, (0x19, sp) + 000013 26 0C [ 1] 71 jrne 00104$ + 72 ; ../realloc.c: 74: free(ptr); + 000015 1E 17 [ 2] 73 ldw x, (0x17, sp) + 000017 89 [ 2] 74 pushw x + 000018 CDr00r00 [ 4] 75 call _free + 00001B 5B 02 [ 2] 76 addw sp, #2 + 77 ; ../realloc.c: 75: return(0); + 00001D 5F [ 1] 78 clrw x + 00001E CCr01r65 [ 2] 79 jp 00132$ + 000021 80 00104$: + 81 ; ../realloc.c: 78: prev_free = 0, pf = 0; + 000021 5F [ 1] 82 clrw x + 000022 1F 01 [ 2] 83 ldw (0x01, sp), x + 000024 5F [ 1] 84 clrw x + 000025 1F 03 [ 2] 85 ldw (0x03, sp), x + 86 ; ../realloc.c: 79: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h && h < ptr; prev_free = h, pf = f, f = &(h->next_free), h = h->next_free); // Find adjacent blocks in free list + 000027 CEu00u00 [ 2] 87 ldw x, ___sdcc_heap_free+0 + 00002A 1F 13 [ 2] 88 ldw (0x13, sp), x + 00002C AEr00r00 [ 2] 89 ldw x, #(___sdcc_heap_free + 0) + 00002F 1F 05 [ 2] 90 ldw (0x05, sp), x + 000031 91 00130$: + 000031 1E 13 [ 2] 92 ldw x, (0x13, sp) + 000033 27 1D [ 1] 93 jreq 00105$ + 000035 16 17 [ 2] 94 ldw y, (0x17, sp) + 000037 17 11 [ 2] 95 ldw (0x11, sp), y + 000039 1E 13 [ 2] 96 ldw x, (0x13, sp) + 00003B 13 11 [ 2] 97 cpw x, (0x11, sp) + 00003D 24 13 [ 1] 98 jrnc 00105$ + 00003F 16 13 [ 2] 99 ldw y, (0x13, sp) + 000041 17 01 [ 2] 100 ldw (0x01, sp), y + 000043 16 05 [ 2] 101 ldw y, (0x05, sp) + 000045 17 03 [ 2] 102 ldw (0x03, sp), y + 000047 1E 13 [ 2] 103 ldw x, (0x13, sp) + 000049 5C [ 1] 104 incw x + 00004A 5C [ 1] 105 incw x + 00004B 1F 05 [ 2] 106 ldw (0x05, sp), x + 00004D FE [ 2] 107 ldw x, (x) + 00004E 1F 13 [ 2] 108 ldw (0x13, sp), x + 000050 20 DF [ 2] 109 jra 00130$ + 000052 110 00105$: + 111 ; ../realloc.c: 80: next_free = h; + 000052 16 13 [ 2] 112 ldw y, (0x13, sp) + 000054 17 07 [ 2] 113 ldw (0x07, sp), y + 114 ; ../realloc.c: 82: if(!size || size + offsetof(struct header, next_free) < size) + 000056 1E 19 [ 2] 115 ldw x, (0x19, sp) + 000058 27 06 [ 1] 116 jreq 00106$ + 00005A 5C [ 1] 117 incw x + 00005B 5C [ 1] 118 incw x + 00005C 13 19 [ 2] 119 cpw x, (0x19, sp) + 00005E 24 04 [ 1] 120 jrnc 00107$ + 000060 121 00106$: + 122 ; ../realloc.c: 83: return(0); + 000060 5F [ 1] 123 clrw x + 000061 CCr01r65 [ 2] 124 jp 00132$ + 000064 125 00107$: + 126 ; ../realloc.c: 84: blocksize = size + offsetof(struct header, next_free); + 127 ; ../realloc.c: 85: if(blocksize < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks. + 000064 1F 09 [ 2] 128 ldw (0x09, sp), x + 000066 A3 00 04 [ 2] 129 cpw x, #0x0004 + 000069 24 05 [ 1] 130 jrnc 00110$ + 131 ; ../realloc.c: 86: blocksize = sizeof(struct header); + 00006B AE 00 04 [ 2] 132 ldw x, #0x0004 + 00006E 1F 09 [ 2] 133 ldw (0x09, sp), x + 000070 134 00110$: + 135 ; ../realloc.c: 88: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free)); + 000070 1E 17 [ 2] 136 ldw x, (0x17, sp) + 000072 5A [ 2] 137 decw x + 000073 5A [ 2] 138 decw x + 139 ; ../realloc.c: 89: oldblocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h; + 000074 1F 0B [ 2] 140 ldw (0x0b, sp), x + 000076 FE [ 2] 141 ldw x, (x) + 000077 1F 0D [ 2] 142 ldw (0x0d, sp), x + 000079 16 0B [ 2] 143 ldw y, (0x0b, sp) + 00007B 17 0F [ 2] 144 ldw (0x0f, sp), y + 00007D 72 F0 0F [ 2] 145 subw x, (0x0f, sp) + 146 ; ../realloc.c: 91: maxblocksize = oldblocksize; + 000080 1F 11 [ 2] 147 ldw (0x11, sp), x + 000082 1F 13 [ 2] 148 ldw (0x13, sp), x + 149 ; ../realloc.c: 92: if(prev_free && prev_free->next == h) // Can merge with previous block + 000084 1E 01 [ 2] 150 ldw x, (0x01, sp) + 000086 27 10 [ 1] 151 jreq 00112$ + 000088 FE [ 2] 152 ldw x, (x) + 000089 13 0B [ 2] 153 cpw x, (0x0b, sp) + 00008B 26 0B [ 1] 154 jrne 00112$ + 155 ; ../realloc.c: 93: maxblocksize += (char HEAPSPACE *)h - (char HEAPSPACE *)prev_free; + 00008D 1E 01 [ 2] 156 ldw x, (0x01, sp) + 00008F 50 [ 2] 157 negw x + 000090 72 FB 0F [ 2] 158 addw x, (0x0f, sp) + 000093 72 FB 11 [ 2] 159 addw x, (0x11, sp) + 000096 1F 13 [ 2] 160 ldw (0x13, sp), x + 000098 161 00112$: + 162 ; ../realloc.c: 94: if(next_free == h->next) // Can merge with next block + 000098 1E 07 [ 2] 163 ldw x, (0x07, sp) + 00009A 13 0D [ 2] 164 cpw x, (0x0d, sp) + 00009C 26 0F [ 1] 165 jrne 00115$ + 166 ; ../realloc.c: 95: maxblocksize += (char HEAPSPACE *)(next_free->next) - (char HEAPSPACE *)next_free; + 00009E 1E 07 [ 2] 167 ldw x, (0x07, sp) + 0000A0 FE [ 2] 168 ldw x, (x) + 0000A1 16 07 [ 2] 169 ldw y, (0x07, sp) + 0000A3 17 0F [ 2] 170 ldw (0x0f, sp), y + 0000A5 72 F0 0F [ 2] 171 subw x, (0x0f, sp) + 0000A8 72 FB 13 [ 2] 172 addw x, (0x13, sp) + 0000AB 1F 13 [ 2] 173 ldw (0x13, sp), x + 0000AD 174 00115$: + 175 ; ../realloc.c: 97: if(blocksize <= maxblocksize) // Can resize in place. + 0000AD 1E 09 [ 2] 176 ldw x, (0x09, sp) + 0000AF 13 13 [ 2] 177 cpw x, (0x13, sp) + 0000B1 23 03 [ 2] 178 jrule 00247$ + 0000B3 CCr01r36 [ 2] 179 jp 00125$ + 0000B6 180 00247$: + 181 ; ../realloc.c: 99: if(prev_free && prev_free->next == h) // Always move into previous block to defragment + 0000B6 1E 01 [ 2] 182 ldw x, (0x01, sp) + 0000B8 27 2E [ 1] 183 jreq 00117$ + 0000BA FE [ 2] 184 ldw x, (x) + 0000BB 13 0B [ 2] 185 cpw x, (0x0b, sp) + 0000BD 26 29 [ 1] 186 jrne 00117$ + 187 ; ../realloc.c: 101: memmove(prev_free, h, blocksize <= oldblocksize ? blocksize : oldblocksize); + 0000BF 1E 09 [ 2] 188 ldw x, (0x09, sp) + 0000C1 13 11 [ 2] 189 cpw x, (0x11, sp) + 0000C3 22 04 [ 1] 190 jrugt 00134$ + 0000C5 16 09 [ 2] 191 ldw y, (0x09, sp) + 0000C7 17 11 [ 2] 192 ldw (0x11, sp), y + 0000C9 193 00134$: + 0000C9 16 0B [ 2] 194 ldw y, (0x0b, sp) + 0000CB 1E 01 [ 2] 195 ldw x, (0x01, sp) + 0000CD 7B 12 [ 1] 196 ld a, (0x12, sp) + 0000CF 88 [ 1] 197 push a + 0000D0 7B 12 [ 1] 198 ld a, (0x12, sp) + 0000D2 88 [ 1] 199 push a + 0000D3 90 89 [ 2] 200 pushw y + 0000D5 89 [ 2] 201 pushw x + 0000D6 CDr00r00 [ 4] 202 call _memmove + 0000D9 5B 06 [ 2] 203 addw sp, #6 + 204 ; ../realloc.c: 102: h = prev_free; + 0000DB 16 01 [ 2] 205 ldw y, (0x01, sp) + 0000DD 17 0B [ 2] 206 ldw (0x0b, sp), y + 207 ; ../realloc.c: 103: *pf = next_free; + 0000DF 1E 03 [ 2] 208 ldw x, (0x03, sp) + 0000E1 16 07 [ 2] 209 ldw y, (0x07, sp) + 0000E3 FF [ 2] 210 ldw (x), y + 211 ; ../realloc.c: 104: f = pf; + 0000E4 16 03 [ 2] 212 ldw y, (0x03, sp) + 0000E6 17 05 [ 2] 213 ldw (0x05, sp), y + 0000E8 214 00117$: + 215 ; ../realloc.c: 107: if(next_free && next_free == h->next) // Merge with following block + 0000E8 1E 07 [ 2] 216 ldw x, (0x07, sp) + 0000EA 27 16 [ 1] 217 jreq 00120$ + 0000EC 1E 0B [ 2] 218 ldw x, (0x0b, sp) + 0000EE FE [ 2] 219 ldw x, (x) + 0000EF 13 07 [ 2] 220 cpw x, (0x07, sp) + 0000F1 26 0F [ 1] 221 jrne 00120$ + 222 ; ../realloc.c: 109: h->next = next_free->next; + 0000F3 1E 07 [ 2] 223 ldw x, (0x07, sp) + 0000F5 FE [ 2] 224 ldw x, (x) + 0000F6 16 0B [ 2] 225 ldw y, (0x0b, sp) + 0000F8 90 FF [ 2] 226 ldw (y), x + 227 ; ../realloc.c: 110: *f = next_free->next_free; + 0000FA 1E 07 [ 2] 228 ldw x, (0x07, sp) + 0000FC EE 02 [ 2] 229 ldw x, (0x2, x) + 0000FE 16 05 [ 2] 230 ldw y, (0x05, sp) + 000100 90 FF [ 2] 231 ldw (y), x + 000102 232 00120$: + 233 ; ../realloc.c: 113: if(maxblocksize >= blocksize + sizeof(struct header)) // Create new block from free space + 000102 1E 09 [ 2] 234 ldw x, (0x09, sp) + 000104 1C 00 04 [ 2] 235 addw x, #0x0004 + 000107 1F 11 [ 2] 236 ldw (0x11, sp), x + 000109 1E 13 [ 2] 237 ldw x, (0x13, sp) + 00010B 13 11 [ 2] 238 cpw x, (0x11, sp) + 00010D 25 21 [ 1] 239 jrc 00123$ + 240 ; ../realloc.c: 115: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + blocksize); + 00010F 1E 0B [ 2] 241 ldw x, (0x0b, sp) + 000111 72 FB 09 [ 2] 242 addw x, (0x09, sp) + 000114 1F 13 [ 2] 243 ldw (0x13, sp), x + 244 ; ../realloc.c: 116: newheader->next = h->next; + 000116 1E 0B [ 2] 245 ldw x, (0x0b, sp) + 000118 FE [ 2] 246 ldw x, (x) + 000119 16 13 [ 2] 247 ldw y, (0x13, sp) + 00011B 90 FF [ 2] 248 ldw (y), x + 249 ; ../realloc.c: 117: newheader->next_free = *f; + 00011D 1E 13 [ 2] 250 ldw x, (0x13, sp) + 00011F 5C [ 1] 251 incw x + 000120 5C [ 1] 252 incw x + 000121 16 05 [ 2] 253 ldw y, (0x05, sp) + 000123 90 FE [ 2] 254 ldw y, (y) + 000125 FF [ 2] 255 ldw (x), y + 256 ; ../realloc.c: 118: *f = newheader; + 000126 1E 05 [ 2] 257 ldw x, (0x05, sp) + 000128 16 13 [ 2] 258 ldw y, (0x13, sp) + 00012A FF [ 2] 259 ldw (x), y + 260 ; ../realloc.c: 119: h->next = newheader; + 00012B 1E 0B [ 2] 261 ldw x, (0x0b, sp) + 00012D 16 13 [ 2] 262 ldw y, (0x13, sp) + 00012F FF [ 2] 263 ldw (x), y + 000130 264 00123$: + 265 ; ../realloc.c: 122: return(&(h->next_free)); + 000130 1E 0B [ 2] 266 ldw x, (0x0b, sp) + 000132 5C [ 1] 267 incw x + 000133 5C [ 1] 268 incw x + 000134 20 2F [ 2] 269 jra 00132$ + 000136 270 00125$: + 271 ; ../realloc.c: 125: if(ret = malloc(size)) + 000136 1E 19 [ 2] 272 ldw x, (0x19, sp) + 000138 89 [ 2] 273 pushw x + 000139 CDr00r00 [ 4] 274 call _malloc + 00013C 5B 02 [ 2] 275 addw sp, #2 + 00013E 1F 13 [ 2] 276 ldw (0x13, sp), x + 000140 5D [ 2] 277 tnzw x + 000141 27 21 [ 1] 278 jreq 00127$ + 279 ; ../realloc.c: 127: size_t oldsize = oldblocksize - offsetof(struct header, next_free); + 000143 1E 11 [ 2] 280 ldw x, (0x11, sp) + 000145 5A [ 2] 281 decw x + 000146 5A [ 2] 282 decw x + 283 ; ../realloc.c: 128: memcpy(ret, ptr, size <= oldsize ? size : oldsize); + 000147 13 19 [ 2] 284 cpw x, (0x19, sp) + 000149 25 02 [ 1] 285 jrc 00136$ + 00014B 1E 19 [ 2] 286 ldw x, (0x19, sp) + 00014D 287 00136$: + 00014D 89 [ 2] 288 pushw x + 00014E 1E 19 [ 2] 289 ldw x, (0x19, sp) + 000150 89 [ 2] 290 pushw x + 000151 1E 17 [ 2] 291 ldw x, (0x17, sp) + 000153 89 [ 2] 292 pushw x + 000154 CDr00r00 [ 4] 293 call ___memcpy + 000157 5B 06 [ 2] 294 addw sp, #6 + 295 ; ../realloc.c: 129: free(ptr); + 000159 1E 17 [ 2] 296 ldw x, (0x17, sp) + 00015B 89 [ 2] 297 pushw x + 00015C CDr00r00 [ 4] 298 call _free + 00015F 5B 02 [ 2] 299 addw sp, #2 + 300 ; ../realloc.c: 130: return(ret); + 000161 1E 13 [ 2] 301 ldw x, (0x13, sp) + 302 ; ../realloc.c: 133: return(0); + 000163 21 303 .byte 0x21 + 000164 304 00127$: + 000164 5F [ 1] 305 clrw x + 000165 306 00132$: + 307 ; ../realloc.c: 134: } + 000165 5B 14 [ 2] 308 addw sp, #20 + 000167 81 [ 4] 309 ret + 310 .area CODE + 311 .area CONST + 312 .area INITIALIZER + 313 .area CABS (ABS) diff --git a/device/lib/stm8/realloc.rel b/device/lib/stm8/realloc.rel new file mode 100644 index 0000000..c550ff0 --- /dev/null +++ b/device/lib/stm8/realloc.rel @@ -0,0 +1,136 @@ +XH3 +H B areas 7 global symbols +M realloc +O -mstm8 +S _free Ref000000 +S _memmove Ref000000 +S _malloc Ref000000 +S .__.ABS. Def000000 +S ___memcpy Ref000000 +S ___sdcc_heap_free Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 168 flags 0 addr 0 +S _realloc Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 14 1E 17 26 0B 1E 19 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 02 +T 00 00 0D 02 CC 01 65 +R 00 00 00 09 00 05 00 09 +T 00 00 11 +R 00 00 00 09 +T 00 00 11 1E 19 26 0C 1E 17 89 CD 00 00 5B 02 5F +R 00 00 00 09 02 0B 00 00 +T 00 00 1E CC 01 65 +R 00 00 00 09 00 04 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 5F 1F 01 5F 1F 03 CE 00 00 1F 13 AE +R 00 00 00 09 12 0A 00 05 +T 00 00 2D 00 00 1F 05 +R 00 00 00 09 02 03 00 05 +T 00 00 31 +R 00 00 00 09 +T 00 00 31 1E 13 27 1D 16 17 17 11 1E 13 13 11 24 +R 00 00 00 09 +T 00 00 3E 13 16 13 17 01 16 05 17 03 1E 13 5C 5C +R 00 00 00 09 +T 00 00 4B 1F 05 FE 1F 13 20 DF +R 00 00 00 09 +T 00 00 52 +R 00 00 00 09 +T 00 00 52 16 13 17 07 1E 19 27 06 5C 5C 13 19 24 +R 00 00 00 09 +T 00 00 5F 04 +R 00 00 00 09 +T 00 00 60 +R 00 00 00 09 +T 00 00 60 5F CC 01 65 +R 00 00 00 09 00 05 00 09 +T 00 00 64 +R 00 00 00 09 +T 00 00 64 1F 09 A3 00 04 24 05 AE 00 04 1F 09 +R 00 00 00 09 +T 00 00 70 +R 00 00 00 09 +T 00 00 70 1E 17 5A 5A 1F 0B FE 1F 0D 16 0B 17 0F +R 00 00 00 09 +T 00 00 7D 72 F0 0F 1F 11 1F 13 1E 01 27 10 FE 13 +R 00 00 00 09 +T 00 00 8A 0B 26 0B 1E 01 50 72 FB 0F 72 FB 11 1F +R 00 00 00 09 +T 00 00 97 13 +R 00 00 00 09 +T 00 00 98 +R 00 00 00 09 +T 00 00 98 1E 07 13 0D 26 0F 1E 07 FE 16 07 17 0F +R 00 00 00 09 +T 00 00 A5 72 F0 0F 72 FB 13 1F 13 +R 00 00 00 09 +T 00 00 AD +R 00 00 00 09 +T 00 00 AD 1E 09 13 13 23 03 CC 01 36 +R 00 00 00 09 00 0A 00 09 +T 00 00 B6 +R 00 00 00 09 +T 00 00 B6 1E 01 27 2E FE 13 0B 26 29 1E 09 13 11 +R 00 00 00 09 +T 00 00 C3 22 04 16 09 17 11 +R 00 00 00 09 +T 00 00 C9 +R 00 00 00 09 +T 00 00 C9 16 0B 1E 01 7B 12 88 7B 12 88 90 89 89 +R 00 00 00 09 +T 00 00 D6 CD 00 00 5B 06 16 01 17 0B 1E 03 16 07 +R 00 00 00 09 02 04 00 01 +T 00 00 E3 FF 16 03 17 05 +R 00 00 00 09 +T 00 00 E8 +R 00 00 00 09 +T 00 00 E8 1E 07 27 16 1E 0B FE 13 07 26 0F 1E 07 +R 00 00 00 09 +T 00 00 F5 FE 16 0B 90 FF 1E 07 EE 02 16 05 90 FF +R 00 00 00 09 +T 00 01 02 +R 00 00 00 09 +T 00 01 02 1E 09 1C 00 04 1F 11 1E 13 13 11 25 21 +R 00 00 00 09 +T 00 01 0F 1E 0B 72 FB 09 1F 13 1E 0B FE 16 13 90 +R 00 00 00 09 +T 00 01 1C FF 1E 13 5C 5C 16 05 90 FE FF 1E 05 16 +R 00 00 00 09 +T 00 01 29 13 FF 1E 0B 16 13 FF +R 00 00 00 09 +T 00 01 30 +R 00 00 00 09 +T 00 01 30 1E 0B 5C 5C 20 2F +R 00 00 00 09 +T 00 01 36 +R 00 00 00 09 +T 00 01 36 1E 19 89 CD 00 00 5B 02 1F 13 5D 27 21 +R 00 00 00 09 02 07 00 02 +T 00 01 43 1E 11 5A 5A 13 19 25 02 1E 19 +R 00 00 00 09 +T 00 01 4D +R 00 00 00 09 +T 00 01 4D 89 1E 19 89 1E 17 89 CD 00 00 5B 06 1E +R 00 00 00 09 02 0B 00 04 +T 00 01 5A 17 89 CD 00 00 5B 02 1E 13 21 +R 00 00 00 09 02 06 00 00 +T 00 01 64 +R 00 00 00 09 +T 00 01 64 5F +R 00 00 00 09 +T 00 01 65 +R 00 00 00 09 +T 00 01 65 5B 14 81 +R 00 00 00 09 diff --git a/device/lib/stm8/realloc.sym b/device/lib/stm8/realloc.sym new file mode 100644 index 0000000..426f8a3 --- /dev/null +++ b/device/lib/stm8/realloc.sym @@ -0,0 +1,34 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___memcpy ****** GX + ___sdcc_heap_free ****** GX + _free ****** GX + _malloc ****** GX + _memmove ****** GX + 9 _realloc 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 168 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/setjmp.lst b/device/lib/stm8/setjmp.lst new file mode 100644 index 0000000..4e65fae --- /dev/null +++ b/device/lib/stm8/setjmp.lst @@ -0,0 +1,71 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; setjmp.s + 3 ; + 4 ; Copyright (C) 2014, Philipp Klaus Krause + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .area CODE + 30 + 31 .globl ___setjmp + 32 + 000000 33 ___setjmp: + 000000 16 03 [ 2] 34 ldw y, (3, sp) + 35 + 36 ; store return address + 000002 1E 01 [ 2] 37 ldw x, (1, sp) + 000004 90 FF [ 2] 38 ldw (y), x + 39 + 40 ; store stack pointer + 000006 96 [ 1] 41 ldw x, sp + 000007 90 EF 02 [ 2] 42 ldw (2, y), x + 43 + 44 ; return 0 + 00000A 5F [ 1] 45 clrw x + 46 + 00000B 81 [ 4] 47 ret + 48 + 49 .globl _longjmp + 50 + 00000C 51 _longjmp: + 00000C 1E 03 [ 2] 52 ldw x, (3, sp) + 00000E 16 05 [ 2] 53 ldw y, (5, sp) + 54 + 55 ; Restore stack pointer + 000010 89 [ 2] 56 pushw x + 000011 EE 02 [ 2] 57 ldw x, (2, x) + 000013 EF 01 [ 2] 58 ldw (1, x), y + 000015 90 85 [ 2] 59 popw y + 000017 94 [ 1] 60 ldw sp, x + 61 + 62 ; Calculate return value + 000018 85 [ 2] 63 popw x + 000019 5D [ 2] 64 tnzw x + 00001A 26 01 [ 1] 65 jrne jump + 00001C 5C [ 1] 66 incw x + 00001D 67 jump: + 68 ; Return + 00001D 90 FE [ 2] 69 ldw y, (y) + 00001F 90 FC [ 2] 70 jp (y) + 71 diff --git a/device/lib/stm8/setjmp.rel b/device/lib/stm8/setjmp.rel new file mode 100644 index 0000000..10abc06 --- /dev/null +++ b/device/lib/stm8/setjmp.rel @@ -0,0 +1,21 @@ +XH3 +H 2 areas 3 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 21 flags 0 addr 0 +S _longjmp Def00000C +S ___setjmp Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 16 03 1E 01 90 FF 96 90 EF 02 5F 81 +R 00 00 00 01 +T 00 00 0C +R 00 00 00 01 +T 00 00 0C 1E 03 16 05 89 EE 02 EF 01 90 85 94 85 +R 00 00 00 01 +T 00 00 19 5D 26 01 5C +R 00 00 00 01 +T 00 00 1D +R 00 00 00 01 +T 00 00 1D 90 FE 90 FC +R 00 00 00 01 diff --git a/device/lib/stm8/setjmp.s b/device/lib/stm8/setjmp.s new file mode 100644 index 0000000..5771927 --- /dev/null +++ b/device/lib/stm8/setjmp.s @@ -0,0 +1,71 @@ +;-------------------------------------------------------------------------- +; setjmp.s +; +; Copyright (C) 2014, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .area CODE + + .globl ___setjmp + +___setjmp: + ldw y, (3, sp) + + ; store return address + ldw x, (1, sp) + ldw (y), x + + ; store stack pointer + ldw x, sp + ldw (2, y), x + + ; return 0 + clrw x + + ret + + .globl _longjmp + +_longjmp: + ldw x, (3, sp) + ldw y, (5, sp) + + ; Restore stack pointer + pushw x + ldw x, (2, x) + ldw (1, x), y + popw y + ldw sp, x + + ; Calculate return value + popw x + tnzw x + jrne jump + incw x +jump: + ; Return + ldw y, (y) + jp (y) + diff --git a/device/lib/stm8/setjmp.sym b/device/lib/stm8/setjmp.sym new file mode 100644 index 0000000..639c15d --- /dev/null +++ b/device/lib/stm8/setjmp.sym @@ -0,0 +1,17 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 ___setjm 000000 GR | 1 _longjmp 00000C GR + 1 jump 00001D R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 21 flags 0 + diff --git a/device/lib/stm8/sincosf.asm b/device/lib/stm8/sincosf.asm new file mode 100644 index 0000000..bfd98c9 --- /dev/null +++ b/device/lib/stm8/sincosf.asm @@ -0,0 +1,412 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module sincosf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _sincosf + .globl _fabsf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../sincosf.c: 50: float sincosf(float x, bool iscos) +; ----------------------------------------- +; function sincosf +; ----------------------------------------- +_sincosf: + sub sp, #13 +; ../sincosf.c: 56: if(iscos) + tnz (0x14, sp) + jreq 00105$ +; ../sincosf.c: 58: y=fabsf(x)+HALF_PI; + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + call _fabsf + addw sp, #4 + push #0xdb + push #0x0f + push #0xc9 + push #0x3f + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0a, sp), x + ldw (0x08, sp), y +; ../sincosf.c: 59: sign=0; + clr (0x0d, sp) + jra 00106$ +00105$: +; ../sincosf.c: 63: if(x<0.0) + clrw x + pushw x + clrw x + pushw x + ldw x, (0x16, sp) + pushw x + ldw x, (0x16, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00102$ +; ../sincosf.c: 64: { y=-x; sign=1; } + ldw y, (0x12, sp) + ldw x, (0x10, sp) + sllw x + ccf + rrcw x + ldw (0x0a, sp), y + ldw (0x08, sp), x + ld a, #0x01 + ld (0x0d, sp), a + jra 00106$ +00102$: +; ../sincosf.c: 66: { y=x; sign=0; } + ldw y, (0x12, sp) + ldw (0x0a, sp), y + ldw y, (0x10, sp) + ldw (0x08, sp), y + clr (0x0d, sp) +00106$: +; ../sincosf.c: 69: if(y>YMAX) + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + push #0x00 + push #0x0c + push #0x49 + push #0x46 + call ___fslt + addw sp, #8 + ld (0x0c, sp), a + jreq 00108$ +; ../sincosf.c: 71: errno=ERANGE; + ldw x, #0x0022 + ldw _errno+0, x +; ../sincosf.c: 72: return 0.0; + clrw x + clrw y + jp 00115$ +00108$: +; ../sincosf.c: 76: N=((y*iPI)+0.5); /*y is positive*/ + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + push #0x83 + push #0xf9 + push #0xa2 + push #0x3e + call ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + call ___fsadd + addw sp, #8 + pushw x + pushw y + call ___fs2sint + addw sp, #4 +; ../sincosf.c: 79: if(N&1) sign=!sign; + ld a, xl + srl a + jrnc 00110$ + ld a, (0x0d, sp) + sub a, #0x01 + clr a + rlc a + ld (0x0d, sp), a +00110$: +; ../sincosf.c: 81: XN=N; + pushw x + call ___sint2fs + addw sp, #2 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../sincosf.c: 83: if(iscos) XN-=0.5; + tnz (0x14, sp) + jreq 00112$ + clrw x + pushw x + push #0x00 + push #0x3f + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x03, sp), x + ldw (0x01, sp), y +00112$: +; ../sincosf.c: 85: y=fabsf(x); + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + call _fabsf + addw sp, #4 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../sincosf.c: 86: r=(int)y; + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fs2sint + addw sp, #4 + pushw x + call ___sint2fs + addw sp, #2 + ldw (0x0b, sp), x + ldw (0x09, sp), y +; ../sincosf.c: 87: g=y-r; + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../sincosf.c: 88: f=((r-XN*C1)+g)-XN*C2; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + clrw x + pushw x + push #0x49 + push #0x40 + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x0b, sp), x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + push #0x22 + push #0xaa + push #0x7d + push #0x3a + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../sincosf.c: 90: g=f*f; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../sincosf.c: 91: if(g>EPS2) //Used to be if(fabsf(f)>EPS) + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + push #0xf3 + push #0xff + push #0x7f + push #0x33 + call ___fslt + addw sp, #8 + tnz a + jrne 00159$ + jp 00114$ +00159$: +; ../sincosf.c: 93: r=(((r4*g+r3)*g+r2)*g+r1)*g; + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + push #0x5b + push #0x9c + push #0x2e + push #0x36 + call ___fsmul + addw sp, #8 + push #0x22 + push #0xb2 + push #0x4f + push #0xb9 + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + push #0x3e + push #0x87 + push #0x08 + push #0x3c + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + push #0xa4 + push #0xaa + push #0x2a + push #0xbe + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 +; ../sincosf.c: 94: f+=f*r; + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x03, sp), x + ldw (0x01, sp), y +00114$: +; ../sincosf.c: 96: return (sign?-f:f); + tnz (0x0d, sp) + jreq 00117$ + ldw y, (0x03, sp) + ldw x, (0x01, sp) + sllw x + ccf + rrcw x + ldw (0x0c, sp), y + ldw (0x0a, sp), x + jra 00118$ +00117$: + ldw y, (0x03, sp) + ldw (0x0c, sp), y + ldw y, (0x01, sp) + ldw (0x0a, sp), y +00118$: + ldw x, (0x0c, sp) + ldw y, (0x0a, sp) +00115$: +; ../sincosf.c: 97: } + addw sp, #13 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/sincosf.lst b/device/lib/stm8/sincosf.lst new file mode 100644 index 0000000..f4f62ef --- /dev/null +++ b/device/lib/stm8/sincosf.lst @@ -0,0 +1,412 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module sincosf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _sincosf + 12 .globl _fabsf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../sincosf.c: 50: float sincosf(float x, bool iscos) + 51 ; ----------------------------------------- + 52 ; function sincosf + 53 ; ----------------------------------------- + 000000 54 _sincosf: + 000000 52 0D [ 2] 55 sub sp, #13 + 56 ; ../sincosf.c: 56: if(iscos) + 000002 0D 14 [ 1] 57 tnz (0x14, sp) + 000004 27 23 [ 1] 58 jreq 00105$ + 59 ; ../sincosf.c: 58: y=fabsf(x)+HALF_PI; + 000006 1E 12 [ 2] 60 ldw x, (0x12, sp) + 000008 89 [ 2] 61 pushw x + 000009 1E 12 [ 2] 62 ldw x, (0x12, sp) + 00000B 89 [ 2] 63 pushw x + 00000C CDr00r00 [ 4] 64 call _fabsf + 00000F 5B 04 [ 2] 65 addw sp, #4 + 000011 4B DB [ 1] 66 push #0xdb + 000013 4B 0F [ 1] 67 push #0x0f + 000015 4B C9 [ 1] 68 push #0xc9 + 000017 4B 3F [ 1] 69 push #0x3f + 000019 89 [ 2] 70 pushw x + 00001A 90 89 [ 2] 71 pushw y + 00001C CDr00r00 [ 4] 72 call ___fsadd + 00001F 5B 08 [ 2] 73 addw sp, #8 + 000021 1F 0A [ 2] 74 ldw (0x0a, sp), x + 000023 17 08 [ 2] 75 ldw (0x08, sp), y + 76 ; ../sincosf.c: 59: sign=0; + 000025 0F 0D [ 1] 77 clr (0x0d, sp) + 000027 20 2D [ 2] 78 jra 00106$ + 000029 79 00105$: + 80 ; ../sincosf.c: 63: if(x<0.0) + 000029 5F [ 1] 81 clrw x + 00002A 89 [ 2] 82 pushw x + 00002B 5F [ 1] 83 clrw x + 00002C 89 [ 2] 84 pushw x + 00002D 1E 16 [ 2] 85 ldw x, (0x16, sp) + 00002F 89 [ 2] 86 pushw x + 000030 1E 16 [ 2] 87 ldw x, (0x16, sp) + 000032 89 [ 2] 88 pushw x + 000033 CDr00r00 [ 4] 89 call ___fslt + 000036 5B 08 [ 2] 90 addw sp, #8 + 000038 4D [ 1] 91 tnz a + 000039 27 11 [ 1] 92 jreq 00102$ + 93 ; ../sincosf.c: 64: { y=-x; sign=1; } + 00003B 16 12 [ 2] 94 ldw y, (0x12, sp) + 00003D 1E 10 [ 2] 95 ldw x, (0x10, sp) + 00003F 58 [ 2] 96 sllw x + 000040 8C [ 1] 97 ccf + 000041 56 [ 2] 98 rrcw x + 000042 17 0A [ 2] 99 ldw (0x0a, sp), y + 000044 1F 08 [ 2] 100 ldw (0x08, sp), x + 000046 A6 01 [ 1] 101 ld a, #0x01 + 000048 6B 0D [ 1] 102 ld (0x0d, sp), a + 00004A 20 0A [ 2] 103 jra 00106$ + 00004C 104 00102$: + 105 ; ../sincosf.c: 66: { y=x; sign=0; } + 00004C 16 12 [ 2] 106 ldw y, (0x12, sp) + 00004E 17 0A [ 2] 107 ldw (0x0a, sp), y + 000050 16 10 [ 2] 108 ldw y, (0x10, sp) + 000052 17 08 [ 2] 109 ldw (0x08, sp), y + 000054 0F 0D [ 1] 110 clr (0x0d, sp) + 000056 111 00106$: + 112 ; ../sincosf.c: 69: if(y>YMAX) + 000056 1E 0A [ 2] 113 ldw x, (0x0a, sp) + 000058 89 [ 2] 114 pushw x + 000059 1E 0A [ 2] 115 ldw x, (0x0a, sp) + 00005B 89 [ 2] 116 pushw x + 00005C 4B 00 [ 1] 117 push #0x00 + 00005E 4B 0C [ 1] 118 push #0x0c + 000060 4B 49 [ 1] 119 push #0x49 + 000062 4B 46 [ 1] 120 push #0x46 + 000064 CDr00r00 [ 4] 121 call ___fslt + 000067 5B 08 [ 2] 122 addw sp, #8 + 000069 6B 0C [ 1] 123 ld (0x0c, sp), a + 00006B 27 0C [ 1] 124 jreq 00108$ + 125 ; ../sincosf.c: 71: errno=ERANGE; + 00006D AE 00 22 [ 2] 126 ldw x, #0x0022 + 000070 CFu00u00 [ 2] 127 ldw _errno+0, x + 128 ; ../sincosf.c: 72: return 0.0; + 000073 5F [ 1] 129 clrw x + 000074 90 5F [ 1] 130 clrw y + 000076 CCr02r4A [ 2] 131 jp 00115$ + 000079 132 00108$: + 133 ; ../sincosf.c: 76: N=((y*iPI)+0.5); /*y is positive*/ + 000079 1E 0A [ 2] 134 ldw x, (0x0a, sp) + 00007B 89 [ 2] 135 pushw x + 00007C 1E 0A [ 2] 136 ldw x, (0x0a, sp) + 00007E 89 [ 2] 137 pushw x + 00007F 4B 83 [ 1] 138 push #0x83 + 000081 4B F9 [ 1] 139 push #0xf9 + 000083 4B A2 [ 1] 140 push #0xa2 + 000085 4B 3E [ 1] 141 push #0x3e + 000087 CDr00r00 [ 4] 142 call ___fsmul + 00008A 5B 08 [ 2] 143 addw sp, #8 + 00008C 4B 00 [ 1] 144 push #0x00 + 00008E 4B 00 [ 1] 145 push #0x00 + 000090 4B 00 [ 1] 146 push #0x00 + 000092 4B 3F [ 1] 147 push #0x3f + 000094 89 [ 2] 148 pushw x + 000095 90 89 [ 2] 149 pushw y + 000097 CDr00r00 [ 4] 150 call ___fsadd + 00009A 5B 08 [ 2] 151 addw sp, #8 + 00009C 89 [ 2] 152 pushw x + 00009D 90 89 [ 2] 153 pushw y + 00009F CDr00r00 [ 4] 154 call ___fs2sint + 0000A2 5B 04 [ 2] 155 addw sp, #4 + 156 ; ../sincosf.c: 79: if(N&1) sign=!sign; + 0000A4 9F [ 1] 157 ld a, xl + 0000A5 44 [ 1] 158 srl a + 0000A6 24 08 [ 1] 159 jrnc 00110$ + 0000A8 7B 0D [ 1] 160 ld a, (0x0d, sp) + 0000AA A0 01 [ 1] 161 sub a, #0x01 + 0000AC 4F [ 1] 162 clr a + 0000AD 49 [ 1] 163 rlc a + 0000AE 6B 0D [ 1] 164 ld (0x0d, sp), a + 0000B0 165 00110$: + 166 ; ../sincosf.c: 81: XN=N; + 0000B0 89 [ 2] 167 pushw x + 0000B1 CDr00r00 [ 4] 168 call ___sint2fs + 0000B4 5B 02 [ 2] 169 addw sp, #2 + 0000B6 1F 03 [ 2] 170 ldw (0x03, sp), x + 0000B8 17 01 [ 2] 171 ldw (0x01, sp), y + 172 ; ../sincosf.c: 83: if(iscos) XN-=0.5; + 0000BA 0D 14 [ 1] 173 tnz (0x14, sp) + 0000BC 27 15 [ 1] 174 jreq 00112$ + 0000BE 5F [ 1] 175 clrw x + 0000BF 89 [ 2] 176 pushw x + 0000C0 4B 00 [ 1] 177 push #0x00 + 0000C2 4B 3F [ 1] 178 push #0x3f + 0000C4 1E 07 [ 2] 179 ldw x, (0x07, sp) + 0000C6 89 [ 2] 180 pushw x + 0000C7 1E 07 [ 2] 181 ldw x, (0x07, sp) + 0000C9 89 [ 2] 182 pushw x + 0000CA CDr00r00 [ 4] 183 call ___fssub + 0000CD 5B 08 [ 2] 184 addw sp, #8 + 0000CF 1F 03 [ 2] 185 ldw (0x03, sp), x + 0000D1 17 01 [ 2] 186 ldw (0x01, sp), y + 0000D3 187 00112$: + 188 ; ../sincosf.c: 85: y=fabsf(x); + 0000D3 1E 12 [ 2] 189 ldw x, (0x12, sp) + 0000D5 89 [ 2] 190 pushw x + 0000D6 1E 12 [ 2] 191 ldw x, (0x12, sp) + 0000D8 89 [ 2] 192 pushw x + 0000D9 CDr00r00 [ 4] 193 call _fabsf + 0000DC 5B 04 [ 2] 194 addw sp, #4 + 0000DE 1F 07 [ 2] 195 ldw (0x07, sp), x + 0000E0 17 05 [ 2] 196 ldw (0x05, sp), y + 197 ; ../sincosf.c: 86: r=(int)y; + 0000E2 1E 07 [ 2] 198 ldw x, (0x07, sp) + 0000E4 89 [ 2] 199 pushw x + 0000E5 1E 07 [ 2] 200 ldw x, (0x07, sp) + 0000E7 89 [ 2] 201 pushw x + 0000E8 CDr00r00 [ 4] 202 call ___fs2sint + 0000EB 5B 04 [ 2] 203 addw sp, #4 + 0000ED 89 [ 2] 204 pushw x + 0000EE CDr00r00 [ 4] 205 call ___sint2fs + 0000F1 5B 02 [ 2] 206 addw sp, #2 + 0000F3 1F 0B [ 2] 207 ldw (0x0b, sp), x + 0000F5 17 09 [ 2] 208 ldw (0x09, sp), y + 209 ; ../sincosf.c: 87: g=y-r; + 0000F7 1E 0B [ 2] 210 ldw x, (0x0b, sp) + 0000F9 89 [ 2] 211 pushw x + 0000FA 1E 0B [ 2] 212 ldw x, (0x0b, sp) + 0000FC 89 [ 2] 213 pushw x + 0000FD 1E 0B [ 2] 214 ldw x, (0x0b, sp) + 0000FF 89 [ 2] 215 pushw x + 000100 1E 0B [ 2] 216 ldw x, (0x0b, sp) + 000102 89 [ 2] 217 pushw x + 000103 CDr00r00 [ 4] 218 call ___fssub + 000106 5B 08 [ 2] 219 addw sp, #8 + 000108 1F 07 [ 2] 220 ldw (0x07, sp), x + 00010A 17 05 [ 2] 221 ldw (0x05, sp), y + 222 ; ../sincosf.c: 88: f=((r-XN*C1)+g)-XN*C2; + 00010C 1E 03 [ 2] 223 ldw x, (0x03, sp) + 00010E 89 [ 2] 224 pushw x + 00010F 1E 03 [ 2] 225 ldw x, (0x03, sp) + 000111 89 [ 2] 226 pushw x + 000112 5F [ 1] 227 clrw x + 000113 89 [ 2] 228 pushw x + 000114 4B 49 [ 1] 229 push #0x49 + 000116 4B 40 [ 1] 230 push #0x40 + 000118 CDr00r00 [ 4] 231 call ___fsmul + 00011B 5B 08 [ 2] 232 addw sp, #8 + 00011D 89 [ 2] 233 pushw x + 00011E 90 89 [ 2] 234 pushw y + 000120 1E 0F [ 2] 235 ldw x, (0x0f, sp) + 000122 89 [ 2] 236 pushw x + 000123 1E 0F [ 2] 237 ldw x, (0x0f, sp) + 000125 89 [ 2] 238 pushw x + 000126 CDr00r00 [ 4] 239 call ___fssub + 000129 5B 08 [ 2] 240 addw sp, #8 + 00012B 1F 0B [ 2] 241 ldw (0x0b, sp), x + 00012D 1E 07 [ 2] 242 ldw x, (0x07, sp) + 00012F 89 [ 2] 243 pushw x + 000130 1E 07 [ 2] 244 ldw x, (0x07, sp) + 000132 89 [ 2] 245 pushw x + 000133 1E 0F [ 2] 246 ldw x, (0x0f, sp) + 000135 89 [ 2] 247 pushw x + 000136 90 89 [ 2] 248 pushw y + 000138 CDr00r00 [ 4] 249 call ___fsadd + 00013B 5B 08 [ 2] 250 addw sp, #8 + 00013D 1F 0B [ 2] 251 ldw (0x0b, sp), x + 00013F 17 09 [ 2] 252 ldw (0x09, sp), y + 000141 1E 03 [ 2] 253 ldw x, (0x03, sp) + 000143 89 [ 2] 254 pushw x + 000144 1E 03 [ 2] 255 ldw x, (0x03, sp) + 000146 89 [ 2] 256 pushw x + 000147 4B 22 [ 1] 257 push #0x22 + 000149 4B AA [ 1] 258 push #0xaa + 00014B 4B 7D [ 1] 259 push #0x7d + 00014D 4B 3A [ 1] 260 push #0x3a + 00014F CDr00r00 [ 4] 261 call ___fsmul + 000152 5B 08 [ 2] 262 addw sp, #8 + 000154 89 [ 2] 263 pushw x + 000155 90 89 [ 2] 264 pushw y + 000157 1E 0F [ 2] 265 ldw x, (0x0f, sp) + 000159 89 [ 2] 266 pushw x + 00015A 1E 0F [ 2] 267 ldw x, (0x0f, sp) + 00015C 89 [ 2] 268 pushw x + 00015D CDr00r00 [ 4] 269 call ___fssub + 000160 5B 08 [ 2] 270 addw sp, #8 + 000162 1F 03 [ 2] 271 ldw (0x03, sp), x + 000164 17 01 [ 2] 272 ldw (0x01, sp), y + 273 ; ../sincosf.c: 90: g=f*f; + 000166 1E 03 [ 2] 274 ldw x, (0x03, sp) + 000168 89 [ 2] 275 pushw x + 000169 1E 03 [ 2] 276 ldw x, (0x03, sp) + 00016B 89 [ 2] 277 pushw x + 00016C 1E 07 [ 2] 278 ldw x, (0x07, sp) + 00016E 89 [ 2] 279 pushw x + 00016F 1E 07 [ 2] 280 ldw x, (0x07, sp) + 000171 89 [ 2] 281 pushw x + 000172 CDr00r00 [ 4] 282 call ___fsmul + 000175 5B 08 [ 2] 283 addw sp, #8 + 000177 1F 07 [ 2] 284 ldw (0x07, sp), x + 000179 17 05 [ 2] 285 ldw (0x05, sp), y + 286 ; ../sincosf.c: 91: if(g>EPS2) //Used to be if(fabsf(f)>EPS) + 00017B 1E 07 [ 2] 287 ldw x, (0x07, sp) + 00017D 89 [ 2] 288 pushw x + 00017E 1E 07 [ 2] 289 ldw x, (0x07, sp) + 000180 89 [ 2] 290 pushw x + 000181 4B F3 [ 1] 291 push #0xf3 + 000183 4B FF [ 1] 292 push #0xff + 000185 4B 7F [ 1] 293 push #0x7f + 000187 4B 33 [ 1] 294 push #0x33 + 000189 CDr00r00 [ 4] 295 call ___fslt + 00018C 5B 08 [ 2] 296 addw sp, #8 + 00018E 4D [ 1] 297 tnz a + 00018F 26 03 [ 1] 298 jrne 00159$ + 000191 CCr02r2D [ 2] 299 jp 00114$ + 000194 300 00159$: + 301 ; ../sincosf.c: 93: r=(((r4*g+r3)*g+r2)*g+r1)*g; + 000194 1E 07 [ 2] 302 ldw x, (0x07, sp) + 000196 89 [ 2] 303 pushw x + 000197 1E 07 [ 2] 304 ldw x, (0x07, sp) + 000199 89 [ 2] 305 pushw x + 00019A 4B 5B [ 1] 306 push #0x5b + 00019C 4B 9C [ 1] 307 push #0x9c + 00019E 4B 2E [ 1] 308 push #0x2e + 0001A0 4B 36 [ 1] 309 push #0x36 + 0001A2 CDr00r00 [ 4] 310 call ___fsmul + 0001A5 5B 08 [ 2] 311 addw sp, #8 + 0001A7 4B 22 [ 1] 312 push #0x22 + 0001A9 4B B2 [ 1] 313 push #0xb2 + 0001AB 4B 4F [ 1] 314 push #0x4f + 0001AD 4B B9 [ 1] 315 push #0xb9 + 0001AF 89 [ 2] 316 pushw x + 0001B0 90 89 [ 2] 317 pushw y + 0001B2 CDr00r00 [ 4] 318 call ___fsadd + 0001B5 5B 08 [ 2] 319 addw sp, #8 + 0001B7 1F 0B [ 2] 320 ldw (0x0b, sp), x + 0001B9 1E 07 [ 2] 321 ldw x, (0x07, sp) + 0001BB 89 [ 2] 322 pushw x + 0001BC 1E 07 [ 2] 323 ldw x, (0x07, sp) + 0001BE 89 [ 2] 324 pushw x + 0001BF 1E 0F [ 2] 325 ldw x, (0x0f, sp) + 0001C1 89 [ 2] 326 pushw x + 0001C2 90 89 [ 2] 327 pushw y + 0001C4 CDr00r00 [ 4] 328 call ___fsmul + 0001C7 5B 08 [ 2] 329 addw sp, #8 + 0001C9 4B 3E [ 1] 330 push #0x3e + 0001CB 4B 87 [ 1] 331 push #0x87 + 0001CD 4B 08 [ 1] 332 push #0x08 + 0001CF 4B 3C [ 1] 333 push #0x3c + 0001D1 89 [ 2] 334 pushw x + 0001D2 90 89 [ 2] 335 pushw y + 0001D4 CDr00r00 [ 4] 336 call ___fsadd + 0001D7 5B 08 [ 2] 337 addw sp, #8 + 0001D9 1F 0B [ 2] 338 ldw (0x0b, sp), x + 0001DB 1E 07 [ 2] 339 ldw x, (0x07, sp) + 0001DD 89 [ 2] 340 pushw x + 0001DE 1E 07 [ 2] 341 ldw x, (0x07, sp) + 0001E0 89 [ 2] 342 pushw x + 0001E1 1E 0F [ 2] 343 ldw x, (0x0f, sp) + 0001E3 89 [ 2] 344 pushw x + 0001E4 90 89 [ 2] 345 pushw y + 0001E6 CDr00r00 [ 4] 346 call ___fsmul + 0001E9 5B 08 [ 2] 347 addw sp, #8 + 0001EB 4B A4 [ 1] 348 push #0xa4 + 0001ED 4B AA [ 1] 349 push #0xaa + 0001EF 4B 2A [ 1] 350 push #0x2a + 0001F1 4B BE [ 1] 351 push #0xbe + 0001F3 89 [ 2] 352 pushw x + 0001F4 90 89 [ 2] 353 pushw y + 0001F6 CDr00r00 [ 4] 354 call ___fsadd + 0001F9 5B 08 [ 2] 355 addw sp, #8 + 0001FB 1F 0B [ 2] 356 ldw (0x0b, sp), x + 0001FD 1E 07 [ 2] 357 ldw x, (0x07, sp) + 0001FF 89 [ 2] 358 pushw x + 000200 1E 07 [ 2] 359 ldw x, (0x07, sp) + 000202 89 [ 2] 360 pushw x + 000203 1E 0F [ 2] 361 ldw x, (0x0f, sp) + 000205 89 [ 2] 362 pushw x + 000206 90 89 [ 2] 363 pushw y + 000208 CDr00r00 [ 4] 364 call ___fsmul + 00020B 5B 08 [ 2] 365 addw sp, #8 + 366 ; ../sincosf.c: 94: f+=f*r; + 00020D 89 [ 2] 367 pushw x + 00020E 90 89 [ 2] 368 pushw y + 000210 1E 07 [ 2] 369 ldw x, (0x07, sp) + 000212 89 [ 2] 370 pushw x + 000213 1E 07 [ 2] 371 ldw x, (0x07, sp) + 000215 89 [ 2] 372 pushw x + 000216 CDr00r00 [ 4] 373 call ___fsmul + 000219 5B 08 [ 2] 374 addw sp, #8 + 00021B 89 [ 2] 375 pushw x + 00021C 90 89 [ 2] 376 pushw y + 00021E 1E 07 [ 2] 377 ldw x, (0x07, sp) + 000220 89 [ 2] 378 pushw x + 000221 1E 07 [ 2] 379 ldw x, (0x07, sp) + 000223 89 [ 2] 380 pushw x + 000224 CDr00r00 [ 4] 381 call ___fsadd + 000227 5B 08 [ 2] 382 addw sp, #8 + 000229 1F 03 [ 2] 383 ldw (0x03, sp), x + 00022B 17 01 [ 2] 384 ldw (0x01, sp), y + 00022D 385 00114$: + 386 ; ../sincosf.c: 96: return (sign?-f:f); + 00022D 0D 0D [ 1] 387 tnz (0x0d, sp) + 00022F 27 0D [ 1] 388 jreq 00117$ + 000231 16 03 [ 2] 389 ldw y, (0x03, sp) + 000233 1E 01 [ 2] 390 ldw x, (0x01, sp) + 000235 58 [ 2] 391 sllw x + 000236 8C [ 1] 392 ccf + 000237 56 [ 2] 393 rrcw x + 000238 17 0C [ 2] 394 ldw (0x0c, sp), y + 00023A 1F 0A [ 2] 395 ldw (0x0a, sp), x + 00023C 20 08 [ 2] 396 jra 00118$ + 00023E 397 00117$: + 00023E 16 03 [ 2] 398 ldw y, (0x03, sp) + 000240 17 0C [ 2] 399 ldw (0x0c, sp), y + 000242 16 01 [ 2] 400 ldw y, (0x01, sp) + 000244 17 0A [ 2] 401 ldw (0x0a, sp), y + 000246 402 00118$: + 000246 1E 0C [ 2] 403 ldw x, (0x0c, sp) + 000248 16 0A [ 2] 404 ldw y, (0x0a, sp) + 00024A 405 00115$: + 406 ; ../sincosf.c: 97: } + 00024A 5B 0D [ 2] 407 addw sp, #13 + 00024C 81 [ 4] 408 ret + 409 .area CODE + 410 .area CONST + 411 .area INITIALIZER + 412 .area CABS (ABS) diff --git a/device/lib/stm8/sincosf.rel b/device/lib/stm8/sincosf.rel new file mode 100644 index 0000000..beb3a1c --- /dev/null +++ b/device/lib/stm8/sincosf.rel @@ -0,0 +1,151 @@ +XH3 +H B areas A global symbols +M sincosf +O -mstm8 +S ___fssub Ref000000 +S ___fsmul Ref000000 +S _errno Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S _fabsf Ref000000 +S ___sint2fs Ref000000 +S ___fs2sint Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 24D flags 0 addr 0 +S _sincosf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0D 0D 14 27 23 1E 12 89 1E 12 89 CD +R 00 00 00 09 +T 00 00 0D 00 00 5B 04 4B DB 4B 0F 4B C9 4B 3F 89 +R 00 00 00 09 02 03 00 06 +T 00 00 1A 90 89 CD 00 00 5B 08 1F 0A 17 08 0F 0D +R 00 00 00 09 02 06 00 05 +T 00 00 27 20 2D +R 00 00 00 09 +T 00 00 29 +R 00 00 00 09 +T 00 00 29 5F 89 5F 89 1E 16 89 1E 16 89 CD 00 00 +R 00 00 00 09 02 0E 00 03 +T 00 00 36 5B 08 4D 27 11 16 12 1E 10 58 8C 56 17 +R 00 00 00 09 +T 00 00 43 0A 1F 08 A6 01 6B 0D 20 0A +R 00 00 00 09 +T 00 00 4C +R 00 00 00 09 +T 00 00 4C 16 12 17 0A 16 10 17 08 0F 0D +R 00 00 00 09 +T 00 00 56 +R 00 00 00 09 +T 00 00 56 1E 0A 89 1E 0A 89 4B 00 4B 0C 4B 49 4B +R 00 00 00 09 +T 00 00 63 46 CD 00 00 5B 08 6B 0C 27 0C AE 00 22 +R 00 00 00 09 02 05 00 03 +T 00 00 70 CF 00 00 5F 90 5F CC 02 4A +R 00 00 00 09 12 04 00 02 00 0A 00 09 +T 00 00 79 +R 00 00 00 09 +T 00 00 79 1E 0A 89 1E 0A 89 4B 83 4B F9 4B A2 4B +R 00 00 00 09 +T 00 00 86 3E CD 00 00 5B 08 4B 00 4B 00 4B 00 4B +R 00 00 00 09 02 05 00 01 +T 00 00 93 3F 89 90 89 CD 00 00 5B 08 89 90 89 CD +R 00 00 00 09 02 08 00 05 +T 00 00 A0 00 00 5B 04 9F 44 24 08 7B 0D A0 01 4F +R 00 00 00 09 02 03 00 08 +T 00 00 AD 49 6B 0D +R 00 00 00 09 +T 00 00 B0 +R 00 00 00 09 +T 00 00 B0 89 CD 00 00 5B 02 1F 03 17 01 0D 14 27 +R 00 00 00 09 02 05 00 07 +T 00 00 BD 15 5F 89 4B 00 4B 3F 1E 07 89 1E 07 89 +R 00 00 00 09 +T 00 00 CA CD 00 00 5B 08 1F 03 17 01 +R 00 00 00 09 02 04 00 00 +T 00 00 D3 +R 00 00 00 09 +T 00 00 D3 1E 12 89 1E 12 89 CD 00 00 5B 04 1F 07 +R 00 00 00 09 02 0A 00 06 +T 00 00 E0 17 05 1E 07 89 1E 07 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 08 +T 00 00 ED 89 CD 00 00 5B 02 1F 0B 17 09 1E 0B 89 +R 00 00 00 09 02 05 00 07 +T 00 00 FA 1E 0B 89 1E 0B 89 1E 0B 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 00 +T 00 01 07 08 1F 07 17 05 1E 03 89 1E 03 89 5F 89 +R 00 00 00 09 +T 00 01 14 4B 49 4B 40 CD 00 00 5B 08 89 90 89 1E +R 00 00 00 09 02 08 00 01 +T 00 01 21 0F 89 1E 0F 89 CD 00 00 5B 08 1F 0B 1E +R 00 00 00 09 02 09 00 00 +T 00 01 2E 07 89 1E 07 89 1E 0F 89 90 89 CD 00 00 +R 00 00 00 09 02 0E 00 05 +T 00 01 3B 5B 08 1F 0B 17 09 1E 03 89 1E 03 89 4B +R 00 00 00 09 +T 00 01 48 22 4B AA 4B 7D 4B 3A CD 00 00 5B 08 89 +R 00 00 00 09 02 0B 00 01 +T 00 01 55 90 89 1E 0F 89 1E 0F 89 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 00 +T 00 01 62 1F 03 17 01 1E 03 89 1E 03 89 1E 07 89 +R 00 00 00 09 +T 00 01 6F 1E 07 89 CD 00 00 5B 08 1F 07 17 05 1E +R 00 00 00 09 02 07 00 01 +T 00 01 7C 07 89 1E 07 89 4B F3 4B FF 4B 7F 4B 33 +R 00 00 00 09 +T 00 01 89 CD 00 00 5B 08 4D 26 03 CC 02 2D +R 00 00 00 09 02 04 00 03 00 0C 00 09 +T 00 01 94 +R 00 00 00 09 +T 00 01 94 1E 07 89 1E 07 89 4B 5B 4B 9C 4B 2E 4B +R 00 00 00 09 +T 00 01 A1 36 CD 00 00 5B 08 4B 22 4B B2 4B 4F 4B +R 00 00 00 09 02 05 00 01 +T 00 01 AE B9 89 90 89 CD 00 00 5B 08 1F 0B 1E 07 +R 00 00 00 09 02 08 00 05 +T 00 01 BB 89 1E 07 89 1E 0F 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 01 C8 08 4B 3E 4B 87 4B 08 4B 3C 89 90 89 CD +R 00 00 00 09 +T 00 01 D5 00 00 5B 08 1F 0B 1E 07 89 1E 07 89 1E +R 00 00 00 09 02 03 00 05 +T 00 01 E2 0F 89 90 89 CD 00 00 5B 08 4B A4 4B AA +R 00 00 00 09 02 08 00 01 +T 00 01 EF 4B 2A 4B BE 89 90 89 CD 00 00 5B 08 1F +R 00 00 00 09 02 0B 00 05 +T 00 01 FC 0B 1E 07 89 1E 07 89 1E 0F 89 90 89 CD +R 00 00 00 09 +T 00 02 09 00 00 5B 08 89 90 89 1E 07 89 1E 07 89 +R 00 00 00 09 02 03 00 01 +T 00 02 16 CD 00 00 5B 08 89 90 89 1E 07 89 1E 07 +R 00 00 00 09 02 04 00 01 +T 00 02 23 89 CD 00 00 5B 08 1F 03 17 01 +R 00 00 00 09 02 05 00 05 +T 00 02 2D +R 00 00 00 09 +T 00 02 2D 0D 0D 27 0D 16 03 1E 01 58 8C 56 17 0C +R 00 00 00 09 +T 00 02 3A 1F 0A 20 08 +R 00 00 00 09 +T 00 02 3E +R 00 00 00 09 +T 00 02 3E 16 03 17 0C 16 01 17 0A +R 00 00 00 09 +T 00 02 46 +R 00 00 00 09 +T 00 02 46 1E 0C 16 0A +R 00 00 00 09 +T 00 02 4A +R 00 00 00 09 +T 00 02 4A 5B 0D 81 +R 00 00 00 09 diff --git a/device/lib/stm8/sincosf.sym b/device/lib/stm8/sincosf.sym new file mode 100644 index 0000000..afcd3f6 --- /dev/null +++ b/device/lib/stm8/sincosf.sym @@ -0,0 +1,37 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fs2sint ****** GX + ___fsadd ****** GX + ___fslt ****** GX + ___fsmul ****** GX + ___fssub ****** GX + ___sint2fs ****** GX + _errno ****** GX + _fabsf ****** GX + 9 _sincosf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 24D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/sincoshf.asm b/device/lib/stm8/sincoshf.asm new file mode 100644 index 0000000..105d6ec --- /dev/null +++ b/device/lib/stm8/sincoshf.asm @@ -0,0 +1,367 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module sincoshf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _sincoshf + .globl _expf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../sincoshf.c: 56: float sincoshf(float x, bool iscosh) +; ----------------------------------------- +; function sincoshf +; ----------------------------------------- +_sincoshf: + sub sp, #10 +; ../sincoshf.c: 62: else { y=x; sign=0; } + ldw y, (0x0f, sp) + ldw (0x03, sp), y + ldw y, (0x0d, sp) + ldw (0x01, sp), y +; ../sincoshf.c: 61: if (x<0.0) { y=-x; sign=1; } + clrw x + pushw x + clrw x + pushw x + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fslt + addw sp, #8 + ld (0x0a, sp), a + jreq 00102$ + ldw y, (0x0f, sp) + ldw x, (0x0d, sp) + sllw x + ccf + rrcw x + ldw (0x07, sp), y + ldw (0x05, sp), x + ld a, #0x01 + ld (0x09, sp), a + jra 00103$ +00102$: +; ../sincoshf.c: 62: else { y=x; sign=0; } + ldw y, (0x03, sp) + ldw (0x07, sp), y + ldw y, (0x01, sp) + ldw (0x05, sp), y + clr (0x09, sp) +00103$: +; ../sincoshf.c: 64: if ((y>1.0) || iscosh) + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + clrw x + pushw x + push #0x80 + push #0x3f + call ___fslt + addw sp, #8 + ld (0x0a, sp), a + jrne 00117$ + tnz (0x11, sp) + jrne 00160$ + jp 00118$ +00160$: +00117$: +; ../sincoshf.c: 66: if(y>YBAR) + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + clrw x + pushw x + push #0x10 + push #0x41 + call ___fslt + addw sp, #8 + ld (0x0a, sp), a + jreq 00110$ +; ../sincoshf.c: 68: w=y-K1; + push #0x00 + push #0x73 + push #0x31 + push #0x3f + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call ___fssub + addw sp, #8 +; ../sincoshf.c: 69: if (w>WMAX) + pushw x + pushw y + pushw x + pushw y + push #0xcf + push #0xbd + push #0x33 + push #0x42 + call ___fslt + addw sp, #8 + popw y + popw x + tnz a + jreq 00105$ +; ../sincoshf.c: 71: errno=ERANGE; + ldw x, #0x0022 + ldw _errno+0, x +; ../sincoshf.c: 72: z=HUGE_VALF; + ldw x, #0xffff + ldw (0x07, sp), x + ldw x, #0x7f7f + ldw (0x05, sp), x + jp 00111$ +00105$: +; ../sincoshf.c: 76: z=expf(w); + pushw x + pushw y + call _expf + addw sp, #4 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../sincoshf.c: 77: z+=K3*z; + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + push #0x97 + push #0x08 + push #0x68 + push #0x37 + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x07, sp), x + ldw (0x05, sp), y + jra 00111$ +00110$: +; ../sincoshf.c: 82: z=expf(y); + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call _expf + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../sincoshf.c: 83: w=1.0/z; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + clrw x + pushw x + push #0x80 + push #0x3f + call ___fsdiv + addw sp, #8 + exgw x, y + ldw (0x07, sp), y +; ../sincoshf.c: 84: if(!iscosh) w=-w; + tnz (0x11, sp) + jrne 00108$ + ldw y, (0x07, sp) + sllw x + ccf + rrcw x + ldw (0x07, sp), y +00108$: +; ../sincoshf.c: 85: z=(z+w)*0.5; + ldw y, (0x07, sp) + pushw y + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsadd + addw sp, #8 + pushw x + pushw y + clrw x + pushw x + push #0x00 + push #0x3f + call ___fsmul + addw sp, #8 + ldw (0x07, sp), x + ldw (0x05, sp), y +00111$: +; ../sincoshf.c: 87: if(sign) z=-z; + tnz (0x09, sp) + jrne 00164$ + jp 00119$ +00164$: + ldw y, (0x07, sp) + ldw x, (0x05, sp) + sllw x + ccf + rrcw x + ldw (0x07, sp), y + ldw (0x05, sp), x + jp 00119$ +00118$: +; ../sincoshf.c: 91: if (y<EPS) + clrw x + pushw x + push #0x80 + push #0x39 + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00115$ +; ../sincoshf.c: 92: z=x; + ldw y, (0x03, sp) + ldw (0x07, sp), y + ldw y, (0x01, sp) + ldw (0x05, sp), y + jp 00119$ +00115$: +; ../sincoshf.c: 95: z=x*x; + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../sincoshf.c: 96: z=x+x*z*P(z)/Q(z); + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + push #0xea + push #0xe6 + push #0x42 + push #0xbe + call ___fsmul + addw sp, #8 + push #0xf0 + push #0x69 + push #0xe4 + push #0xc0 + pushw x + pushw y + call ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y + push #0x93 + push #0x4f + push #0x2b + push #0xc2 + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x07, sp), x + ldw (0x05, sp), y +00119$: +; ../sincoshf.c: 99: return z; + ldw x, (0x07, sp) + ldw y, (0x05, sp) +; ../sincoshf.c: 100: } + addw sp, #10 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/sincoshf.lst b/device/lib/stm8/sincoshf.lst new file mode 100644 index 0000000..4834d37 --- /dev/null +++ b/device/lib/stm8/sincoshf.lst @@ -0,0 +1,367 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module sincoshf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _sincoshf + 12 .globl _expf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../sincoshf.c: 56: float sincoshf(float x, bool iscosh) + 51 ; ----------------------------------------- + 52 ; function sincoshf + 53 ; ----------------------------------------- + 000000 54 _sincoshf: + 000000 52 0A [ 2] 55 sub sp, #10 + 56 ; ../sincoshf.c: 62: else { y=x; sign=0; } + 000002 16 0F [ 2] 57 ldw y, (0x0f, sp) + 000004 17 03 [ 2] 58 ldw (0x03, sp), y + 000006 16 0D [ 2] 59 ldw y, (0x0d, sp) + 000008 17 01 [ 2] 60 ldw (0x01, sp), y + 61 ; ../sincoshf.c: 61: if (x<0.0) { y=-x; sign=1; } + 00000A 5F [ 1] 62 clrw x + 00000B 89 [ 2] 63 pushw x + 00000C 5F [ 1] 64 clrw x + 00000D 89 [ 2] 65 pushw x + 00000E 1E 13 [ 2] 66 ldw x, (0x13, sp) + 000010 89 [ 2] 67 pushw x + 000011 1E 13 [ 2] 68 ldw x, (0x13, sp) + 000013 89 [ 2] 69 pushw x + 000014 CDr00r00 [ 4] 70 call ___fslt + 000017 5B 08 [ 2] 71 addw sp, #8 + 000019 6B 0A [ 1] 72 ld (0x0a, sp), a + 00001B 27 11 [ 1] 73 jreq 00102$ + 00001D 16 0F [ 2] 74 ldw y, (0x0f, sp) + 00001F 1E 0D [ 2] 75 ldw x, (0x0d, sp) + 000021 58 [ 2] 76 sllw x + 000022 8C [ 1] 77 ccf + 000023 56 [ 2] 78 rrcw x + 000024 17 07 [ 2] 79 ldw (0x07, sp), y + 000026 1F 05 [ 2] 80 ldw (0x05, sp), x + 000028 A6 01 [ 1] 81 ld a, #0x01 + 00002A 6B 09 [ 1] 82 ld (0x09, sp), a + 00002C 20 0A [ 2] 83 jra 00103$ + 00002E 84 00102$: + 85 ; ../sincoshf.c: 62: else { y=x; sign=0; } + 00002E 16 03 [ 2] 86 ldw y, (0x03, sp) + 000030 17 07 [ 2] 87 ldw (0x07, sp), y + 000032 16 01 [ 2] 88 ldw y, (0x01, sp) + 000034 17 05 [ 2] 89 ldw (0x05, sp), y + 000036 0F 09 [ 1] 90 clr (0x09, sp) + 000038 91 00103$: + 92 ; ../sincoshf.c: 64: if ((y>1.0) || iscosh) + 000038 1E 07 [ 2] 93 ldw x, (0x07, sp) + 00003A 89 [ 2] 94 pushw x + 00003B 1E 07 [ 2] 95 ldw x, (0x07, sp) + 00003D 89 [ 2] 96 pushw x + 00003E 5F [ 1] 97 clrw x + 00003F 89 [ 2] 98 pushw x + 000040 4B 80 [ 1] 99 push #0x80 + 000042 4B 3F [ 1] 100 push #0x3f + 000044 CDr00r00 [ 4] 101 call ___fslt + 000047 5B 08 [ 2] 102 addw sp, #8 + 000049 6B 0A [ 1] 103 ld (0x0a, sp), a + 00004B 26 07 [ 1] 104 jrne 00117$ + 00004D 0D 11 [ 1] 105 tnz (0x11, sp) + 00004F 26 03 [ 1] 106 jrne 00160$ + 000051 CCr01r40 [ 2] 107 jp 00118$ + 000054 108 00160$: + 000054 109 00117$: + 110 ; ../sincoshf.c: 66: if(y>YBAR) + 000054 1E 07 [ 2] 111 ldw x, (0x07, sp) + 000056 89 [ 2] 112 pushw x + 000057 1E 07 [ 2] 113 ldw x, (0x07, sp) + 000059 89 [ 2] 114 pushw x + 00005A 5F [ 1] 115 clrw x + 00005B 89 [ 2] 116 pushw x + 00005C 4B 10 [ 1] 117 push #0x10 + 00005E 4B 41 [ 1] 118 push #0x41 + 000060 CDr00r00 [ 4] 119 call ___fslt + 000063 5B 08 [ 2] 120 addw sp, #8 + 000065 6B 0A [ 1] 121 ld (0x0a, sp), a + 000067 27 72 [ 1] 122 jreq 00110$ + 123 ; ../sincoshf.c: 68: w=y-K1; + 000069 4B 00 [ 1] 124 push #0x00 + 00006B 4B 73 [ 1] 125 push #0x73 + 00006D 4B 31 [ 1] 126 push #0x31 + 00006F 4B 3F [ 1] 127 push #0x3f + 000071 1E 0B [ 2] 128 ldw x, (0x0b, sp) + 000073 89 [ 2] 129 pushw x + 000074 1E 0B [ 2] 130 ldw x, (0x0b, sp) + 000076 89 [ 2] 131 pushw x + 000077 CDr00r00 [ 4] 132 call ___fssub + 00007A 5B 08 [ 2] 133 addw sp, #8 + 134 ; ../sincoshf.c: 69: if (w>WMAX) + 00007C 89 [ 2] 135 pushw x + 00007D 90 89 [ 2] 136 pushw y + 00007F 89 [ 2] 137 pushw x + 000080 90 89 [ 2] 138 pushw y + 000082 4B CF [ 1] 139 push #0xcf + 000084 4B BD [ 1] 140 push #0xbd + 000086 4B 33 [ 1] 141 push #0x33 + 000088 4B 42 [ 1] 142 push #0x42 + 00008A CDr00r00 [ 4] 143 call ___fslt + 00008D 5B 08 [ 2] 144 addw sp, #8 + 00008F 90 85 [ 2] 145 popw y + 000091 85 [ 2] 146 popw x + 000092 4D [ 1] 147 tnz a + 000093 27 13 [ 1] 148 jreq 00105$ + 149 ; ../sincoshf.c: 71: errno=ERANGE; + 000095 AE 00 22 [ 2] 150 ldw x, #0x0022 + 000098 CFu00u00 [ 2] 151 ldw _errno+0, x + 152 ; ../sincoshf.c: 72: z=HUGE_VALF; + 00009B AE FF FF [ 2] 153 ldw x, #0xffff + 00009E 1F 07 [ 2] 154 ldw (0x07, sp), x + 0000A0 AE 7F 7F [ 2] 155 ldw x, #0x7f7f + 0000A3 1F 05 [ 2] 156 ldw (0x05, sp), x + 0000A5 CCr01r2B [ 2] 157 jp 00111$ + 0000A8 158 00105$: + 159 ; ../sincoshf.c: 76: z=expf(w); + 0000A8 89 [ 2] 160 pushw x + 0000A9 90 89 [ 2] 161 pushw y + 0000AB CDr00r00 [ 4] 162 call _expf + 0000AE 5B 04 [ 2] 163 addw sp, #4 + 0000B0 1F 07 [ 2] 164 ldw (0x07, sp), x + 0000B2 17 05 [ 2] 165 ldw (0x05, sp), y + 166 ; ../sincoshf.c: 77: z+=K3*z; + 0000B4 1E 07 [ 2] 167 ldw x, (0x07, sp) + 0000B6 89 [ 2] 168 pushw x + 0000B7 1E 07 [ 2] 169 ldw x, (0x07, sp) + 0000B9 89 [ 2] 170 pushw x + 0000BA 4B 97 [ 1] 171 push #0x97 + 0000BC 4B 08 [ 1] 172 push #0x08 + 0000BE 4B 68 [ 1] 173 push #0x68 + 0000C0 4B 37 [ 1] 174 push #0x37 + 0000C2 CDr00r00 [ 4] 175 call ___fsmul + 0000C5 5B 08 [ 2] 176 addw sp, #8 + 0000C7 89 [ 2] 177 pushw x + 0000C8 90 89 [ 2] 178 pushw y + 0000CA 1E 0B [ 2] 179 ldw x, (0x0b, sp) + 0000CC 89 [ 2] 180 pushw x + 0000CD 1E 0B [ 2] 181 ldw x, (0x0b, sp) + 0000CF 89 [ 2] 182 pushw x + 0000D0 CDr00r00 [ 4] 183 call ___fsadd + 0000D3 5B 08 [ 2] 184 addw sp, #8 + 0000D5 1F 07 [ 2] 185 ldw (0x07, sp), x + 0000D7 17 05 [ 2] 186 ldw (0x05, sp), y + 0000D9 20 50 [ 2] 187 jra 00111$ + 0000DB 188 00110$: + 189 ; ../sincoshf.c: 82: z=expf(y); + 0000DB 1E 07 [ 2] 190 ldw x, (0x07, sp) + 0000DD 89 [ 2] 191 pushw x + 0000DE 1E 07 [ 2] 192 ldw x, (0x07, sp) + 0000E0 89 [ 2] 193 pushw x + 0000E1 CDr00r00 [ 4] 194 call _expf + 0000E4 5B 04 [ 2] 195 addw sp, #4 + 0000E6 1F 03 [ 2] 196 ldw (0x03, sp), x + 0000E8 17 01 [ 2] 197 ldw (0x01, sp), y + 198 ; ../sincoshf.c: 83: w=1.0/z; + 0000EA 1E 03 [ 2] 199 ldw x, (0x03, sp) + 0000EC 89 [ 2] 200 pushw x + 0000ED 1E 03 [ 2] 201 ldw x, (0x03, sp) + 0000EF 89 [ 2] 202 pushw x + 0000F0 5F [ 1] 203 clrw x + 0000F1 89 [ 2] 204 pushw x + 0000F2 4B 80 [ 1] 205 push #0x80 + 0000F4 4B 3F [ 1] 206 push #0x3f + 0000F6 CDr00r00 [ 4] 207 call ___fsdiv + 0000F9 5B 08 [ 2] 208 addw sp, #8 + 0000FB 51 [ 1] 209 exgw x, y + 0000FC 17 07 [ 2] 210 ldw (0x07, sp), y + 211 ; ../sincoshf.c: 84: if(!iscosh) w=-w; + 0000FE 0D 11 [ 1] 212 tnz (0x11, sp) + 000100 26 07 [ 1] 213 jrne 00108$ + 000102 16 07 [ 2] 214 ldw y, (0x07, sp) + 000104 58 [ 2] 215 sllw x + 000105 8C [ 1] 216 ccf + 000106 56 [ 2] 217 rrcw x + 000107 17 07 [ 2] 218 ldw (0x07, sp), y + 000109 219 00108$: + 220 ; ../sincoshf.c: 85: z=(z+w)*0.5; + 000109 16 07 [ 2] 221 ldw y, (0x07, sp) + 00010B 90 89 [ 2] 222 pushw y + 00010D 89 [ 2] 223 pushw x + 00010E 1E 07 [ 2] 224 ldw x, (0x07, sp) + 000110 89 [ 2] 225 pushw x + 000111 1E 07 [ 2] 226 ldw x, (0x07, sp) + 000113 89 [ 2] 227 pushw x + 000114 CDr00r00 [ 4] 228 call ___fsadd + 000117 5B 08 [ 2] 229 addw sp, #8 + 000119 89 [ 2] 230 pushw x + 00011A 90 89 [ 2] 231 pushw y + 00011C 5F [ 1] 232 clrw x + 00011D 89 [ 2] 233 pushw x + 00011E 4B 00 [ 1] 234 push #0x00 + 000120 4B 3F [ 1] 235 push #0x3f + 000122 CDr00r00 [ 4] 236 call ___fsmul + 000125 5B 08 [ 2] 237 addw sp, #8 + 000127 1F 07 [ 2] 238 ldw (0x07, sp), x + 000129 17 05 [ 2] 239 ldw (0x05, sp), y + 00012B 240 00111$: + 241 ; ../sincoshf.c: 87: if(sign) z=-z; + 00012B 0D 09 [ 1] 242 tnz (0x09, sp) + 00012D 26 03 [ 1] 243 jrne 00164$ + 00012F CCr01rF1 [ 2] 244 jp 00119$ + 000132 245 00164$: + 000132 16 07 [ 2] 246 ldw y, (0x07, sp) + 000134 1E 05 [ 2] 247 ldw x, (0x05, sp) + 000136 58 [ 2] 248 sllw x + 000137 8C [ 1] 249 ccf + 000138 56 [ 2] 250 rrcw x + 000139 17 07 [ 2] 251 ldw (0x07, sp), y + 00013B 1F 05 [ 2] 252 ldw (0x05, sp), x + 00013D CCr01rF1 [ 2] 253 jp 00119$ + 000140 254 00118$: + 255 ; ../sincoshf.c: 91: if (y<EPS) + 000140 5F [ 1] 256 clrw x + 000141 89 [ 2] 257 pushw x + 000142 4B 80 [ 1] 258 push #0x80 + 000144 4B 39 [ 1] 259 push #0x39 + 000146 1E 0B [ 2] 260 ldw x, (0x0b, sp) + 000148 89 [ 2] 261 pushw x + 000149 1E 0B [ 2] 262 ldw x, (0x0b, sp) + 00014B 89 [ 2] 263 pushw x + 00014C CDr00r00 [ 4] 264 call ___fslt + 00014F 5B 08 [ 2] 265 addw sp, #8 + 000151 4D [ 1] 266 tnz a + 000152 27 0B [ 1] 267 jreq 00115$ + 268 ; ../sincoshf.c: 92: z=x; + 000154 16 03 [ 2] 269 ldw y, (0x03, sp) + 000156 17 07 [ 2] 270 ldw (0x07, sp), y + 000158 16 01 [ 2] 271 ldw y, (0x01, sp) + 00015A 17 05 [ 2] 272 ldw (0x05, sp), y + 00015C CCr01rF1 [ 2] 273 jp 00119$ + 00015F 274 00115$: + 275 ; ../sincoshf.c: 95: z=x*x; + 00015F 1E 0F [ 2] 276 ldw x, (0x0f, sp) + 000161 89 [ 2] 277 pushw x + 000162 1E 0F [ 2] 278 ldw x, (0x0f, sp) + 000164 89 [ 2] 279 pushw x + 000165 1E 13 [ 2] 280 ldw x, (0x13, sp) + 000167 89 [ 2] 281 pushw x + 000168 1E 13 [ 2] 282 ldw x, (0x13, sp) + 00016A 89 [ 2] 283 pushw x + 00016B CDr00r00 [ 4] 284 call ___fsmul + 00016E 5B 08 [ 2] 285 addw sp, #8 + 000170 1F 05 [ 2] 286 ldw (0x05, sp), x + 000172 17 03 [ 2] 287 ldw (0x03, sp), y + 288 ; ../sincoshf.c: 96: z=x+x*z*P(z)/Q(z); + 000174 1E 05 [ 2] 289 ldw x, (0x05, sp) + 000176 89 [ 2] 290 pushw x + 000177 1E 05 [ 2] 291 ldw x, (0x05, sp) + 000179 89 [ 2] 292 pushw x + 00017A 1E 13 [ 2] 293 ldw x, (0x13, sp) + 00017C 89 [ 2] 294 pushw x + 00017D 1E 13 [ 2] 295 ldw x, (0x13, sp) + 00017F 89 [ 2] 296 pushw x + 000180 CDr00r00 [ 4] 297 call ___fsmul + 000183 5B 08 [ 2] 298 addw sp, #8 + 000185 1F 09 [ 2] 299 ldw (0x09, sp), x + 000187 17 07 [ 2] 300 ldw (0x07, sp), y + 000189 1E 05 [ 2] 301 ldw x, (0x05, sp) + 00018B 89 [ 2] 302 pushw x + 00018C 1E 05 [ 2] 303 ldw x, (0x05, sp) + 00018E 89 [ 2] 304 pushw x + 00018F 4B EA [ 1] 305 push #0xea + 000191 4B E6 [ 1] 306 push #0xe6 + 000193 4B 42 [ 1] 307 push #0x42 + 000195 4B BE [ 1] 308 push #0xbe + 000197 CDr00r00 [ 4] 309 call ___fsmul + 00019A 5B 08 [ 2] 310 addw sp, #8 + 00019C 4B F0 [ 1] 311 push #0xf0 + 00019E 4B 69 [ 1] 312 push #0x69 + 0001A0 4B E4 [ 1] 313 push #0xe4 + 0001A2 4B C0 [ 1] 314 push #0xc0 + 0001A4 89 [ 2] 315 pushw x + 0001A5 90 89 [ 2] 316 pushw y + 0001A7 CDr00r00 [ 4] 317 call ___fsadd + 0001AA 5B 08 [ 2] 318 addw sp, #8 + 0001AC 89 [ 2] 319 pushw x + 0001AD 90 89 [ 2] 320 pushw y + 0001AF 1E 0D [ 2] 321 ldw x, (0x0d, sp) + 0001B1 89 [ 2] 322 pushw x + 0001B2 1E 0D [ 2] 323 ldw x, (0x0d, sp) + 0001B4 89 [ 2] 324 pushw x + 0001B5 CDr00r00 [ 4] 325 call ___fsmul + 0001B8 5B 08 [ 2] 326 addw sp, #8 + 0001BA 1F 09 [ 2] 327 ldw (0x09, sp), x + 0001BC 17 07 [ 2] 328 ldw (0x07, sp), y + 0001BE 4B 93 [ 1] 329 push #0x93 + 0001C0 4B 4F [ 1] 330 push #0x4f + 0001C2 4B 2B [ 1] 331 push #0x2b + 0001C4 4B C2 [ 1] 332 push #0xc2 + 0001C6 1E 09 [ 2] 333 ldw x, (0x09, sp) + 0001C8 89 [ 2] 334 pushw x + 0001C9 1E 09 [ 2] 335 ldw x, (0x09, sp) + 0001CB 89 [ 2] 336 pushw x + 0001CC CDr00r00 [ 4] 337 call ___fsadd + 0001CF 5B 08 [ 2] 338 addw sp, #8 + 0001D1 89 [ 2] 339 pushw x + 0001D2 90 89 [ 2] 340 pushw y + 0001D4 1E 0D [ 2] 341 ldw x, (0x0d, sp) + 0001D6 89 [ 2] 342 pushw x + 0001D7 1E 0D [ 2] 343 ldw x, (0x0d, sp) + 0001D9 89 [ 2] 344 pushw x + 0001DA CDr00r00 [ 4] 345 call ___fsdiv + 0001DD 5B 08 [ 2] 346 addw sp, #8 + 0001DF 89 [ 2] 347 pushw x + 0001E0 90 89 [ 2] 348 pushw y + 0001E2 1E 13 [ 2] 349 ldw x, (0x13, sp) + 0001E4 89 [ 2] 350 pushw x + 0001E5 1E 13 [ 2] 351 ldw x, (0x13, sp) + 0001E7 89 [ 2] 352 pushw x + 0001E8 CDr00r00 [ 4] 353 call ___fsadd + 0001EB 5B 08 [ 2] 354 addw sp, #8 + 0001ED 1F 07 [ 2] 355 ldw (0x07, sp), x + 0001EF 17 05 [ 2] 356 ldw (0x05, sp), y + 0001F1 357 00119$: + 358 ; ../sincoshf.c: 99: return z; + 0001F1 1E 07 [ 2] 359 ldw x, (0x07, sp) + 0001F3 16 05 [ 2] 360 ldw y, (0x05, sp) + 361 ; ../sincoshf.c: 100: } + 0001F5 5B 0A [ 2] 362 addw sp, #10 + 0001F7 81 [ 4] 363 ret + 364 .area CODE + 365 .area CONST + 366 .area INITIALIZER + 367 .area CABS (ABS) diff --git a/device/lib/stm8/sincoshf.rel b/device/lib/stm8/sincoshf.rel new file mode 100644 index 0000000..dd911c5 --- /dev/null +++ b/device/lib/stm8/sincoshf.rel @@ -0,0 +1,140 @@ +XH3 +H B areas 9 global symbols +M sincoshf +O -mstm8 +S ___fssub Ref000000 +S ___fsmul Ref000000 +S _errno Ref000000 +S _expf Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S ___fsdiv Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1F8 flags 0 addr 0 +S _sincoshf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 16 0F 17 03 16 0D 17 01 5F 89 5F +R 00 00 00 09 +T 00 00 0D 89 1E 13 89 1E 13 89 CD 00 00 5B 08 6B +R 00 00 00 09 02 0B 00 04 +T 00 00 1A 0A 27 11 16 0F 1E 0D 58 8C 56 17 07 1F +R 00 00 00 09 +T 00 00 27 05 A6 01 6B 09 20 0A +R 00 00 00 09 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E 16 03 17 07 16 01 17 05 0F 09 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1E 07 89 1E 07 89 5F 89 4B 80 4B 3F CD +R 00 00 00 09 +T 00 00 45 00 00 5B 08 6B 0A 26 07 0D 11 26 03 CC +R 00 00 00 09 02 03 00 04 +T 00 00 52 01 40 +R 00 00 00 09 00 03 00 09 +T 00 00 54 +R 00 00 00 09 +T 00 00 54 +R 00 00 00 09 +T 00 00 54 1E 07 89 1E 07 89 5F 89 4B 10 4B 41 CD +R 00 00 00 09 +T 00 00 61 00 00 5B 08 6B 0A 27 72 4B 00 4B 73 4B +R 00 00 00 09 02 03 00 04 +T 00 00 6E 31 4B 3F 1E 0B 89 1E 0B 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 00 +T 00 00 7B 08 89 90 89 89 90 89 4B CF 4B BD 4B 33 +R 00 00 00 09 +T 00 00 88 4B 42 CD 00 00 5B 08 90 85 85 4D 27 13 +R 00 00 00 09 02 06 00 04 +T 00 00 95 AE 00 22 CF 00 00 AE FF FF 1F 07 AE +R 00 00 00 09 12 07 00 02 +T 00 00 A1 7F 7F 1F 05 CC 01 2B +R 00 00 00 09 00 08 00 09 +T 00 00 A8 +R 00 00 00 09 +T 00 00 A8 89 90 89 CD 00 00 5B 04 1F 07 17 05 1E +R 00 00 00 09 02 07 00 03 +T 00 00 B5 07 89 1E 07 89 4B 97 4B 08 4B 68 4B 37 +R 00 00 00 09 +T 00 00 C2 CD 00 00 5B 08 89 90 89 1E 0B 89 1E 0B +R 00 00 00 09 02 04 00 01 +T 00 00 CF 89 CD 00 00 5B 08 1F 07 17 05 20 50 +R 00 00 00 09 02 05 00 06 +T 00 00 DB +R 00 00 00 09 +T 00 00 DB 1E 07 89 1E 07 89 CD 00 00 5B 04 1F 03 +R 00 00 00 09 02 0A 00 03 +T 00 00 E8 17 01 1E 03 89 1E 03 89 5F 89 4B 80 4B +R 00 00 00 09 +T 00 00 F5 3F CD 00 00 5B 08 51 17 07 0D 11 26 07 +R 00 00 00 09 02 05 00 07 +T 00 01 02 16 07 58 8C 56 17 07 +R 00 00 00 09 +T 00 01 09 +R 00 00 00 09 +T 00 01 09 16 07 90 89 89 1E 07 89 1E 07 89 CD +R 00 00 00 09 +T 00 01 15 00 00 5B 08 89 90 89 5F 89 4B 00 4B 3F +R 00 00 00 09 02 03 00 06 +T 00 01 22 CD 00 00 5B 08 1F 07 17 05 +R 00 00 00 09 02 04 00 01 +T 00 01 2B +R 00 00 00 09 +T 00 01 2B 0D 09 26 03 CC 01 F1 +R 00 00 00 09 00 08 00 09 +T 00 01 32 +R 00 00 00 09 +T 00 01 32 16 07 1E 05 58 8C 56 17 07 1F 05 CC +R 00 00 00 09 +T 00 01 3E 01 F1 +R 00 00 00 09 00 03 00 09 +T 00 01 40 +R 00 00 00 09 +T 00 01 40 5F 89 4B 80 4B 39 1E 0B 89 1E 0B 89 CD +R 00 00 00 09 +T 00 01 4D 00 00 5B 08 4D 27 0B 16 03 17 07 16 01 +R 00 00 00 09 02 03 00 04 +T 00 01 5A 17 05 CC 01 F1 +R 00 00 00 09 00 06 00 09 +T 00 01 5F +R 00 00 00 09 +T 00 01 5F 1E 0F 89 1E 0F 89 1E 13 89 1E 13 89 CD +R 00 00 00 09 +T 00 01 6C 00 00 5B 08 1F 05 17 03 1E 05 89 1E 05 +R 00 00 00 09 02 03 00 01 +T 00 01 79 89 1E 13 89 1E 13 89 CD 00 00 5B 08 1F +R 00 00 00 09 02 0B 00 01 +T 00 01 86 09 17 07 1E 05 89 1E 05 89 4B EA 4B E6 +R 00 00 00 09 +T 00 01 93 4B 42 4B BE CD 00 00 5B 08 4B F0 4B 69 +R 00 00 00 09 02 08 00 01 +T 00 01 A0 4B E4 4B C0 89 90 89 CD 00 00 5B 08 89 +R 00 00 00 09 02 0B 00 06 +T 00 01 AD 90 89 1E 0D 89 1E 0D 89 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 01 +T 00 01 BA 1F 09 17 07 4B 93 4B 4F 4B 2B 4B C2 1E +R 00 00 00 09 +T 00 01 C7 09 89 1E 09 89 CD 00 00 5B 08 89 90 89 +R 00 00 00 09 02 09 00 06 +T 00 01 D4 1E 0D 89 1E 0D 89 CD 00 00 5B 08 89 90 +R 00 00 00 09 02 0A 00 07 +T 00 01 E1 89 1E 13 89 1E 13 89 CD 00 00 5B 08 1F +R 00 00 00 09 02 0B 00 06 +T 00 01 EE 07 17 05 +R 00 00 00 09 +T 00 01 F1 +R 00 00 00 09 +T 00 01 F1 1E 07 16 05 5B 0A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/sincoshf.sym b/device/lib/stm8/sincoshf.sym new file mode 100644 index 0000000..984f2c5 --- /dev/null +++ b/device/lib/stm8/sincoshf.sym @@ -0,0 +1,35 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + ___fsdiv ****** GX + ___fslt ****** GX + ___fsmul ****** GX + ___fssub ****** GX + _errno ****** GX + _expf ****** GX + 9 _sincoshf 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1F8 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/sinf.asm b/device/lib/stm8/sinf.asm new file mode 100644 index 0000000..a7969ca --- /dev/null +++ b/device/lib/stm8/sinf.asm @@ -0,0 +1,78 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module sinf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _sincosf + .globl _sinf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../sinf.c: 36: float sinf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function sinf +; ----------------------------------------- +_sinf: +; ../sinf.c: 38: if (x==0.0) return 0.0; + ldw x, (0x05, sp) + jrne 00102$ + ldw x, (0x03, sp) + sllw x + jrne 00102$ + clrw x + clrw y + ret +00102$: +; ../sinf.c: 39: return sincosf(x, 0); + push #0x00 + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call _sincosf + addw sp, #5 +; ../sinf.c: 40: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/sinf.lst b/device/lib/stm8/sinf.lst new file mode 100644 index 0000000..1cc8fe0 --- /dev/null +++ b/device/lib/stm8/sinf.lst @@ -0,0 +1,78 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module sinf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _sincosf + 12 .globl _sinf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../sinf.c: 36: float sinf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function sinf + 53 ; ----------------------------------------- + 000000 54 _sinf: + 55 ; ../sinf.c: 38: if (x==0.0) return 0.0; + 000000 1E 05 [ 2] 56 ldw x, (0x05, sp) + 000002 26 09 [ 1] 57 jrne 00102$ + 000004 1E 03 [ 2] 58 ldw x, (0x03, sp) + 000006 58 [ 2] 59 sllw x + 000007 26 04 [ 1] 60 jrne 00102$ + 000009 5F [ 1] 61 clrw x + 00000A 90 5F [ 1] 62 clrw y + 00000C 81 [ 4] 63 ret + 00000D 64 00102$: + 65 ; ../sinf.c: 39: return sincosf(x, 0); + 00000D 4B 00 [ 1] 66 push #0x00 + 00000F 1E 06 [ 2] 67 ldw x, (0x06, sp) + 000011 89 [ 2] 68 pushw x + 000012 1E 06 [ 2] 69 ldw x, (0x06, sp) + 000014 89 [ 2] 70 pushw x + 000015 CDr00r00 [ 4] 71 call _sincosf + 000018 5B 05 [ 2] 72 addw sp, #5 + 73 ; ../sinf.c: 40: } + 00001A 81 [ 4] 74 ret + 75 .area CODE + 76 .area CONST + 77 .area INITIALIZER + 78 .area CABS (ABS) diff --git a/device/lib/stm8/sinf.rel b/device/lib/stm8/sinf.rel new file mode 100644 index 0000000..77d1a93 --- /dev/null +++ b/device/lib/stm8/sinf.rel @@ -0,0 +1,28 @@ +XH3 +H B areas 3 global symbols +M sinf +O -mstm8 +S _sincosf Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1B flags 0 addr 0 +S _sinf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 05 26 09 1E 03 58 26 04 5F 90 5F 81 +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 4B 00 1E 06 89 1E 06 89 CD 00 00 5B 05 +R 00 00 00 09 02 0C 00 00 +T 00 00 1A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/sinf.sym b/device/lib/stm8/sinf.sym new file mode 100644 index 0000000..ccaa2e4 --- /dev/null +++ b/device/lib/stm8/sinf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _sincosf ****** GX + 9 _sinf 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/sinhf.asm b/device/lib/stm8/sinhf.asm new file mode 100644 index 0000000..e1f6c1f --- /dev/null +++ b/device/lib/stm8/sinhf.asm @@ -0,0 +1,68 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module sinhf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _sincoshf + .globl _sinhf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../sinhf.c: 36: float sinhf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function sinhf +; ----------------------------------------- +_sinhf: +; ../sinhf.c: 38: return sincoshf(x, 0); + push #0x00 + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call _sincoshf + addw sp, #5 +; ../sinhf.c: 39: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/sinhf.lst b/device/lib/stm8/sinhf.lst new file mode 100644 index 0000000..6811109 --- /dev/null +++ b/device/lib/stm8/sinhf.lst @@ -0,0 +1,68 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module sinhf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _sincoshf + 12 .globl _sinhf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../sinhf.c: 36: float sinhf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function sinhf + 53 ; ----------------------------------------- + 000000 54 _sinhf: + 55 ; ../sinhf.c: 38: return sincoshf(x, 0); + 000000 4B 00 [ 1] 56 push #0x00 + 000002 1E 06 [ 2] 57 ldw x, (0x06, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 06 [ 2] 59 ldw x, (0x06, sp) + 000007 89 [ 2] 60 pushw x + 000008 CDr00r00 [ 4] 61 call _sincoshf + 00000B 5B 05 [ 2] 62 addw sp, #5 + 63 ; ../sinhf.c: 39: } + 00000D 81 [ 4] 64 ret + 65 .area CODE + 66 .area CONST + 67 .area INITIALIZER + 68 .area CABS (ABS) diff --git a/device/lib/stm8/sinhf.rel b/device/lib/stm8/sinhf.rel new file mode 100644 index 0000000..239047d --- /dev/null +++ b/device/lib/stm8/sinhf.rel @@ -0,0 +1,24 @@ +XH3 +H B areas 3 global symbols +M sinhf +O -mstm8 +S .__.ABS. Def000000 +S _sincoshf Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size E flags 0 addr 0 +S _sinhf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 4B 00 1E 06 89 1E 06 89 CD 00 00 5B 05 +R 00 00 00 09 02 0C 00 01 +T 00 00 0D 81 +R 00 00 00 09 diff --git a/device/lib/stm8/sinhf.sym b/device/lib/stm8/sinhf.sym new file mode 100644 index 0000000..583ccfb --- /dev/null +++ b/device/lib/stm8/sinhf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _sincoshf ****** GX + 9 _sinhf 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/sprintf.asm b/device/lib/stm8/sprintf.asm new file mode 100644 index 0000000..d474cc5 --- /dev/null +++ b/device/lib/stm8/sprintf.asm @@ -0,0 +1,125 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module sprintf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __print_format + .globl _vsprintf + .globl _sprintf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../sprintf.c: 34: put_char_to_string (char c, void* p) _REENTRANT +; ----------------------------------------- +; function put_char_to_string +; ----------------------------------------- +_put_char_to_string: + sub sp, #2 +; ../sprintf.c: 36: char **buf = (char **)p; + ldw y, (0x06, sp) +; ../sprintf.c: 37: *(*buf)++ = c; + ldw x, y + ldw x, (x) + ldw (0x01, sp), x + incw x + ldw (y), x + ldw x, (0x01, sp) + ld a, (0x05, sp) + ld (x), a +; ../sprintf.c: 38: } + addw sp, #2 + ret +; ../sprintf.c: 41: vsprintf (char *buf, const char *format, va_list ap) +; ----------------------------------------- +; function vsprintf +; ----------------------------------------- +_vsprintf: +; ../sprintf.c: 44: i = _print_format (put_char_to_string, &buf, format, ap); + ldw x, sp + addw x, #3 + ldw y, (0x07, sp) + pushw y + ldw y, (0x07, sp) + pushw y + pushw x + push #<(_put_char_to_string + 0) + push #((_put_char_to_string + 0) >> 8) + call __print_format + addw sp, #8 +; ../sprintf.c: 45: *buf = 0; + ldw y, (0x03, sp) + clr (y) +; ../sprintf.c: 46: return i; +; ../sprintf.c: 47: } + ret +; ../sprintf.c: 50: sprintf (char *buf, const char *format, ...) +; ----------------------------------------- +; function sprintf +; ----------------------------------------- +_sprintf: +; ../sprintf.c: 55: va_start (arg, format); + ldw x, sp + addw x, #5 + incw x + incw x + exgw x, y +; ../sprintf.c: 56: i = _print_format (put_char_to_string, &buf, format, arg); + ldw x, sp + addw x, #3 + pushw y + ldw y, (0x07, sp) + pushw y + pushw x + push #<(_put_char_to_string + 0) + push #((_put_char_to_string + 0) >> 8) + call __print_format + addw sp, #8 +; ../sprintf.c: 57: *buf = 0; + ldw y, (0x03, sp) + clr (y) +; ../sprintf.c: 60: return i; +; ../sprintf.c: 61: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/sprintf.lst b/device/lib/stm8/sprintf.lst new file mode 100644 index 0000000..f6916eb --- /dev/null +++ b/device/lib/stm8/sprintf.lst @@ -0,0 +1,125 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module sprintf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __print_format + 12 .globl _vsprintf + 13 .globl _sprintf + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../sprintf.c: 34: put_char_to_string (char c, void* p) _REENTRANT + 52 ; ----------------------------------------- + 53 ; function put_char_to_string + 54 ; ----------------------------------------- + 000000 55 _put_char_to_string: + 000000 52 02 [ 2] 56 sub sp, #2 + 57 ; ../sprintf.c: 36: char **buf = (char **)p; + 000002 16 06 [ 2] 58 ldw y, (0x06, sp) + 59 ; ../sprintf.c: 37: *(*buf)++ = c; + 000004 93 [ 1] 60 ldw x, y + 000005 FE [ 2] 61 ldw x, (x) + 000006 1F 01 [ 2] 62 ldw (0x01, sp), x + 000008 5C [ 1] 63 incw x + 000009 90 FF [ 2] 64 ldw (y), x + 00000B 1E 01 [ 2] 65 ldw x, (0x01, sp) + 00000D 7B 05 [ 1] 66 ld a, (0x05, sp) + 00000F F7 [ 1] 67 ld (x), a + 68 ; ../sprintf.c: 38: } + 000010 5B 02 [ 2] 69 addw sp, #2 + 000012 81 [ 4] 70 ret + 71 ; ../sprintf.c: 41: vsprintf (char *buf, const char *format, va_list ap) + 72 ; ----------------------------------------- + 73 ; function vsprintf + 74 ; ----------------------------------------- + 000013 75 _vsprintf: + 76 ; ../sprintf.c: 44: i = _print_format (put_char_to_string, &buf, format, ap); + 000013 96 [ 1] 77 ldw x, sp + 000014 1C 00 03 [ 2] 78 addw x, #3 + 000017 16 07 [ 2] 79 ldw y, (0x07, sp) + 000019 90 89 [ 2] 80 pushw y + 00001B 16 07 [ 2] 81 ldw y, (0x07, sp) + 00001D 90 89 [ 2] 82 pushw y + 00001F 89 [ 2] 83 pushw x + 000020 4Br00 [ 1] 84 push #<(_put_char_to_string + 0) + 000022 4Bs00 [ 1] 85 push #((_put_char_to_string + 0) >> 8) + 000024 CDr00r00 [ 4] 86 call __print_format + 000027 5B 08 [ 2] 87 addw sp, #8 + 88 ; ../sprintf.c: 45: *buf = 0; + 000029 16 03 [ 2] 89 ldw y, (0x03, sp) + 00002B 90 7F [ 1] 90 clr (y) + 91 ; ../sprintf.c: 46: return i; + 92 ; ../sprintf.c: 47: } + 00002D 81 [ 4] 93 ret + 94 ; ../sprintf.c: 50: sprintf (char *buf, const char *format, ...) + 95 ; ----------------------------------------- + 96 ; function sprintf + 97 ; ----------------------------------------- + 00002E 98 _sprintf: + 99 ; ../sprintf.c: 55: va_start (arg, format); + 00002E 96 [ 1] 100 ldw x, sp + 00002F 1C 00 05 [ 2] 101 addw x, #5 + 000032 5C [ 1] 102 incw x + 000033 5C [ 1] 103 incw x + 000034 51 [ 1] 104 exgw x, y + 105 ; ../sprintf.c: 56: i = _print_format (put_char_to_string, &buf, format, arg); + 000035 96 [ 1] 106 ldw x, sp + 000036 1C 00 03 [ 2] 107 addw x, #3 + 000039 90 89 [ 2] 108 pushw y + 00003B 16 07 [ 2] 109 ldw y, (0x07, sp) + 00003D 90 89 [ 2] 110 pushw y + 00003F 89 [ 2] 111 pushw x + 000040 4Br00 [ 1] 112 push #<(_put_char_to_string + 0) + 000042 4Bs00 [ 1] 113 push #((_put_char_to_string + 0) >> 8) + 000044 CDr00r00 [ 4] 114 call __print_format + 000047 5B 08 [ 2] 115 addw sp, #8 + 116 ; ../sprintf.c: 57: *buf = 0; + 000049 16 03 [ 2] 117 ldw y, (0x03, sp) + 00004B 90 7F [ 1] 118 clr (y) + 119 ; ../sprintf.c: 60: return i; + 120 ; ../sprintf.c: 61: } + 00004D 81 [ 4] 121 ret + 122 .area CODE + 123 .area CONST + 124 .area INITIALIZER + 125 .area CABS (ABS) diff --git a/device/lib/stm8/sprintf.rel b/device/lib/stm8/sprintf.rel new file mode 100644 index 0000000..4915701 --- /dev/null +++ b/device/lib/stm8/sprintf.rel @@ -0,0 +1,41 @@ +XH3 +H B areas 4 global symbols +M sprintf +O -mstm8 +S __print_format Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 4E flags 0 addr 0 +S _vsprintf Def000013 +S _sprintf Def00002E +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 02 16 06 93 FE 1F 01 5C 90 FF 1E 01 +R 00 00 00 09 +T 00 00 0D 7B 05 F7 5B 02 81 +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 96 1C 00 03 16 07 90 89 16 07 90 89 89 +R 00 00 00 09 +T 00 00 20 4B 00 00 00 4B 00 00 00 CD +R 00 00 00 09 F1 09 04 00 09 F1 81 08 00 09 +T 00 00 25 00 00 5B 08 16 03 90 7F 81 +R 00 00 00 09 02 03 00 00 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E 96 1C 00 05 5C 5C 51 96 1C 00 03 90 89 +R 00 00 00 09 +T 00 00 3B 16 07 90 89 89 4B 00 00 00 4B 00 00 00 +R 00 00 00 09 F1 09 09 00 09 F1 81 0D 00 09 +T 00 00 44 CD 00 00 5B 08 16 03 90 7F 81 +R 00 00 00 09 02 04 00 00 diff --git a/device/lib/stm8/sprintf.sym b/device/lib/stm8/sprintf.sym new file mode 100644 index 0000000..76d9387 --- /dev/null +++ b/device/lib/stm8/sprintf.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + __print_format ****** GX + 9 _put_char_to_string 000000 R + 9 _sprintf 00002E GR + 9 _vsprintf 000013 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 4E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/sqrtf.asm b/device/lib/stm8/sqrtf.asm new file mode 100644 index 0000000..e0b5397 --- /dev/null +++ b/device/lib/stm8/sqrtf.asm @@ -0,0 +1,229 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module sqrtf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _ldexpf + .globl _frexpf + .globl _sqrtf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../sqrtf.c: 37: float sqrtf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function sqrtf +; ----------------------------------------- +_sqrtf: + sub sp, #10 +; ../sqrtf.c: 42: if (x==0.0) return x; + ldw x, (0x0f, sp) + jrne 00107$ + ldw x, (0x0d, sp) + sllw x + jrne 00107$ + ldw x, (0x0f, sp) + ldw y, (0x0d, sp) + jp 00111$ +00107$: +; ../sqrtf.c: 43: else if (x==1.0) return 1.0; + clrw x + pushw x + push #0x80 + push #0x3f + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fseq + addw sp, #8 + tnz a + jreq 00104$ + clrw x + ldw y, #0x3f80 + jp 00111$ +00104$: +; ../sqrtf.c: 44: else if (x<0.0) + clrw x + pushw x + clrw x + pushw x + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00108$ +; ../sqrtf.c: 46: errno=EDOM; + ldw x, #0x0021 + ldw _errno+0, x +; ../sqrtf.c: 47: return 0.0; + clrw x + clrw y + jp 00111$ +00108$: +; ../sqrtf.c: 49: f=frexpf(x, &n); + ldw x, sp + incw x + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call _frexpf + addw sp, #6 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../sqrtf.c: 50: y=0.41731+0.59016*f; /*Educated guess*/ + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + push #0xba + push #0x14 + push #0x17 + push #0x3f + call ___fsmul + addw sp, #8 + push #0xa8 + push #0xa9 + push #0xd5 + push #0x3e + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../sqrtf.c: 52: y+=f/y; + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fsadd + addw sp, #8 +; ../sqrtf.c: 53: y=ldexpf(y, -2) + f/y; /*Faster version of 0.25 * y + f/y*/ + pushw x + pushw y + push #0xfe + push #0xff + pushw x + pushw y + call _ldexpf + addw sp, #6 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + popw y + pushw y + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../sqrtf.c: 55: if (n&1) + ld a, (0x02, sp) + srl a + jrnc 00110$ +; ../sqrtf.c: 57: y*=0.7071067812; + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + push #0xf3 + push #0x04 + push #0x35 + push #0x3f + call ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../sqrtf.c: 58: ++n; + ldw x, (0x01, sp) + incw x + ldw (0x01, sp), x +00110$: +; ../sqrtf.c: 60: return ldexpf(y, n/2); + push #0x02 + push #0x00 + ldw x, (0x03, sp) + pushw x + call __divsint + addw sp, #4 + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call _ldexpf + addw sp, #6 +00111$: +; ../sqrtf.c: 61: } + addw sp, #10 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/sqrtf.lst b/device/lib/stm8/sqrtf.lst new file mode 100644 index 0000000..f4856d7 --- /dev/null +++ b/device/lib/stm8/sqrtf.lst @@ -0,0 +1,229 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module sqrtf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _ldexpf + 12 .globl _frexpf + 13 .globl _sqrtf + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../sqrtf.c: 37: float sqrtf(float x) _FLOAT_FUNC_REENTRANT + 52 ; ----------------------------------------- + 53 ; function sqrtf + 54 ; ----------------------------------------- + 000000 55 _sqrtf: + 000000 52 0A [ 2] 56 sub sp, #10 + 57 ; ../sqrtf.c: 42: if (x==0.0) return x; + 000002 1E 0F [ 2] 58 ldw x, (0x0f, sp) + 000004 26 0C [ 1] 59 jrne 00107$ + 000006 1E 0D [ 2] 60 ldw x, (0x0d, sp) + 000008 58 [ 2] 61 sllw x + 000009 26 07 [ 1] 62 jrne 00107$ + 00000B 1E 0F [ 2] 63 ldw x, (0x0f, sp) + 00000D 16 0D [ 2] 64 ldw y, (0x0d, sp) + 00000F CCr01r11 [ 2] 65 jp 00111$ + 000012 66 00107$: + 67 ; ../sqrtf.c: 43: else if (x==1.0) return 1.0; + 000012 5F [ 1] 68 clrw x + 000013 89 [ 2] 69 pushw x + 000014 4B 80 [ 1] 70 push #0x80 + 000016 4B 3F [ 1] 71 push #0x3f + 000018 1E 13 [ 2] 72 ldw x, (0x13, sp) + 00001A 89 [ 2] 73 pushw x + 00001B 1E 13 [ 2] 74 ldw x, (0x13, sp) + 00001D 89 [ 2] 75 pushw x + 00001E CDr00r00 [ 4] 76 call ___fseq + 000021 5B 08 [ 2] 77 addw sp, #8 + 000023 4D [ 1] 78 tnz a + 000024 27 08 [ 1] 79 jreq 00104$ + 000026 5F [ 1] 80 clrw x + 000027 90 AE 3F 80 [ 2] 81 ldw y, #0x3f80 + 00002B CCr01r11 [ 2] 82 jp 00111$ + 00002E 83 00104$: + 84 ; ../sqrtf.c: 44: else if (x<0.0) + 00002E 5F [ 1] 85 clrw x + 00002F 89 [ 2] 86 pushw x + 000030 5F [ 1] 87 clrw x + 000031 89 [ 2] 88 pushw x + 000032 1E 13 [ 2] 89 ldw x, (0x13, sp) + 000034 89 [ 2] 90 pushw x + 000035 1E 13 [ 2] 91 ldw x, (0x13, sp) + 000037 89 [ 2] 92 pushw x + 000038 CDr00r00 [ 4] 93 call ___fslt + 00003B 5B 08 [ 2] 94 addw sp, #8 + 00003D 4D [ 1] 95 tnz a + 00003E 27 0C [ 1] 96 jreq 00108$ + 97 ; ../sqrtf.c: 46: errno=EDOM; + 000040 AE 00 21 [ 2] 98 ldw x, #0x0021 + 000043 CFu00u00 [ 2] 99 ldw _errno+0, x + 100 ; ../sqrtf.c: 47: return 0.0; + 000046 5F [ 1] 101 clrw x + 000047 90 5F [ 1] 102 clrw y + 000049 CCr01r11 [ 2] 103 jp 00111$ + 00004C 104 00108$: + 105 ; ../sqrtf.c: 49: f=frexpf(x, &n); + 00004C 96 [ 1] 106 ldw x, sp + 00004D 5C [ 1] 107 incw x + 00004E 89 [ 2] 108 pushw x + 00004F 1E 11 [ 2] 109 ldw x, (0x11, sp) + 000051 89 [ 2] 110 pushw x + 000052 1E 11 [ 2] 111 ldw x, (0x11, sp) + 000054 89 [ 2] 112 pushw x + 000055 CDr00r00 [ 4] 113 call _frexpf + 000058 5B 06 [ 2] 114 addw sp, #6 + 00005A 1F 05 [ 2] 115 ldw (0x05, sp), x + 00005C 17 03 [ 2] 116 ldw (0x03, sp), y + 117 ; ../sqrtf.c: 50: y=0.41731+0.59016*f; /*Educated guess*/ + 00005E 1E 05 [ 2] 118 ldw x, (0x05, sp) + 000060 89 [ 2] 119 pushw x + 000061 1E 05 [ 2] 120 ldw x, (0x05, sp) + 000063 89 [ 2] 121 pushw x + 000064 4B BA [ 1] 122 push #0xba + 000066 4B 14 [ 1] 123 push #0x14 + 000068 4B 17 [ 1] 124 push #0x17 + 00006A 4B 3F [ 1] 125 push #0x3f + 00006C CDr00r00 [ 4] 126 call ___fsmul + 00006F 5B 08 [ 2] 127 addw sp, #8 + 000071 4B A8 [ 1] 128 push #0xa8 + 000073 4B A9 [ 1] 129 push #0xa9 + 000075 4B D5 [ 1] 130 push #0xd5 + 000077 4B 3E [ 1] 131 push #0x3e + 000079 89 [ 2] 132 pushw x + 00007A 90 89 [ 2] 133 pushw y + 00007C CDr00r00 [ 4] 134 call ___fsadd + 00007F 5B 08 [ 2] 135 addw sp, #8 + 000081 1F 09 [ 2] 136 ldw (0x09, sp), x + 000083 17 07 [ 2] 137 ldw (0x07, sp), y + 138 ; ../sqrtf.c: 52: y+=f/y; + 000085 1E 09 [ 2] 139 ldw x, (0x09, sp) + 000087 89 [ 2] 140 pushw x + 000088 1E 09 [ 2] 141 ldw x, (0x09, sp) + 00008A 89 [ 2] 142 pushw x + 00008B 1E 09 [ 2] 143 ldw x, (0x09, sp) + 00008D 89 [ 2] 144 pushw x + 00008E 1E 09 [ 2] 145 ldw x, (0x09, sp) + 000090 89 [ 2] 146 pushw x + 000091 CDr00r00 [ 4] 147 call ___fsdiv + 000094 5B 08 [ 2] 148 addw sp, #8 + 000096 89 [ 2] 149 pushw x + 000097 90 89 [ 2] 150 pushw y + 000099 1E 0D [ 2] 151 ldw x, (0x0d, sp) + 00009B 89 [ 2] 152 pushw x + 00009C 1E 0D [ 2] 153 ldw x, (0x0d, sp) + 00009E 89 [ 2] 154 pushw x + 00009F CDr00r00 [ 4] 155 call ___fsadd + 0000A2 5B 08 [ 2] 156 addw sp, #8 + 157 ; ../sqrtf.c: 53: y=ldexpf(y, -2) + f/y; /*Faster version of 0.25 * y + f/y*/ + 0000A4 89 [ 2] 158 pushw x + 0000A5 90 89 [ 2] 159 pushw y + 0000A7 4B FE [ 1] 160 push #0xfe + 0000A9 4B FF [ 1] 161 push #0xff + 0000AB 89 [ 2] 162 pushw x + 0000AC 90 89 [ 2] 163 pushw y + 0000AE CDr00r00 [ 4] 164 call _ldexpf + 0000B1 5B 06 [ 2] 165 addw sp, #6 + 0000B3 1F 0D [ 2] 166 ldw (0x0d, sp), x + 0000B5 17 0B [ 2] 167 ldw (0x0b, sp), y + 0000B7 90 85 [ 2] 168 popw y + 0000B9 90 89 [ 2] 169 pushw y + 0000BB 1E 09 [ 2] 170 ldw x, (0x09, sp) + 0000BD 89 [ 2] 171 pushw x + 0000BE 1E 09 [ 2] 172 ldw x, (0x09, sp) + 0000C0 89 [ 2] 173 pushw x + 0000C1 CDr00r00 [ 4] 174 call ___fsdiv + 0000C4 5B 08 [ 2] 175 addw sp, #8 + 0000C6 89 [ 2] 176 pushw x + 0000C7 90 89 [ 2] 177 pushw y + 0000C9 1E 0D [ 2] 178 ldw x, (0x0d, sp) + 0000CB 89 [ 2] 179 pushw x + 0000CC 1E 0D [ 2] 180 ldw x, (0x0d, sp) + 0000CE 89 [ 2] 181 pushw x + 0000CF CDr00r00 [ 4] 182 call ___fsadd + 0000D2 5B 08 [ 2] 183 addw sp, #8 + 0000D4 1F 09 [ 2] 184 ldw (0x09, sp), x + 0000D6 17 07 [ 2] 185 ldw (0x07, sp), y + 186 ; ../sqrtf.c: 55: if (n&1) + 0000D8 7B 02 [ 1] 187 ld a, (0x02, sp) + 0000DA 44 [ 1] 188 srl a + 0000DB 24 1C [ 1] 189 jrnc 00110$ + 190 ; ../sqrtf.c: 57: y*=0.7071067812; + 0000DD 1E 09 [ 2] 191 ldw x, (0x09, sp) + 0000DF 89 [ 2] 192 pushw x + 0000E0 1E 09 [ 2] 193 ldw x, (0x09, sp) + 0000E2 89 [ 2] 194 pushw x + 0000E3 4B F3 [ 1] 195 push #0xf3 + 0000E5 4B 04 [ 1] 196 push #0x04 + 0000E7 4B 35 [ 1] 197 push #0x35 + 0000E9 4B 3F [ 1] 198 push #0x3f + 0000EB CDr00r00 [ 4] 199 call ___fsmul + 0000EE 5B 08 [ 2] 200 addw sp, #8 + 0000F0 1F 09 [ 2] 201 ldw (0x09, sp), x + 0000F2 17 07 [ 2] 202 ldw (0x07, sp), y + 203 ; ../sqrtf.c: 58: ++n; + 0000F4 1E 01 [ 2] 204 ldw x, (0x01, sp) + 0000F6 5C [ 1] 205 incw x + 0000F7 1F 01 [ 2] 206 ldw (0x01, sp), x + 0000F9 207 00110$: + 208 ; ../sqrtf.c: 60: return ldexpf(y, n/2); + 0000F9 4B 02 [ 1] 209 push #0x02 + 0000FB 4B 00 [ 1] 210 push #0x00 + 0000FD 1E 03 [ 2] 211 ldw x, (0x03, sp) + 0000FF 89 [ 2] 212 pushw x + 000100 CDr00r00 [ 4] 213 call __divsint + 000103 5B 04 [ 2] 214 addw sp, #4 + 000105 89 [ 2] 215 pushw x + 000106 1E 0B [ 2] 216 ldw x, (0x0b, sp) + 000108 89 [ 2] 217 pushw x + 000109 1E 0B [ 2] 218 ldw x, (0x0b, sp) + 00010B 89 [ 2] 219 pushw x + 00010C CDr00r00 [ 4] 220 call _ldexpf + 00010F 5B 06 [ 2] 221 addw sp, #6 + 000111 222 00111$: + 223 ; ../sqrtf.c: 61: } + 000111 5B 0A [ 2] 224 addw sp, #10 + 000113 81 [ 4] 225 ret + 226 .area CODE + 227 .area CONST + 228 .area INITIALIZER + 229 .area CABS (ABS) diff --git a/device/lib/stm8/sqrtf.rel b/device/lib/stm8/sqrtf.rel new file mode 100644 index 0000000..35af760 --- /dev/null +++ b/device/lib/stm8/sqrtf.rel @@ -0,0 +1,88 @@ +XH3 +H B areas B global symbols +M sqrtf +O -mstm8 +S ___fsmul Ref000000 +S _errno Ref000000 +S ___fseq Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S _ldexpf Ref000000 +S _frexpf Ref000000 +S ___fsdiv Ref000000 +S __divsint Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 114 flags 0 addr 0 +S _sqrtf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 1E 0F 26 0C 1E 0D 58 26 07 1E 0F +R 00 00 00 09 +T 00 00 0D 16 0D CC 01 11 +R 00 00 00 09 00 06 00 09 +T 00 00 12 +R 00 00 00 09 +T 00 00 12 5F 89 4B 80 4B 3F 1E 13 89 1E 13 89 CD +R 00 00 00 09 +T 00 00 1F 00 00 5B 08 4D 27 08 5F 90 AE 3F 80 CC +R 00 00 00 09 02 03 00 02 +T 00 00 2C 01 11 +R 00 00 00 09 00 03 00 09 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E 5F 89 5F 89 1E 13 89 1E 13 89 CD 00 00 +R 00 00 00 09 02 0E 00 03 +T 00 00 3B 5B 08 4D 27 0C AE 00 21 CF 00 00 5F 90 +R 00 00 00 09 12 0C 00 01 +T 00 00 48 5F CC 01 11 +R 00 00 00 09 00 05 00 09 +T 00 00 4C +R 00 00 00 09 +T 00 00 4C 96 5C 89 1E 11 89 1E 11 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 07 +T 00 00 59 06 1F 05 17 03 1E 05 89 1E 05 89 4B BA +R 00 00 00 09 +T 00 00 66 4B 14 4B 17 4B 3F CD 00 00 5B 08 4B A8 +R 00 00 00 09 02 0A 00 00 +T 00 00 73 4B A9 4B D5 4B 3E 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 05 +T 00 00 80 08 1F 09 17 07 1E 09 89 1E 09 89 1E 09 +R 00 00 00 09 +T 00 00 8D 89 1E 09 89 CD 00 00 5B 08 89 90 89 1E +R 00 00 00 09 02 08 00 08 +T 00 00 9A 0D 89 1E 0D 89 CD 00 00 5B 08 89 90 89 +R 00 00 00 09 02 09 00 05 +T 00 00 A7 4B FE 4B FF 89 90 89 CD 00 00 5B 06 1F +R 00 00 00 09 02 0B 00 06 +T 00 00 B4 0D 17 0B 90 85 90 89 1E 09 89 1E 09 89 +R 00 00 00 09 +T 00 00 C1 CD 00 00 5B 08 89 90 89 1E 0D 89 1E 0D +R 00 00 00 09 02 04 00 08 +T 00 00 CE 89 CD 00 00 5B 08 1F 09 17 07 7B 02 44 +R 00 00 00 09 02 05 00 05 +T 00 00 DB 24 1C 1E 09 89 1E 09 89 4B F3 4B 04 4B +R 00 00 00 09 +T 00 00 E8 35 4B 3F CD 00 00 5B 08 1F 09 17 07 1E +R 00 00 00 09 02 07 00 00 +T 00 00 F5 01 5C 1F 01 +R 00 00 00 09 +T 00 00 F9 +R 00 00 00 09 +T 00 00 F9 4B 02 4B 00 1E 03 89 CD 00 00 5B 04 89 +R 00 00 00 09 02 0B 00 09 +T 00 01 06 1E 0B 89 1E 0B 89 CD 00 00 5B 06 +R 00 00 00 09 02 0A 00 06 +T 00 01 11 +R 00 00 00 09 +T 00 01 11 5B 0A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/sqrtf.sym b/device/lib/stm8/sqrtf.sym new file mode 100644 index 0000000..a6eff13 --- /dev/null +++ b/device/lib/stm8/sqrtf.sym @@ -0,0 +1,38 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + ___fsdiv ****** GX + ___fseq ****** GX + ___fslt ****** GX + ___fsmul ****** GX + __divsint ****** GX + _errno ****** GX + _frexpf ****** GX + _ldexpf ****** GX + 9 _sqrtf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 114 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/strcmp.lst b/device/lib/stm8/strcmp.lst new file mode 100644 index 0000000..f3d2fae --- /dev/null +++ b/device/lib/stm8/strcmp.lst @@ -0,0 +1,77 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; strcmp.s + 3 ; + 4 ; Copyright (C) 2016, Philipp Klaus Krause + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl _strcmp + 30 + 31 .area CODE + 32 + 000000 33 _strcmp: + 34 + 000000 16 03 [ 2] 35 ldw y, (3, sp) + 000002 1E 05 [ 2] 36 ldw x, (5, sp) + 37 + 000004 38 loop: + 000004 90 F6 [ 1] 39 ld a, (y) + 000006 27 20 [ 1] 40 jreq null + 000008 F1 [ 1] 41 cp a, (x) + 000009 26 22 [ 1] 42 jrne diff + 43 + 00000B 90 E6 01 [ 1] 44 ld a, (1, y) + 00000E 27 17 [ 1] 45 jreq null_1 + 000010 E1 01 [ 1] 46 cp a, (1, x) + 000012 26 19 [ 1] 47 jrne diff + 48 + 000014 90 E6 02 [ 1] 49 ld a, (2, y) + 000017 27 0D [ 1] 50 jreq null_2 + 000019 E1 02 [ 1] 51 cp a, (2, x) + 00001B 26 10 [ 1] 52 jrne diff + 53 + 00001D 72 A9 00 03 [ 2] 54 addw y, #3 + 000021 1C 00 03 [ 2] 55 addw x, #3 + 56 + 000024 20 DE [ 2] 57 jra loop + 58 + 000026 59 null_2: + 000026 5C [ 1] 60 incw x + 000027 61 null_1: + 000027 5C [ 1] 62 incw x + 000028 63 null: + 000028 7D [ 1] 64 tnz (x) + 000029 26 08 [ 1] 65 jrne less + 00002B 5F [ 1] 66 clrw x + 00002C 81 [ 4] 67 ret + 68 + 00002D 69 diff: + 00002D 25 04 [ 1] 70 jrult less + 00002F AE 00 01 [ 2] 71 ldw x, #1 + 000032 81 [ 4] 72 ret + 73 + 000033 74 less: + 000033 AE FF FF [ 2] 75 ldw x, #-1 + 000036 81 [ 4] 76 ret + 77 diff --git a/device/lib/stm8/strcmp.rel b/device/lib/stm8/strcmp.rel new file mode 100644 index 0000000..3434cf7 --- /dev/null +++ b/device/lib/stm8/strcmp.rel @@ -0,0 +1,38 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 37 flags 0 addr 0 +S _strcmp Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 16 03 1E 05 +R 00 00 00 01 +T 00 00 04 +R 00 00 00 01 +T 00 00 04 90 F6 27 20 F1 26 22 90 E6 01 27 17 E1 +R 00 00 00 01 +T 00 00 11 01 26 19 90 E6 02 27 0D E1 02 26 10 72 +R 00 00 00 01 +T 00 00 1E A9 00 03 1C 00 03 20 DE +R 00 00 00 01 +T 00 00 26 +R 00 00 00 01 +T 00 00 26 5C +R 00 00 00 01 +T 00 00 27 +R 00 00 00 01 +T 00 00 27 5C +R 00 00 00 01 +T 00 00 28 +R 00 00 00 01 +T 00 00 28 7D 26 08 5F 81 +R 00 00 00 01 +T 00 00 2D +R 00 00 00 01 +T 00 00 2D 25 04 AE 00 01 81 +R 00 00 00 01 +T 00 00 33 +R 00 00 00 01 +T 00 00 33 AE FF FF 81 +R 00 00 00 01 diff --git a/device/lib/stm8/strcmp.s b/device/lib/stm8/strcmp.s new file mode 100644 index 0000000..be2b5fd --- /dev/null +++ b/device/lib/stm8/strcmp.s @@ -0,0 +1,77 @@ +;-------------------------------------------------------------------------- +; strcmp.s +; +; Copyright (C) 2016, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl _strcmp + + .area CODE + +_strcmp: + + ldw y, (3, sp) + ldw x, (5, sp) + +loop: + ld a, (y) + jreq null + cp a, (x) + jrne diff + + ld a, (1, y) + jreq null_1 + cp a, (1, x) + jrne diff + + ld a, (2, y) + jreq null_2 + cp a, (2, x) + jrne diff + + addw y, #3 + addw x, #3 + + jra loop + +null_2: + incw x +null_1: + incw x +null: + tnz (x) + jrne less + clrw x + ret + +diff: + jrult less + ldw x, #1 + ret + +less: + ldw x, #-1 + ret + diff --git a/device/lib/stm8/strcmp.sym b/device/lib/stm8/strcmp.sym new file mode 100644 index 0000000..2ea7a38 --- /dev/null +++ b/device/lib/stm8/strcmp.sym @@ -0,0 +1,18 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 _strcmp 000000 GR | 1 diff 00002D R + 1 less 000033 R | 1 loop 000004 R | 1 null 000028 R + 1 null_1 000027 R | 1 null_2 000026 R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 37 flags 0 + diff --git a/device/lib/stm8/strcpy.lst b/device/lib/stm8/strcpy.lst new file mode 100644 index 0000000..f11ff6a --- /dev/null +++ b/device/lib/stm8/strcpy.lst @@ -0,0 +1,55 @@ + 1 ;-------------------------------------------------------------------------- + 2 ; strcpy.s + 3 ; + 4 ; Copyright (C) 2016, Philipp Klaus Krause + 5 ; + 6 ; This library is free software; you can redistribute it and/or modify it + 7 ; under the terms of the GNU General Public License as published by the + 8 ; Free Software Foundation; either version 2, or (at your option) any + 9 ; later version. + 10 ; + 11 ; This library is distributed in the hope that it will be useful, + 12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of + 13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 14 ; GNU General Public License for more details. + 15 ; + 16 ; You should have received a copy of the GNU General Public License + 17 ; along with this library; see the file COPYING. If not, write to the + 18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + 19 ; MA 02110-1301, USA. + 20 ; + 21 ; As a special exception, if you link this library with other files, + 22 ; some of which are compiled with SDCC, to produce an executable, + 23 ; this library does not by itself cause the resulting executable to + 24 ; be covered by the GNU General Public License. This exception does + 25 ; not however invalidate any other reasons why the executable file + 26 ; might be covered by the GNU General Public License. + 27 ;-------------------------------------------------------------------------- + 28 + 29 .globl _strcpy + 30 + 31 .area CODE + 32 + 000000 33 _strcpy: + 34 + 000000 16 03 [ 2] 35 ldw y, (0x03, sp) + 000002 1E 05 [ 2] 36 ldw x, (0x05, sp) + 37 + 000004 38 loop: + 000004 F6 [ 1] 39 ld a, (x) + 000005 90 F7 [ 1] 40 ld (y), a + 000007 27 17 [ 1] 41 jreq end + 000009 E6 01 [ 1] 42 ld a, (1, x) + 00000B 90 E7 01 [ 1] 43 ld (1, y), a + 00000E 27 10 [ 1] 44 jreq end + 000010 E6 02 [ 1] 45 ld a, (2, x) + 000012 90 E7 02 [ 1] 46 ld (2, y), a + 000015 27 09 [ 1] 47 jreq end + 000017 1C 00 03 [ 2] 48 addw x, #3 + 00001A 72 A9 00 03 [ 2] 49 addw y, #3 + 00001E 20 E4 [ 2] 50 jra loop + 51 + 000020 52 end: + 000020 1E 03 [ 2] 53 ldw x, (0x03, sp) + 000022 81 [ 4] 54 ret + 55 diff --git a/device/lib/stm8/strcpy.rel b/device/lib/stm8/strcpy.rel new file mode 100644 index 0000000..6c5db2b --- /dev/null +++ b/device/lib/stm8/strcpy.rel @@ -0,0 +1,22 @@ +XH3 +H 2 areas 2 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 23 flags 0 addr 0 +S _strcpy Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 16 03 1E 05 +R 00 00 00 01 +T 00 00 04 +R 00 00 00 01 +T 00 00 04 F6 90 F7 27 17 E6 01 90 E7 01 27 10 E6 +R 00 00 00 01 +T 00 00 11 02 90 E7 02 27 09 1C 00 03 72 A9 00 03 +R 00 00 00 01 +T 00 00 1E 20 E4 +R 00 00 00 01 +T 00 00 20 +R 00 00 00 01 +T 00 00 20 1E 03 81 +R 00 00 00 01 diff --git a/device/lib/stm8/strcpy.s b/device/lib/stm8/strcpy.s new file mode 100644 index 0000000..6704637 --- /dev/null +++ b/device/lib/stm8/strcpy.s @@ -0,0 +1,55 @@ +;-------------------------------------------------------------------------- +; strcpy.s +; +; Copyright (C) 2016, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl _strcpy + + .area CODE + +_strcpy: + + ldw y, (0x03, sp) + ldw x, (0x05, sp) + +loop: + ld a, (x) + ld (y), a + jreq end + ld a, (1, x) + ld (1, y), a + jreq end + ld a, (2, x) + ld (2, y), a + jreq end + addw x, #3 + addw y, #3 + jra loop + +end: + ldw x, (0x03, sp) + ret + diff --git a/device/lib/stm8/strcpy.sym b/device/lib/stm8/strcpy.sym new file mode 100644 index 0000000..08cfdf3 --- /dev/null +++ b/device/lib/stm8/strcpy.sym @@ -0,0 +1,17 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$.= 002710 L | .__.ABS.= 000000 G | .__.CPU.= 000000 L + .__.H$L.= 000001 L | 1 _strcpy 000000 GR | 1 end 000020 R + 1 loop 000004 R + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 CODE size 23 flags 0 + diff --git a/device/lib/stm8/strdup.asm b/device/lib/stm8/strdup.asm new file mode 100644 index 0000000..a7b6bfc --- /dev/null +++ b/device/lib/stm8/strdup.asm @@ -0,0 +1,85 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module strdup + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _malloc + .globl _strlen + .globl _strcpy + .globl _strdup +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../strdup.c: 33: char *strdup (const char *s) +; ----------------------------------------- +; function strdup +; ----------------------------------------- +_strdup: +; ../strdup.c: 35: char *r = malloc(strlen(s) + 1); + ldw x, (0x03, sp) + pushw x + call _strlen + addw sp, #2 + incw x + pushw x + call _malloc + addw sp, #2 +; ../strdup.c: 36: if (r) + tnzw x + jrne 00110$ + ret +00110$: +; ../strdup.c: 37: strcpy(r, s); + pushw x + ldw y, (0x05, sp) + pushw y + pushw x + call _strcpy + addw sp, #4 + popw x +; ../strdup.c: 38: return (r); +; ../strdup.c: 39: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/strdup.lst b/device/lib/stm8/strdup.lst new file mode 100644 index 0000000..14a15cb --- /dev/null +++ b/device/lib/stm8/strdup.lst @@ -0,0 +1,85 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module strdup + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _malloc + 12 .globl _strlen + 13 .globl _strcpy + 14 .globl _strdup + 15 ;-------------------------------------------------------- + 16 ; ram data + 17 ;-------------------------------------------------------- + 18 .area DATA + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../strdup.c: 33: char *strdup (const char *s) + 53 ; ----------------------------------------- + 54 ; function strdup + 55 ; ----------------------------------------- + 000000 56 _strdup: + 57 ; ../strdup.c: 35: char *r = malloc(strlen(s) + 1); + 000000 1E 03 [ 2] 58 ldw x, (0x03, sp) + 000002 89 [ 2] 59 pushw x + 000003 CDr00r00 [ 4] 60 call _strlen + 000006 5B 02 [ 2] 61 addw sp, #2 + 000008 5C [ 1] 62 incw x + 000009 89 [ 2] 63 pushw x + 00000A CDr00r00 [ 4] 64 call _malloc + 00000D 5B 02 [ 2] 65 addw sp, #2 + 66 ; ../strdup.c: 36: if (r) + 00000F 5D [ 2] 67 tnzw x + 000010 26 01 [ 1] 68 jrne 00110$ + 000012 81 [ 4] 69 ret + 000013 70 00110$: + 71 ; ../strdup.c: 37: strcpy(r, s); + 000013 89 [ 2] 72 pushw x + 000014 16 05 [ 2] 73 ldw y, (0x05, sp) + 000016 90 89 [ 2] 74 pushw y + 000018 89 [ 2] 75 pushw x + 000019 CDr00r00 [ 4] 76 call _strcpy + 00001C 5B 04 [ 2] 77 addw sp, #4 + 00001E 85 [ 2] 78 popw x + 79 ; ../strdup.c: 38: return (r); + 80 ; ../strdup.c: 39: } + 00001F 81 [ 4] 81 ret + 82 .area CODE + 83 .area CONST + 84 .area INITIALIZER + 85 .area CABS (ABS) diff --git a/device/lib/stm8/strdup.rel b/device/lib/stm8/strdup.rel new file mode 100644 index 0000000..d5c2211 --- /dev/null +++ b/device/lib/stm8/strdup.rel @@ -0,0 +1,30 @@ +XH3 +H B areas 5 global symbols +M strdup +O -mstm8 +S _strcpy Ref000000 +S _malloc Ref000000 +S .__.ABS. Def000000 +S _strlen Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 20 flags 0 addr 0 +S _strdup Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 89 CD 00 00 5B 02 5C 89 CD 00 00 +R 00 00 00 09 02 07 00 03 02 0E 00 01 +T 00 00 0D 5B 02 5D 26 01 81 +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 89 16 05 90 89 89 CD 00 00 5B 04 85 81 +R 00 00 00 09 02 0A 00 00 diff --git a/device/lib/stm8/strdup.sym b/device/lib/stm8/strdup.sym new file mode 100644 index 0000000..658bc32 --- /dev/null +++ b/device/lib/stm8/strdup.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _malloc ****** GX + _strcpy ****** GX + 9 _strdup 000000 GR + _strlen ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 20 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/strndup.asm b/device/lib/stm8/strndup.asm new file mode 100644 index 0000000..b0236cb --- /dev/null +++ b/device/lib/stm8/strndup.asm @@ -0,0 +1,104 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module strndup + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _malloc + .globl ___memcpy + .globl _strlen + .globl _strndup +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../strndup.c: 33: char *strndup (const char *s, size_t n) +; ----------------------------------------- +; function strndup +; ----------------------------------------- +_strndup: + sub sp, #4 +; ../strndup.c: 35: size_t l = strlen (s); + ldw x, (0x07, sp) + pushw x + call _strlen + addw sp, #2 +; ../strndup.c: 36: if (l > n) + ldw (0x01, sp), x + cpw x, (0x09, sp) + jrule 00102$ +; ../strndup.c: 37: l = n; + ldw y, (0x09, sp) + ldw (0x01, sp), y +00102$: +; ../strndup.c: 38: char *r = malloc (l + 1); + ldw x, (0x01, sp) + incw x + pushw x + call _malloc + addw sp, #2 +; ../strndup.c: 39: if (r) + ldw (0x03, sp), x + jreq 00104$ +; ../strndup.c: 41: memcpy (r, s, l); + ldw y, (0x07, sp) + ldw x, (0x03, sp) + ld a, (0x02, sp) + push a + ld a, (0x02, sp) + push a + pushw y + pushw x + call ___memcpy + addw sp, #6 +; ../strndup.c: 42: r[l] = 0; + ldw x, (0x03, sp) + addw x, (0x01, sp) + clr (x) +00104$: +; ../strndup.c: 44: return (r); + ldw x, (0x03, sp) +; ../strndup.c: 45: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/strndup.lst b/device/lib/stm8/strndup.lst new file mode 100644 index 0000000..18c6d07 --- /dev/null +++ b/device/lib/stm8/strndup.lst @@ -0,0 +1,104 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module strndup + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _malloc + 12 .globl ___memcpy + 13 .globl _strlen + 14 .globl _strndup + 15 ;-------------------------------------------------------- + 16 ; ram data + 17 ;-------------------------------------------------------- + 18 .area DATA + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../strndup.c: 33: char *strndup (const char *s, size_t n) + 53 ; ----------------------------------------- + 54 ; function strndup + 55 ; ----------------------------------------- + 000000 56 _strndup: + 000000 52 04 [ 2] 57 sub sp, #4 + 58 ; ../strndup.c: 35: size_t l = strlen (s); + 000002 1E 07 [ 2] 59 ldw x, (0x07, sp) + 000004 89 [ 2] 60 pushw x + 000005 CDr00r00 [ 4] 61 call _strlen + 000008 5B 02 [ 2] 62 addw sp, #2 + 63 ; ../strndup.c: 36: if (l > n) + 00000A 1F 01 [ 2] 64 ldw (0x01, sp), x + 00000C 13 09 [ 2] 65 cpw x, (0x09, sp) + 00000E 23 04 [ 2] 66 jrule 00102$ + 67 ; ../strndup.c: 37: l = n; + 000010 16 09 [ 2] 68 ldw y, (0x09, sp) + 000012 17 01 [ 2] 69 ldw (0x01, sp), y + 000014 70 00102$: + 71 ; ../strndup.c: 38: char *r = malloc (l + 1); + 000014 1E 01 [ 2] 72 ldw x, (0x01, sp) + 000016 5C [ 1] 73 incw x + 000017 89 [ 2] 74 pushw x + 000018 CDr00r00 [ 4] 75 call _malloc + 00001B 5B 02 [ 2] 76 addw sp, #2 + 77 ; ../strndup.c: 39: if (r) + 00001D 1F 03 [ 2] 78 ldw (0x03, sp), x + 00001F 27 18 [ 1] 79 jreq 00104$ + 80 ; ../strndup.c: 41: memcpy (r, s, l); + 000021 16 07 [ 2] 81 ldw y, (0x07, sp) + 000023 1E 03 [ 2] 82 ldw x, (0x03, sp) + 000025 7B 02 [ 1] 83 ld a, (0x02, sp) + 000027 88 [ 1] 84 push a + 000028 7B 02 [ 1] 85 ld a, (0x02, sp) + 00002A 88 [ 1] 86 push a + 00002B 90 89 [ 2] 87 pushw y + 00002D 89 [ 2] 88 pushw x + 00002E CDr00r00 [ 4] 89 call ___memcpy + 000031 5B 06 [ 2] 90 addw sp, #6 + 91 ; ../strndup.c: 42: r[l] = 0; + 000033 1E 03 [ 2] 92 ldw x, (0x03, sp) + 000035 72 FB 01 [ 2] 93 addw x, (0x01, sp) + 000038 7F [ 1] 94 clr (x) + 000039 95 00104$: + 96 ; ../strndup.c: 44: return (r); + 000039 1E 03 [ 2] 97 ldw x, (0x03, sp) + 98 ; ../strndup.c: 45: } + 00003B 5B 04 [ 2] 99 addw sp, #4 + 00003D 81 [ 4] 100 ret + 101 .area CODE + 102 .area CONST + 103 .area INITIALIZER + 104 .area CABS (ABS) diff --git a/device/lib/stm8/strndup.rel b/device/lib/stm8/strndup.rel new file mode 100644 index 0000000..4cc9735 --- /dev/null +++ b/device/lib/stm8/strndup.rel @@ -0,0 +1,38 @@ +XH3 +H B areas 5 global symbols +M strndup +O -mstm8 +S _malloc Ref000000 +S .__.ABS. Def000000 +S ___memcpy Ref000000 +S _strlen Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 3E flags 0 addr 0 +S _strndup Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 1E 07 89 CD 00 00 5B 02 1F 01 13 +R 00 00 00 09 02 09 00 03 +T 00 00 0D 09 23 04 16 09 17 01 +R 00 00 00 09 +T 00 00 14 +R 00 00 00 09 +T 00 00 14 1E 01 5C 89 CD 00 00 5B 02 1F 03 27 18 +R 00 00 00 09 02 08 00 00 +T 00 00 21 16 07 1E 03 7B 02 88 7B 02 88 90 89 89 +R 00 00 00 09 +T 00 00 2E CD 00 00 5B 06 1E 03 72 FB 01 7F +R 00 00 00 09 02 04 00 02 +T 00 00 39 +R 00 00 00 09 +T 00 00 39 1E 03 5B 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/strndup.sym b/device/lib/stm8/strndup.sym new file mode 100644 index 0000000..a3f3f5e --- /dev/null +++ b/device/lib/stm8/strndup.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___memcpy ****** GX + _malloc ****** GX + _strlen ****** GX + 9 _strndup 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 3E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/strtol.asm b/device/lib/stm8/strtol.asm new file mode 100644 index 0000000..a438539 --- /dev/null +++ b/device/lib/stm8/strtol.asm @@ -0,0 +1,224 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module strtol + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strtoul + .globl _strtol +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../strtol.c: 38: long int strtol(const char *nptr, char **endptr, int base) +; ----------------------------------------- +; function strtol +; ----------------------------------------- +_strtol: + sub sp, #11 +; ../strtol.c: 40: const char *ptr = nptr; + ldw y, (0x0e, sp) +; ../strtol.c: 45: while (isblank (*ptr)) +00101$: + ld a, (y) + ld (0x09, sp), a +; ../strtol.c: 46: ptr++; + ldw x, y + incw x + ldw (0x0a, sp), x +; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + cp a, #0x20 + jreq 00132$ + cp a, #0x09 + jrne 00158$ +00132$: +; ../strtol.c: 46: ptr++; + ldw y, (0x0a, sp) + jra 00101$ +00158$: + ldw (0x03, sp), y +; ../strtol.c: 50: if (*ptr == '-') + ld a, (0x09, sp) +; ../strtol.c: 52: neg = true; + sub a, #0x2d + jrne 00105$ + inc a + ld (0x05, sp), a +; ../strtol.c: 53: ptr++; + ldw y, (0x0a, sp) + ldw (0x03, sp), y +; ../strtol.c: 56: neg = false; + .byte 0xc5 +00105$: + clr (0x05, sp) +00106$: +; ../strtol.c: 62: *endptr = nptr; + ldw y, (0x10, sp) + ldw (0x06, sp), y +; ../strtol.c: 59: if (neg && (isblank (*ptr) || *ptr == '-' || *ptr == '+')) + tnz (0x05, sp) + jreq 00110$ + ldw x, (0x03, sp) + ld a, (x) + ld xl, a +; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + cp a, #0x20 + jreq 00109$ + cp a, #0x09 + jreq 00109$ +; ../strtol.c: 59: if (neg && (isblank (*ptr) || *ptr == '-' || *ptr == '+')) + ld a, xl + cp a, #0x2d + jreq 00109$ + ld a, xl + cp a, #0x2b + jrne 00110$ +00109$: +; ../strtol.c: 61: if (endptr) + ldw x, (0x10, sp) + jreq 00108$ +; ../strtol.c: 62: *endptr = nptr; + ldw x, (0x06, sp) + ldw y, (0x0e, sp) + ldw (x), y +00108$: +; ../strtol.c: 63: return (0); + clrw x + clrw y + jp 00129$ +00110$: +; ../strtol.c: 66: u = strtoul(ptr, &rptr, base); + ldw x, sp + incw x + ldw y, (0x12, sp) + pushw y + pushw x + ldw x, (0x07, sp) + pushw x + call _strtoul + addw sp, #6 + ldw (0x0a, sp), x + ldw (0x08, sp), y +; ../strtol.c: 69: if (rptr == ptr) + ldw x, (0x01, sp) + cpw x, (0x03, sp) + jrne 00117$ +; ../strtol.c: 71: if (endptr) + ldw x, (0x10, sp) + jreq 00115$ +; ../strtol.c: 72: *endptr = nptr; + ldw x, (0x06, sp) + ldw y, (0x0e, sp) + ldw (x), y +00115$: +; ../strtol.c: 73: return (0); + clrw x + clrw y + jra 00129$ +00117$: +; ../strtol.c: 76: if (endptr) + ldw x, (0x10, sp) + jreq 00119$ +; ../strtol.c: 77: *endptr = rptr; + ldw x, (0x06, sp) + ldw y, (0x01, sp) + ldw (x), y +00119$: +; ../strtol.c: 80: if (!neg && u > LONG_MAX) + tnz (0x05, sp) + jrne 00124$ + clrw x + decw x + cpw x, (0x0a, sp) + ld a, #0xff + sbc a, (0x09, sp) + ld a, #0x7f + sbc a, (0x08, sp) + jrnc 00124$ +; ../strtol.c: 82: errno = ERANGE; + ldw x, #0x0022 + ldw _errno+0, x +; ../strtol.c: 83: return (LONG_MAX); + clrw x + decw x + ldw y, #0x7fff + jra 00129$ +00124$: +; ../strtol.c: 85: else if (neg && u > -LONG_MIN) + tnz (0x05, sp) + jreq 00125$ + clrw x + cpw x, (0x0a, sp) + clr a + sbc a, (0x09, sp) + ld a, #0x80 + sbc a, (0x08, sp) + jrnc 00125$ +; ../strtol.c: 87: errno = ERANGE; + ldw x, #0x0022 + ldw _errno+0, x +; ../strtol.c: 88: return (LONG_MIN); + clrw x + ldw y, #0x8000 + jra 00129$ +00125$: +; ../strtol.c: 91: return (neg ? -u : u); + tnz (0x05, sp) + jreq 00137$ + ldw y, (0x0a, sp) + negw y + ldw x, (0x08, sp) + jrnc 00258$ + incw x +00258$: + negw x + ldw (0x0a, sp), y + ldw (0x08, sp), x +00137$: + ldw x, (0x0a, sp) + ldw y, (0x08, sp) +00129$: +; ../strtol.c: 92: } + addw sp, #11 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/strtol.lst b/device/lib/stm8/strtol.lst new file mode 100644 index 0000000..8463ee6 --- /dev/null +++ b/device/lib/stm8/strtol.lst @@ -0,0 +1,224 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module strtol + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strtoul + 12 .globl _strtol + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../strtol.c: 38: long int strtol(const char *nptr, char **endptr, int base) + 51 ; ----------------------------------------- + 52 ; function strtol + 53 ; ----------------------------------------- + 000000 54 _strtol: + 000000 52 0B [ 2] 55 sub sp, #11 + 56 ; ../strtol.c: 40: const char *ptr = nptr; + 000002 16 0E [ 2] 57 ldw y, (0x0e, sp) + 58 ; ../strtol.c: 45: while (isblank (*ptr)) + 000004 59 00101$: + 000004 90 F6 [ 1] 60 ld a, (y) + 000006 6B 09 [ 1] 61 ld (0x09, sp), a + 62 ; ../strtol.c: 46: ptr++; + 000008 93 [ 1] 63 ldw x, y + 000009 5C [ 1] 64 incw x + 00000A 1F 0A [ 2] 65 ldw (0x0a, sp), x + 66 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + 00000C A1 20 [ 1] 67 cp a, #0x20 + 00000E 27 04 [ 1] 68 jreq 00132$ + 000010 A1 09 [ 1] 69 cp a, #0x09 + 000012 26 04 [ 1] 70 jrne 00158$ + 000014 71 00132$: + 72 ; ../strtol.c: 46: ptr++; + 000014 16 0A [ 2] 73 ldw y, (0x0a, sp) + 000016 20 EC [ 2] 74 jra 00101$ + 000018 75 00158$: + 000018 17 03 [ 2] 76 ldw (0x03, sp), y + 77 ; ../strtol.c: 50: if (*ptr == '-') + 00001A 7B 09 [ 1] 78 ld a, (0x09, sp) + 79 ; ../strtol.c: 52: neg = true; + 00001C A0 2D [ 1] 80 sub a, #0x2d + 00001E 26 08 [ 1] 81 jrne 00105$ + 000020 4C [ 1] 82 inc a + 000021 6B 05 [ 1] 83 ld (0x05, sp), a + 84 ; ../strtol.c: 53: ptr++; + 000023 16 0A [ 2] 85 ldw y, (0x0a, sp) + 000025 17 03 [ 2] 86 ldw (0x03, sp), y + 87 ; ../strtol.c: 56: neg = false; + 000027 C5 88 .byte 0xc5 + 000028 89 00105$: + 000028 0F 05 [ 1] 90 clr (0x05, sp) + 00002A 91 00106$: + 92 ; ../strtol.c: 62: *endptr = nptr; + 00002A 16 10 [ 2] 93 ldw y, (0x10, sp) + 00002C 17 06 [ 2] 94 ldw (0x06, sp), y + 95 ; ../strtol.c: 59: if (neg && (isblank (*ptr) || *ptr == '-' || *ptr == '+')) + 00002E 0D 05 [ 1] 96 tnz (0x05, sp) + 000030 27 25 [ 1] 97 jreq 00110$ + 000032 1E 03 [ 2] 98 ldw x, (0x03, sp) + 000034 F6 [ 1] 99 ld a, (x) + 000035 97 [ 1] 100 ld xl, a + 101 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + 000036 A1 20 [ 1] 102 cp a, #0x20 + 000038 27 0E [ 1] 103 jreq 00109$ + 00003A A1 09 [ 1] 104 cp a, #0x09 + 00003C 27 0A [ 1] 105 jreq 00109$ + 106 ; ../strtol.c: 59: if (neg && (isblank (*ptr) || *ptr == '-' || *ptr == '+')) + 00003E 9F [ 1] 107 ld a, xl + 00003F A1 2D [ 1] 108 cp a, #0x2d + 000041 27 05 [ 1] 109 jreq 00109$ + 000043 9F [ 1] 110 ld a, xl + 000044 A1 2B [ 1] 111 cp a, #0x2b + 000046 26 0F [ 1] 112 jrne 00110$ + 000048 113 00109$: + 114 ; ../strtol.c: 61: if (endptr) + 000048 1E 10 [ 2] 115 ldw x, (0x10, sp) + 00004A 27 05 [ 1] 116 jreq 00108$ + 117 ; ../strtol.c: 62: *endptr = nptr; + 00004C 1E 06 [ 2] 118 ldw x, (0x06, sp) + 00004E 16 0E [ 2] 119 ldw y, (0x0e, sp) + 000050 FF [ 2] 120 ldw (x), y + 000051 121 00108$: + 122 ; ../strtol.c: 63: return (0); + 000051 5F [ 1] 123 clrw x + 000052 90 5F [ 1] 124 clrw y + 000054 CCr00rDA [ 2] 125 jp 00129$ + 000057 126 00110$: + 127 ; ../strtol.c: 66: u = strtoul(ptr, &rptr, base); + 000057 96 [ 1] 128 ldw x, sp + 000058 5C [ 1] 129 incw x + 000059 16 12 [ 2] 130 ldw y, (0x12, sp) + 00005B 90 89 [ 2] 131 pushw y + 00005D 89 [ 2] 132 pushw x + 00005E 1E 07 [ 2] 133 ldw x, (0x07, sp) + 000060 89 [ 2] 134 pushw x + 000061 CDr00r00 [ 4] 135 call _strtoul + 000064 5B 06 [ 2] 136 addw sp, #6 + 000066 1F 0A [ 2] 137 ldw (0x0a, sp), x + 000068 17 08 [ 2] 138 ldw (0x08, sp), y + 139 ; ../strtol.c: 69: if (rptr == ptr) + 00006A 1E 01 [ 2] 140 ldw x, (0x01, sp) + 00006C 13 03 [ 2] 141 cpw x, (0x03, sp) + 00006E 26 0E [ 1] 142 jrne 00117$ + 143 ; ../strtol.c: 71: if (endptr) + 000070 1E 10 [ 2] 144 ldw x, (0x10, sp) + 000072 27 05 [ 1] 145 jreq 00115$ + 146 ; ../strtol.c: 72: *endptr = nptr; + 000074 1E 06 [ 2] 147 ldw x, (0x06, sp) + 000076 16 0E [ 2] 148 ldw y, (0x0e, sp) + 000078 FF [ 2] 149 ldw (x), y + 000079 150 00115$: + 151 ; ../strtol.c: 73: return (0); + 000079 5F [ 1] 152 clrw x + 00007A 90 5F [ 1] 153 clrw y + 00007C 20 5C [ 2] 154 jra 00129$ + 00007E 155 00117$: + 156 ; ../strtol.c: 76: if (endptr) + 00007E 1E 10 [ 2] 157 ldw x, (0x10, sp) + 000080 27 05 [ 1] 158 jreq 00119$ + 159 ; ../strtol.c: 77: *endptr = rptr; + 000082 1E 06 [ 2] 160 ldw x, (0x06, sp) + 000084 16 01 [ 2] 161 ldw y, (0x01, sp) + 000086 FF [ 2] 162 ldw (x), y + 000087 163 00119$: + 164 ; ../strtol.c: 80: if (!neg && u > LONG_MAX) + 000087 0D 05 [ 1] 165 tnz (0x05, sp) + 000089 26 1C [ 1] 166 jrne 00124$ + 00008B 5F [ 1] 167 clrw x + 00008C 5A [ 2] 168 decw x + 00008D 13 0A [ 2] 169 cpw x, (0x0a, sp) + 00008F A6 FF [ 1] 170 ld a, #0xff + 000091 12 09 [ 1] 171 sbc a, (0x09, sp) + 000093 A6 7F [ 1] 172 ld a, #0x7f + 000095 12 08 [ 1] 173 sbc a, (0x08, sp) + 000097 24 0E [ 1] 174 jrnc 00124$ + 175 ; ../strtol.c: 82: errno = ERANGE; + 000099 AE 00 22 [ 2] 176 ldw x, #0x0022 + 00009C CFu00u00 [ 2] 177 ldw _errno+0, x + 178 ; ../strtol.c: 83: return (LONG_MAX); + 00009F 5F [ 1] 179 clrw x + 0000A0 5A [ 2] 180 decw x + 0000A1 90 AE 7F FF [ 2] 181 ldw y, #0x7fff + 0000A5 20 33 [ 2] 182 jra 00129$ + 0000A7 183 00124$: + 184 ; ../strtol.c: 85: else if (neg && u > -LONG_MIN) + 0000A7 0D 05 [ 1] 185 tnz (0x05, sp) + 0000A9 27 19 [ 1] 186 jreq 00125$ + 0000AB 5F [ 1] 187 clrw x + 0000AC 13 0A [ 2] 188 cpw x, (0x0a, sp) + 0000AE 4F [ 1] 189 clr a + 0000AF 12 09 [ 1] 190 sbc a, (0x09, sp) + 0000B1 A6 80 [ 1] 191 ld a, #0x80 + 0000B3 12 08 [ 1] 192 sbc a, (0x08, sp) + 0000B5 24 0D [ 1] 193 jrnc 00125$ + 194 ; ../strtol.c: 87: errno = ERANGE; + 0000B7 AE 00 22 [ 2] 195 ldw x, #0x0022 + 0000BA CFu00u00 [ 2] 196 ldw _errno+0, x + 197 ; ../strtol.c: 88: return (LONG_MIN); + 0000BD 5F [ 1] 198 clrw x + 0000BE 90 AE 80 00 [ 2] 199 ldw y, #0x8000 + 0000C2 20 16 [ 2] 200 jra 00129$ + 0000C4 201 00125$: + 202 ; ../strtol.c: 91: return (neg ? -u : u); + 0000C4 0D 05 [ 1] 203 tnz (0x05, sp) + 0000C6 27 0E [ 1] 204 jreq 00137$ + 0000C8 16 0A [ 2] 205 ldw y, (0x0a, sp) + 0000CA 90 50 [ 2] 206 negw y + 0000CC 1E 08 [ 2] 207 ldw x, (0x08, sp) + 0000CE 24 01 [ 1] 208 jrnc 00258$ + 0000D0 5C [ 1] 209 incw x + 0000D1 210 00258$: + 0000D1 50 [ 2] 211 negw x + 0000D2 17 0A [ 2] 212 ldw (0x0a, sp), y + 0000D4 1F 08 [ 2] 213 ldw (0x08, sp), x + 0000D6 214 00137$: + 0000D6 1E 0A [ 2] 215 ldw x, (0x0a, sp) + 0000D8 16 08 [ 2] 216 ldw y, (0x08, sp) + 0000DA 217 00129$: + 218 ; ../strtol.c: 92: } + 0000DA 5B 0B [ 2] 219 addw sp, #11 + 0000DC 81 [ 4] 220 ret + 221 .area CODE + 222 .area CONST + 223 .area INITIALIZER + 224 .area CABS (ABS) diff --git a/device/lib/stm8/strtol.rel b/device/lib/stm8/strtol.rel new file mode 100644 index 0000000..b544b8e --- /dev/null +++ b/device/lib/stm8/strtol.rel @@ -0,0 +1,107 @@ +XH3 +H B areas 4 global symbols +M strtol +O -mstm8 +S _errno Ref000000 +S .__.ABS. Def000000 +S _strtoul Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size DD flags 0 addr 0 +S _strtol Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0B 16 0E +R 00 00 00 09 +T 00 00 04 +R 00 00 00 09 +T 00 00 04 90 F6 6B 09 93 5C 1F 0A A1 20 27 04 A1 +R 00 00 00 09 +T 00 00 11 09 26 04 +R 00 00 00 09 +T 00 00 14 +R 00 00 00 09 +T 00 00 14 16 0A 20 EC +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 17 03 7B 09 A0 2D 26 08 4C 6B 05 16 0A +R 00 00 00 09 +T 00 00 25 17 03 C5 +R 00 00 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 0F 05 +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 16 10 17 06 0D 05 27 25 1E 03 F6 97 A1 +R 00 00 00 09 +T 00 00 37 20 27 0E A1 09 27 0A 9F A1 2D 27 05 9F +R 00 00 00 09 +T 00 00 44 A1 2B 26 0F +R 00 00 00 09 +T 00 00 48 +R 00 00 00 09 +T 00 00 48 1E 10 27 05 1E 06 16 0E FF +R 00 00 00 09 +T 00 00 51 +R 00 00 00 09 +T 00 00 51 5F 90 5F CC 00 DA +R 00 00 00 09 00 07 00 09 +T 00 00 57 +R 00 00 00 09 +T 00 00 57 96 5C 16 12 90 89 89 1E 07 89 CD 00 00 +R 00 00 00 09 02 0E 00 02 +T 00 00 64 5B 06 1F 0A 17 08 1E 01 13 03 26 0E 1E +R 00 00 00 09 +T 00 00 71 10 27 05 1E 06 16 0E FF +R 00 00 00 09 +T 00 00 79 +R 00 00 00 09 +T 00 00 79 5F 90 5F 20 5C +R 00 00 00 09 +T 00 00 7E +R 00 00 00 09 +T 00 00 7E 1E 10 27 05 1E 06 16 01 FF +R 00 00 00 09 +T 00 00 87 +R 00 00 00 09 +T 00 00 87 0D 05 26 1C 5F 5A 13 0A A6 FF 12 09 A6 +R 00 00 00 09 +T 00 00 94 7F 12 08 24 0E AE 00 22 CF 00 00 5F 5A +R 00 00 00 09 12 0C 00 00 +T 00 00 A1 90 AE 7F FF 20 33 +R 00 00 00 09 +T 00 00 A7 +R 00 00 00 09 +T 00 00 A7 0D 05 27 19 5F 13 0A 4F 12 09 A6 80 12 +R 00 00 00 09 +T 00 00 B4 08 24 0D AE 00 22 CF 00 00 5F 90 AE +R 00 00 00 09 12 0A 00 00 +T 00 00 C0 80 00 20 16 +R 00 00 00 09 +T 00 00 C4 +R 00 00 00 09 +T 00 00 C4 0D 05 27 0E 16 0A 90 50 1E 08 24 01 5C +R 00 00 00 09 +T 00 00 D1 +R 00 00 00 09 +T 00 00 D1 50 17 0A 1F 08 +R 00 00 00 09 +T 00 00 D6 +R 00 00 00 09 +T 00 00 D6 1E 0A 16 08 +R 00 00 00 09 +T 00 00 DA +R 00 00 00 09 +T 00 00 DA 5B 0B 81 +R 00 00 00 09 diff --git a/device/lib/stm8/strtol.sym b/device/lib/stm8/strtol.sym new file mode 100644 index 0000000..357f733 --- /dev/null +++ b/device/lib/stm8/strtol.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _errno ****** GX + 9 _strtol 000000 GR + _strtoul ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size DD flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/strtoul.asm b/device/lib/stm8/strtoul.asm new file mode 100644 index 0000000..763a73c --- /dev/null +++ b/device/lib/stm8/strtoul.asm @@ -0,0 +1,402 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module strtoul + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strncmp + .globl _strtoul +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../strtoul.c: 37: static signed char _isdigit(const char c, unsigned char base) +; ----------------------------------------- +; function _isdigit +; ----------------------------------------- +__isdigit: +; ../strtoul.c: 42: v = c - '0'; +; ../strtoul.c: 41: if (c >= '0' && c <= '9') + ld a, (0x03, sp) + ld xl, a + cp a, #0x30 + jrc 00110$ + ld a, (0x03, sp) + cp a, #0x39 + jrugt 00110$ +; ../strtoul.c: 42: v = c - '0'; + ld a, xl + sub a, #0x30 + jra 00111$ +00110$: +; ../strtoul.c: 43: else if (c >= 'a' && c <='z') + ld a, (0x03, sp) + cp a, #0x61 + jrc 00106$ + cp a, #0x7a + jrugt 00106$ +; ../strtoul.c: 44: v = c - 'a' + 10; + ld a, xl + add a, #0xa9 + jra 00111$ +00106$: +; ../strtoul.c: 45: else if (c >= 'A' && c <='Z') + ld a, (0x03, sp) + cp a, #0x41 + jrc 00102$ + cp a, #0x5a + jrugt 00102$ +; ../strtoul.c: 46: v = c - 'A' + 10; + ld a, xl + add a, #0xc9 + jra 00111$ +00102$: +; ../strtoul.c: 48: return (-1); + ld a, #0xff + ret +00111$: +; ../strtoul.c: 50: if (v >= base) + cp a, (0x04, sp) + jrnc 00158$ + ret +00158$: +; ../strtoul.c: 51: return (-1); + ld a, #0xff +; ../strtoul.c: 53: return (v); +; ../strtoul.c: 54: } + ret +; ../strtoul.c: 56: unsigned long int strtoul(const char *nptr, char **endptr, int base) +; ----------------------------------------- +; function strtoul +; ----------------------------------------- +_strtoul: + sub sp, #20 +; ../strtoul.c: 58: const char *ptr = nptr; + ldw y, (0x17, sp) +; ../strtoul.c: 60: bool range_error = false; + clr (0x05, sp) +; ../strtoul.c: 61: bool neg = false; + clr (0x06, sp) +; ../strtoul.c: 63: while (isblank (*ptr)) +00101$: + ld a, (y) + ld xl, a +; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + cp a, #0x20 + jreq 00140$ + cp a, #0x09 + jrne 00163$ +00140$: +; ../strtoul.c: 64: ptr++; + incw y + jra 00101$ +00163$: + ldw (0x13, sp), y +; ../strtoul.c: 67: switch(*ptr) + ld a, xl + cp a, #0x2b + jreq 00105$ + ld a, xl +; ../strtoul.c: 70: neg = true; + sub a, #0x2d + jrne 00106$ + inc a + ld (0x06, sp), a +; ../strtoul.c: 71: case '+': +00105$: +; ../strtoul.c: 72: ptr++; + ldw x, (0x13, sp) + incw x + ldw (0x13, sp), x +; ../strtoul.c: 73: } +00106$: +; ../strtoul.c: 81: ptr += 2; + ldw x, (0x13, sp) + incw x + incw x + ldw (0x11, sp), x +; ../strtoul.c: 76: if (!base) + ldw x, (0x1b, sp) + jrne 00119$ +; ../strtoul.c: 78: if (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2)) + push #0x02 + push #0x00 + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + ldw x, (0x17, sp) + pushw x + call _strncmp + addw sp, #6 + tnzw x + jreq 00110$ + push #0x02 + push #0x00 + push #<(___str_1 + 0) + push #((___str_1 + 0) >> 8) + ldw x, (0x17, sp) + pushw x + call _strncmp + addw sp, #6 + tnzw x + jrne 00111$ +00110$: +; ../strtoul.c: 80: base = 16; + ldw x, #0x0010 + ldw (0x1b, sp), x +; ../strtoul.c: 81: ptr += 2; + ldw y, (0x11, sp) + ldw (0x13, sp), y + jra 00120$ +00111$: +; ../strtoul.c: 83: else if (*ptr == '0') + ldw x, (0x13, sp) + ld a, (x) + cp a, #0x30 + jrne 00108$ +; ../strtoul.c: 85: base = 8; + ldw x, #0x0008 + ldw (0x1b, sp), x +; ../strtoul.c: 86: ptr++; + ldw x, (0x13, sp) + incw x + ldw (0x13, sp), x + jra 00120$ +00108$: +; ../strtoul.c: 89: base = 10; + ldw x, #0x000a + ldw (0x1b, sp), x + jra 00120$ +00119$: +; ../strtoul.c: 92: else if (base == 16 && (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2))) + ldw x, (0x1b, sp) + cpw x, #0x0010 + jrne 00120$ + push #0x02 + push #0x00 + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + ldw x, (0x17, sp) + pushw x + call _strncmp + addw sp, #6 + tnzw x + jreq 00114$ + push #0x02 + push #0x00 + push #<(___str_1 + 0) + push #((___str_1 + 0) >> 8) + ldw x, (0x17, sp) + pushw x + call _strncmp + addw sp, #6 + tnzw x + jrne 00120$ +00114$: +; ../strtoul.c: 93: ptr += 2; + ldw y, (0x11, sp) + ldw (0x13, sp), y +00120$: +; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0) + ld a, (0x1c, sp) + ld (0x07, sp), a + ldw x, (0x13, sp) + ld a, (x) + ld xl, a + ld a, (0x07, sp) + push a + ld a, xl + push a + call __isdigit + addw sp, #2 +; ../strtoul.c: 100: *endptr = (char*)nptr; + ldw y, (0x19, sp) + ldw (0x08, sp), y +; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0) + tnz a + jrpl 00124$ +; ../strtoul.c: 99: if (endptr) + ldw x, (0x19, sp) + jreq 00122$ +; ../strtoul.c: 100: *endptr = (char*)nptr; + ldw x, (0x08, sp) + ldw y, (0x17, sp) + ldw (x), y +00122$: +; ../strtoul.c: 101: return (0); + clrw x + clrw y + jp 00137$ +00124$: +; ../strtoul.c: 104: for (ret = 0;; ptr++) + clrw x + ldw (0x11, sp), x + ldw (0x0f, sp), x +00135$: +; ../strtoul.c: 107: signed char digit = _isdigit (*ptr, base); + ldw x, (0x13, sp) + ld a, (x) + ld xl, a + ld a, (0x07, sp) + push a + ld a, xl + push a + call __isdigit + addw sp, #2 +; ../strtoul.c: 109: if (digit < 0) + ld (0x0a, sp), a + jrmi 00129$ +; ../strtoul.c: 112: oldret = ret; + ldw y, (0x11, sp) + ldw (0x0d, sp), y + ldw y, (0x0f, sp) + ldw (0x0b, sp), y +; ../strtoul.c: 113: ret *= base; + ldw y, (0x1b, sp) + clrw x + tnzw y + jrpl 00261$ + decw x +00261$: + pushw y + pushw x + ldw x, (0x15, sp) + pushw x + ldw x, (0x15, sp) + pushw x + call __mullong + addw sp, #8 + ldw (0x11, sp), x + ldw (0x0f, sp), y +; ../strtoul.c: 114: if (ret < oldret) + ldw x, (0x11, sp) + cpw x, (0x0d, sp) + ld a, (0x10, sp) + sbc a, (0x0c, sp) + ld a, (0x0f, sp) + sbc a, (0x0b, sp) + jrnc 00128$ +; ../strtoul.c: 115: range_error = true; + ld a, #0x01 + ld (0x05, sp), a +00128$: +; ../strtoul.c: 117: ret += (unsigned char)digit; + ld a, (0x0a, sp) + ld (0x04, sp), a + clr (0x03, sp) + clr (0x02, sp) + clr (0x01, sp) + ldw x, (0x11, sp) + addw x, (0x03, sp) + ldw (0x0c, sp), x + ld a, (0x10, sp) + adc a, (0x02, sp) + ld (0x0b, sp), a + ld a, (0x0f, sp) + adc a, (0x01, sp) + ld (0x0a, sp), a + ldw y, (0x0c, sp) + ldw (0x11, sp), y + ldw y, (0x0a, sp) + ldw (0x0f, sp), y +; ../strtoul.c: 104: for (ret = 0;; ptr++) + ldw x, (0x13, sp) + incw x + ldw (0x13, sp), x + jra 00135$ +00129$: +; ../strtoul.c: 120: if (endptr) + ldw x, (0x19, sp) + jreq 00131$ +; ../strtoul.c: 121: *endptr = (char*)ptr; + ldw x, (0x08, sp) + ldw y, (0x13, sp) + ldw (x), y +00131$: +; ../strtoul.c: 123: if (range_error) + tnz (0x05, sp) + jreq 00133$ +; ../strtoul.c: 125: errno = ERANGE; + ldw x, #0x0022 + ldw _errno+0, x +; ../strtoul.c: 126: return (ULONG_MAX); + clrw x + decw x + ldw y, x + jra 00137$ +00133$: +; ../strtoul.c: 129: return (neg ? -ret : ret); + tnz (0x06, sp) + jreq 00142$ + ldw y, (0x11, sp) + negw y + ldw x, (0x0f, sp) + jrnc 00267$ + incw x +00267$: + negw x + ldw (0x0c, sp), y + ldw (0x0a, sp), x + jra 00143$ +00142$: + ldw y, (0x11, sp) + ldw (0x0c, sp), y + ldw y, (0x0f, sp) + ldw (0x0a, sp), y +00143$: + ldw x, (0x0c, sp) + ldw y, (0x0a, sp) +00137$: +; ../strtoul.c: 130: } + addw sp, #20 + ret + .area CODE + .area CONST + .area CONST +___str_0: + .ascii "0x" + .db 0x00 + .area CODE + .area CONST +___str_1: + .ascii "0X" + .db 0x00 + .area CODE + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/strtoul.lst b/device/lib/stm8/strtoul.lst new file mode 100644 index 0000000..7261f24 --- /dev/null +++ b/device/lib/stm8/strtoul.lst @@ -0,0 +1,402 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module strtoul + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strncmp + 12 .globl _strtoul + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../strtoul.c: 37: static signed char _isdigit(const char c, unsigned char base) + 51 ; ----------------------------------------- + 52 ; function _isdigit + 53 ; ----------------------------------------- + 000000 54 __isdigit: + 55 ; ../strtoul.c: 42: v = c - '0'; + 56 ; ../strtoul.c: 41: if (c >= '0' && c <= '9') + 000000 7B 03 [ 1] 57 ld a, (0x03, sp) + 000002 97 [ 1] 58 ld xl, a + 000003 A1 30 [ 1] 59 cp a, #0x30 + 000005 25 0B [ 1] 60 jrc 00110$ + 000007 7B 03 [ 1] 61 ld a, (0x03, sp) + 000009 A1 39 [ 1] 62 cp a, #0x39 + 00000B 22 05 [ 1] 63 jrugt 00110$ + 64 ; ../strtoul.c: 42: v = c - '0'; + 00000D 9F [ 1] 65 ld a, xl + 00000E A0 30 [ 1] 66 sub a, #0x30 + 000010 20 21 [ 2] 67 jra 00111$ + 000012 68 00110$: + 69 ; ../strtoul.c: 43: else if (c >= 'a' && c <='z') + 000012 7B 03 [ 1] 70 ld a, (0x03, sp) + 000014 A1 61 [ 1] 71 cp a, #0x61 + 000016 25 09 [ 1] 72 jrc 00106$ + 000018 A1 7A [ 1] 73 cp a, #0x7a + 00001A 22 05 [ 1] 74 jrugt 00106$ + 75 ; ../strtoul.c: 44: v = c - 'a' + 10; + 00001C 9F [ 1] 76 ld a, xl + 00001D AB A9 [ 1] 77 add a, #0xa9 + 00001F 20 12 [ 2] 78 jra 00111$ + 000021 79 00106$: + 80 ; ../strtoul.c: 45: else if (c >= 'A' && c <='Z') + 000021 7B 03 [ 1] 81 ld a, (0x03, sp) + 000023 A1 41 [ 1] 82 cp a, #0x41 + 000025 25 09 [ 1] 83 jrc 00102$ + 000027 A1 5A [ 1] 84 cp a, #0x5a + 000029 22 05 [ 1] 85 jrugt 00102$ + 86 ; ../strtoul.c: 46: v = c - 'A' + 10; + 00002B 9F [ 1] 87 ld a, xl + 00002C AB C9 [ 1] 88 add a, #0xc9 + 00002E 20 03 [ 2] 89 jra 00111$ + 000030 90 00102$: + 91 ; ../strtoul.c: 48: return (-1); + 000030 A6 FF [ 1] 92 ld a, #0xff + 000032 81 [ 4] 93 ret + 000033 94 00111$: + 95 ; ../strtoul.c: 50: if (v >= base) + 000033 11 04 [ 1] 96 cp a, (0x04, sp) + 000035 24 01 [ 1] 97 jrnc 00158$ + 000037 81 [ 4] 98 ret + 000038 99 00158$: + 100 ; ../strtoul.c: 51: return (-1); + 000038 A6 FF [ 1] 101 ld a, #0xff + 102 ; ../strtoul.c: 53: return (v); + 103 ; ../strtoul.c: 54: } + 00003A 81 [ 4] 104 ret + 105 ; ../strtoul.c: 56: unsigned long int strtoul(const char *nptr, char **endptr, int base) + 106 ; ----------------------------------------- + 107 ; function strtoul + 108 ; ----------------------------------------- + 00003B 109 _strtoul: + 00003B 52 14 [ 2] 110 sub sp, #20 + 111 ; ../strtoul.c: 58: const char *ptr = nptr; + 00003D 16 17 [ 2] 112 ldw y, (0x17, sp) + 113 ; ../strtoul.c: 60: bool range_error = false; + 00003F 0F 05 [ 1] 114 clr (0x05, sp) + 115 ; ../strtoul.c: 61: bool neg = false; + 000041 0F 06 [ 1] 116 clr (0x06, sp) + 117 ; ../strtoul.c: 63: while (isblank (*ptr)) + 000043 118 00101$: + 000043 90 F6 [ 1] 119 ld a, (y) + 000045 97 [ 1] 120 ld xl, a + 121 ; ./../../include/ctype.h: 53: return ((unsigned char)c == ' ' || (unsigned char)c == '\t'); + 000046 A1 20 [ 1] 122 cp a, #0x20 + 000048 27 04 [ 1] 123 jreq 00140$ + 00004A A1 09 [ 1] 124 cp a, #0x09 + 00004C 26 04 [ 1] 125 jrne 00163$ + 00004E 126 00140$: + 127 ; ../strtoul.c: 64: ptr++; + 00004E 90 5C [ 1] 128 incw y + 000050 20 F1 [ 2] 129 jra 00101$ + 000052 130 00163$: + 000052 17 13 [ 2] 131 ldw (0x13, sp), y + 132 ; ../strtoul.c: 67: switch(*ptr) + 000054 9F [ 1] 133 ld a, xl + 000055 A1 2B [ 1] 134 cp a, #0x2b + 000057 27 08 [ 1] 135 jreq 00105$ + 000059 9F [ 1] 136 ld a, xl + 137 ; ../strtoul.c: 70: neg = true; + 00005A A0 2D [ 1] 138 sub a, #0x2d + 00005C 26 08 [ 1] 139 jrne 00106$ + 00005E 4C [ 1] 140 inc a + 00005F 6B 06 [ 1] 141 ld (0x06, sp), a + 142 ; ../strtoul.c: 71: case '+': + 000061 143 00105$: + 144 ; ../strtoul.c: 72: ptr++; + 000061 1E 13 [ 2] 145 ldw x, (0x13, sp) + 000063 5C [ 1] 146 incw x + 000064 1F 13 [ 2] 147 ldw (0x13, sp), x + 148 ; ../strtoul.c: 73: } + 000066 149 00106$: + 150 ; ../strtoul.c: 81: ptr += 2; + 000066 1E 13 [ 2] 151 ldw x, (0x13, sp) + 000068 5C [ 1] 152 incw x + 000069 5C [ 1] 153 incw x + 00006A 1F 11 [ 2] 154 ldw (0x11, sp), x + 155 ; ../strtoul.c: 76: if (!base) + 00006C 1E 1B [ 2] 156 ldw x, (0x1b, sp) + 00006E 26 4B [ 1] 157 jrne 00119$ + 158 ; ../strtoul.c: 78: if (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2)) + 000070 4B 02 [ 1] 159 push #0x02 + 000072 4B 00 [ 1] 160 push #0x00 + 000074 4Br00 [ 1] 161 push #<(___str_0 + 0) + 000076 4Bs00 [ 1] 162 push #((___str_0 + 0) >> 8) + 000078 1E 17 [ 2] 163 ldw x, (0x17, sp) + 00007A 89 [ 2] 164 pushw x + 00007B CDr00r00 [ 4] 165 call _strncmp + 00007E 5B 06 [ 2] 166 addw sp, #6 + 000080 5D [ 2] 167 tnzw x + 000081 27 13 [ 1] 168 jreq 00110$ + 000083 4B 02 [ 1] 169 push #0x02 + 000085 4B 00 [ 1] 170 push #0x00 + 000087 4Br03 [ 1] 171 push #<(___str_1 + 0) + 000089 4Bs00 [ 1] 172 push #((___str_1 + 0) >> 8) + 00008B 1E 17 [ 2] 173 ldw x, (0x17, sp) + 00008D 89 [ 2] 174 pushw x + 00008E CDr00r00 [ 4] 175 call _strncmp + 000091 5B 06 [ 2] 176 addw sp, #6 + 000093 5D [ 2] 177 tnzw x + 000094 26 0B [ 1] 178 jrne 00111$ + 000096 179 00110$: + 180 ; ../strtoul.c: 80: base = 16; + 000096 AE 00 10 [ 2] 181 ldw x, #0x0010 + 000099 1F 1B [ 2] 182 ldw (0x1b, sp), x + 183 ; ../strtoul.c: 81: ptr += 2; + 00009B 16 11 [ 2] 184 ldw y, (0x11, sp) + 00009D 17 13 [ 2] 185 ldw (0x13, sp), y + 00009F 20 4B [ 2] 186 jra 00120$ + 0000A1 187 00111$: + 188 ; ../strtoul.c: 83: else if (*ptr == '0') + 0000A1 1E 13 [ 2] 189 ldw x, (0x13, sp) + 0000A3 F6 [ 1] 190 ld a, (x) + 0000A4 A1 30 [ 1] 191 cp a, #0x30 + 0000A6 26 0C [ 1] 192 jrne 00108$ + 193 ; ../strtoul.c: 85: base = 8; + 0000A8 AE 00 08 [ 2] 194 ldw x, #0x0008 + 0000AB 1F 1B [ 2] 195 ldw (0x1b, sp), x + 196 ; ../strtoul.c: 86: ptr++; + 0000AD 1E 13 [ 2] 197 ldw x, (0x13, sp) + 0000AF 5C [ 1] 198 incw x + 0000B0 1F 13 [ 2] 199 ldw (0x13, sp), x + 0000B2 20 38 [ 2] 200 jra 00120$ + 0000B4 201 00108$: + 202 ; ../strtoul.c: 89: base = 10; + 0000B4 AE 00 0A [ 2] 203 ldw x, #0x000a + 0000B7 1F 1B [ 2] 204 ldw (0x1b, sp), x + 0000B9 20 31 [ 2] 205 jra 00120$ + 0000BB 206 00119$: + 207 ; ../strtoul.c: 92: else if (base == 16 && (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2))) + 0000BB 1E 1B [ 2] 208 ldw x, (0x1b, sp) + 0000BD A3 00 10 [ 2] 209 cpw x, #0x0010 + 0000C0 26 2A [ 1] 210 jrne 00120$ + 0000C2 4B 02 [ 1] 211 push #0x02 + 0000C4 4B 00 [ 1] 212 push #0x00 + 0000C6 4Br00 [ 1] 213 push #<(___str_0 + 0) + 0000C8 4Bs00 [ 1] 214 push #((___str_0 + 0) >> 8) + 0000CA 1E 17 [ 2] 215 ldw x, (0x17, sp) + 0000CC 89 [ 2] 216 pushw x + 0000CD CDr00r00 [ 4] 217 call _strncmp + 0000D0 5B 06 [ 2] 218 addw sp, #6 + 0000D2 5D [ 2] 219 tnzw x + 0000D3 27 13 [ 1] 220 jreq 00114$ + 0000D5 4B 02 [ 1] 221 push #0x02 + 0000D7 4B 00 [ 1] 222 push #0x00 + 0000D9 4Br03 [ 1] 223 push #<(___str_1 + 0) + 0000DB 4Bs00 [ 1] 224 push #((___str_1 + 0) >> 8) + 0000DD 1E 17 [ 2] 225 ldw x, (0x17, sp) + 0000DF 89 [ 2] 226 pushw x + 0000E0 CDr00r00 [ 4] 227 call _strncmp + 0000E3 5B 06 [ 2] 228 addw sp, #6 + 0000E5 5D [ 2] 229 tnzw x + 0000E6 26 04 [ 1] 230 jrne 00120$ + 0000E8 231 00114$: + 232 ; ../strtoul.c: 93: ptr += 2; + 0000E8 16 11 [ 2] 233 ldw y, (0x11, sp) + 0000EA 17 13 [ 2] 234 ldw (0x13, sp), y + 0000EC 235 00120$: + 236 ; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0) + 0000EC 7B 1C [ 1] 237 ld a, (0x1c, sp) + 0000EE 6B 07 [ 1] 238 ld (0x07, sp), a + 0000F0 1E 13 [ 2] 239 ldw x, (0x13, sp) + 0000F2 F6 [ 1] 240 ld a, (x) + 0000F3 97 [ 1] 241 ld xl, a + 0000F4 7B 07 [ 1] 242 ld a, (0x07, sp) + 0000F6 88 [ 1] 243 push a + 0000F7 9F [ 1] 244 ld a, xl + 0000F8 88 [ 1] 245 push a + 0000F9 CDr00r00 [ 4] 246 call __isdigit + 0000FC 5B 02 [ 2] 247 addw sp, #2 + 248 ; ../strtoul.c: 100: *endptr = (char*)nptr; + 0000FE 16 19 [ 2] 249 ldw y, (0x19, sp) + 000100 17 08 [ 2] 250 ldw (0x08, sp), y + 251 ; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0) + 000102 4D [ 1] 252 tnz a + 000103 2A 0F [ 1] 253 jrpl 00124$ + 254 ; ../strtoul.c: 99: if (endptr) + 000105 1E 19 [ 2] 255 ldw x, (0x19, sp) + 000107 27 05 [ 1] 256 jreq 00122$ + 257 ; ../strtoul.c: 100: *endptr = (char*)nptr; + 000109 1E 08 [ 2] 258 ldw x, (0x08, sp) + 00010B 16 17 [ 2] 259 ldw y, (0x17, sp) + 00010D FF [ 2] 260 ldw (x), y + 00010E 261 00122$: + 262 ; ../strtoul.c: 101: return (0); + 00010E 5F [ 1] 263 clrw x + 00010F 90 5F [ 1] 264 clrw y + 000111 CCr01rC4 [ 2] 265 jp 00137$ + 000114 266 00124$: + 267 ; ../strtoul.c: 104: for (ret = 0;; ptr++) + 000114 5F [ 1] 268 clrw x + 000115 1F 11 [ 2] 269 ldw (0x11, sp), x + 000117 1F 0F [ 2] 270 ldw (0x0f, sp), x + 000119 271 00135$: + 272 ; ../strtoul.c: 107: signed char digit = _isdigit (*ptr, base); + 000119 1E 13 [ 2] 273 ldw x, (0x13, sp) + 00011B F6 [ 1] 274 ld a, (x) + 00011C 97 [ 1] 275 ld xl, a + 00011D 7B 07 [ 1] 276 ld a, (0x07, sp) + 00011F 88 [ 1] 277 push a + 000120 9F [ 1] 278 ld a, xl + 000121 88 [ 1] 279 push a + 000122 CDr00r00 [ 4] 280 call __isdigit + 000125 5B 02 [ 2] 281 addw sp, #2 + 282 ; ../strtoul.c: 109: if (digit < 0) + 000127 6B 0A [ 1] 283 ld (0x0a, sp), a + 000129 2B 60 [ 1] 284 jrmi 00129$ + 285 ; ../strtoul.c: 112: oldret = ret; + 00012B 16 11 [ 2] 286 ldw y, (0x11, sp) + 00012D 17 0D [ 2] 287 ldw (0x0d, sp), y + 00012F 16 0F [ 2] 288 ldw y, (0x0f, sp) + 000131 17 0B [ 2] 289 ldw (0x0b, sp), y + 290 ; ../strtoul.c: 113: ret *= base; + 000133 16 1B [ 2] 291 ldw y, (0x1b, sp) + 000135 5F [ 1] 292 clrw x + 000136 90 5D [ 2] 293 tnzw y + 000138 2A 01 [ 1] 294 jrpl 00261$ + 00013A 5A [ 2] 295 decw x + 00013B 296 00261$: + 00013B 90 89 [ 2] 297 pushw y + 00013D 89 [ 2] 298 pushw x + 00013E 1E 15 [ 2] 299 ldw x, (0x15, sp) + 000140 89 [ 2] 300 pushw x + 000141 1E 15 [ 2] 301 ldw x, (0x15, sp) + 000143 89 [ 2] 302 pushw x + 000144 CDr00r00 [ 4] 303 call __mullong + 000147 5B 08 [ 2] 304 addw sp, #8 + 000149 1F 11 [ 2] 305 ldw (0x11, sp), x + 00014B 17 0F [ 2] 306 ldw (0x0f, sp), y + 307 ; ../strtoul.c: 114: if (ret < oldret) + 00014D 1E 11 [ 2] 308 ldw x, (0x11, sp) + 00014F 13 0D [ 2] 309 cpw x, (0x0d, sp) + 000151 7B 10 [ 1] 310 ld a, (0x10, sp) + 000153 12 0C [ 1] 311 sbc a, (0x0c, sp) + 000155 7B 0F [ 1] 312 ld a, (0x0f, sp) + 000157 12 0B [ 1] 313 sbc a, (0x0b, sp) + 000159 24 04 [ 1] 314 jrnc 00128$ + 315 ; ../strtoul.c: 115: range_error = true; + 00015B A6 01 [ 1] 316 ld a, #0x01 + 00015D 6B 05 [ 1] 317 ld (0x05, sp), a + 00015F 318 00128$: + 319 ; ../strtoul.c: 117: ret += (unsigned char)digit; + 00015F 7B 0A [ 1] 320 ld a, (0x0a, sp) + 000161 6B 04 [ 1] 321 ld (0x04, sp), a + 000163 0F 03 [ 1] 322 clr (0x03, sp) + 000165 0F 02 [ 1] 323 clr (0x02, sp) + 000167 0F 01 [ 1] 324 clr (0x01, sp) + 000169 1E 11 [ 2] 325 ldw x, (0x11, sp) + 00016B 72 FB 03 [ 2] 326 addw x, (0x03, sp) + 00016E 1F 0C [ 2] 327 ldw (0x0c, sp), x + 000170 7B 10 [ 1] 328 ld a, (0x10, sp) + 000172 19 02 [ 1] 329 adc a, (0x02, sp) + 000174 6B 0B [ 1] 330 ld (0x0b, sp), a + 000176 7B 0F [ 1] 331 ld a, (0x0f, sp) + 000178 19 01 [ 1] 332 adc a, (0x01, sp) + 00017A 6B 0A [ 1] 333 ld (0x0a, sp), a + 00017C 16 0C [ 2] 334 ldw y, (0x0c, sp) + 00017E 17 11 [ 2] 335 ldw (0x11, sp), y + 000180 16 0A [ 2] 336 ldw y, (0x0a, sp) + 000182 17 0F [ 2] 337 ldw (0x0f, sp), y + 338 ; ../strtoul.c: 104: for (ret = 0;; ptr++) + 000184 1E 13 [ 2] 339 ldw x, (0x13, sp) + 000186 5C [ 1] 340 incw x + 000187 1F 13 [ 2] 341 ldw (0x13, sp), x + 000189 20 8E [ 2] 342 jra 00135$ + 00018B 343 00129$: + 344 ; ../strtoul.c: 120: if (endptr) + 00018B 1E 19 [ 2] 345 ldw x, (0x19, sp) + 00018D 27 05 [ 1] 346 jreq 00131$ + 347 ; ../strtoul.c: 121: *endptr = (char*)ptr; + 00018F 1E 08 [ 2] 348 ldw x, (0x08, sp) + 000191 16 13 [ 2] 349 ldw y, (0x13, sp) + 000193 FF [ 2] 350 ldw (x), y + 000194 351 00131$: + 352 ; ../strtoul.c: 123: if (range_error) + 000194 0D 05 [ 1] 353 tnz (0x05, sp) + 000196 27 0C [ 1] 354 jreq 00133$ + 355 ; ../strtoul.c: 125: errno = ERANGE; + 000198 AE 00 22 [ 2] 356 ldw x, #0x0022 + 00019B CFu00u00 [ 2] 357 ldw _errno+0, x + 358 ; ../strtoul.c: 126: return (ULONG_MAX); + 00019E 5F [ 1] 359 clrw x + 00019F 5A [ 2] 360 decw x + 0001A0 90 93 [ 1] 361 ldw y, x + 0001A2 20 20 [ 2] 362 jra 00137$ + 0001A4 363 00133$: + 364 ; ../strtoul.c: 129: return (neg ? -ret : ret); + 0001A4 0D 06 [ 1] 365 tnz (0x06, sp) + 0001A6 27 10 [ 1] 366 jreq 00142$ + 0001A8 16 11 [ 2] 367 ldw y, (0x11, sp) + 0001AA 90 50 [ 2] 368 negw y + 0001AC 1E 0F [ 2] 369 ldw x, (0x0f, sp) + 0001AE 24 01 [ 1] 370 jrnc 00267$ + 0001B0 5C [ 1] 371 incw x + 0001B1 372 00267$: + 0001B1 50 [ 2] 373 negw x + 0001B2 17 0C [ 2] 374 ldw (0x0c, sp), y + 0001B4 1F 0A [ 2] 375 ldw (0x0a, sp), x + 0001B6 20 08 [ 2] 376 jra 00143$ + 0001B8 377 00142$: + 0001B8 16 11 [ 2] 378 ldw y, (0x11, sp) + 0001BA 17 0C [ 2] 379 ldw (0x0c, sp), y + 0001BC 16 0F [ 2] 380 ldw y, (0x0f, sp) + 0001BE 17 0A [ 2] 381 ldw (0x0a, sp), y + 0001C0 382 00143$: + 0001C0 1E 0C [ 2] 383 ldw x, (0x0c, sp) + 0001C2 16 0A [ 2] 384 ldw y, (0x0a, sp) + 0001C4 385 00137$: + 386 ; ../strtoul.c: 130: } + 0001C4 5B 14 [ 2] 387 addw sp, #20 + 0001C6 81 [ 4] 388 ret + 389 .area CODE + 390 .area CONST + 391 .area CONST + 000000 392 ___str_0: + 000000 30 78 393 .ascii "0x" + 000002 00 394 .db 0x00 + 395 .area CODE + 396 .area CONST + 000003 397 ___str_1: + 000003 30 58 398 .ascii "0X" + 000005 00 399 .db 0x00 + 400 .area CODE + 401 .area INITIALIZER + 402 .area CABS (ABS) diff --git a/device/lib/stm8/strtoul.rel b/device/lib/stm8/strtoul.rel new file mode 100644 index 0000000..d36c665 --- /dev/null +++ b/device/lib/stm8/strtoul.rel @@ -0,0 +1,194 @@ +XH3 +H B areas 5 global symbols +M strtoul +O -mstm8 +S _errno Ref000000 +S .__.ABS. Def000000 +S _strncmp Ref000000 +S __mullong Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 6 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1C7 flags 0 addr 0 +S _strtoul Def00003B +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 03 97 A1 30 25 0B 7B 03 A1 39 22 05 +R 00 00 00 09 +T 00 00 0D 9F A0 30 20 21 +R 00 00 00 09 +T 00 00 12 +R 00 00 00 09 +T 00 00 12 7B 03 A1 61 25 09 A1 7A 22 05 9F AB A9 +R 00 00 00 09 +T 00 00 1F 20 12 +R 00 00 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 7B 03 A1 41 25 09 A1 5A 22 05 9F AB C9 +R 00 00 00 09 +T 00 00 2E 20 03 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 A6 FF 81 +R 00 00 00 09 +T 00 00 33 +R 00 00 00 09 +T 00 00 33 11 04 24 01 81 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 A6 FF 81 +R 00 00 00 09 +T 00 00 3B +R 00 00 00 09 +T 00 00 3B 52 14 16 17 0F 05 0F 06 +R 00 00 00 09 +T 00 00 43 +R 00 00 00 09 +T 00 00 43 90 F6 97 A1 20 27 04 A1 09 26 04 +R 00 00 00 09 +T 00 00 4E +R 00 00 00 09 +T 00 00 4E 90 5C 20 F1 +R 00 00 00 09 +T 00 00 52 +R 00 00 00 09 +T 00 00 52 17 13 9F A1 2B 27 08 9F A0 2D 26 08 4C +R 00 00 00 09 +T 00 00 5F 6B 06 +R 00 00 00 09 +T 00 00 61 +R 00 00 00 09 +T 00 00 61 1E 13 5C 1F 13 +R 00 00 00 09 +T 00 00 66 +R 00 00 00 09 +T 00 00 66 1E 13 5C 5C 1F 11 1E 1B 26 4B 4B 02 4B +R 00 00 00 09 +T 00 00 73 00 4B 00 00 00 4B 00 00 00 1E 17 89 CD +R 00 00 00 09 F1 09 05 00 07 F1 81 09 00 07 +T 00 00 7C 00 00 5B 06 5D 27 13 4B 02 4B 00 4B +R 00 00 00 09 02 03 00 02 +T 00 00 88 00 00 03 4B 00 00 03 1E 17 89 CD +R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07 +T 00 00 8F 00 00 5B 06 5D 26 0B +R 00 00 00 09 02 03 00 02 +T 00 00 96 +R 00 00 00 09 +T 00 00 96 AE 00 10 1F 1B 16 11 17 13 20 4B +R 00 00 00 09 +T 00 00 A1 +R 00 00 00 09 +T 00 00 A1 1E 13 F6 A1 30 26 0C AE 00 08 1F 1B 1E +R 00 00 00 09 +T 00 00 AE 13 5C 1F 13 20 38 +R 00 00 00 09 +T 00 00 B4 +R 00 00 00 09 +T 00 00 B4 AE 00 0A 1F 1B 20 31 +R 00 00 00 09 +T 00 00 BB +R 00 00 00 09 +T 00 00 BB 1E 1B A3 00 10 26 2A 4B 02 4B 00 4B +R 00 00 00 09 +T 00 00 C7 00 00 00 4B 00 00 00 1E 17 89 CD +R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07 +T 00 00 CE 00 00 5B 06 5D 27 13 4B 02 4B 00 4B +R 00 00 00 09 02 03 00 02 +T 00 00 DA 00 00 03 4B 00 00 03 1E 17 89 CD +R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07 +T 00 00 E1 00 00 5B 06 5D 26 04 +R 00 00 00 09 02 03 00 02 +T 00 00 E8 +R 00 00 00 09 +T 00 00 E8 16 11 17 13 +R 00 00 00 09 +T 00 00 EC +R 00 00 00 09 +T 00 00 EC 7B 1C 6B 07 1E 13 F6 97 7B 07 88 9F 88 +R 00 00 00 09 +T 00 00 F9 CD 00 00 5B 02 16 19 17 08 4D 2A 0F 1E +R 00 00 00 09 00 04 00 09 +T 00 01 06 19 27 05 1E 08 16 17 FF +R 00 00 00 09 +T 00 01 0E +R 00 00 00 09 +T 00 01 0E 5F 90 5F CC 01 C4 +R 00 00 00 09 00 07 00 09 +T 00 01 14 +R 00 00 00 09 +T 00 01 14 5F 1F 11 1F 0F +R 00 00 00 09 +T 00 01 19 +R 00 00 00 09 +T 00 01 19 1E 13 F6 97 7B 07 88 9F 88 CD 00 00 5B +R 00 00 00 09 00 0D 00 09 +T 00 01 26 02 6B 0A 2B 60 16 11 17 0D 16 0F 17 0B +R 00 00 00 09 +T 00 01 33 16 1B 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 01 3B +R 00 00 00 09 +T 00 01 3B 90 89 89 1E 15 89 1E 15 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 03 +T 00 01 48 08 1F 11 17 0F 1E 11 13 0D 7B 10 12 0C +R 00 00 00 09 +T 00 01 55 7B 0F 12 0B 24 04 A6 01 6B 05 +R 00 00 00 09 +T 00 01 5F +R 00 00 00 09 +T 00 01 5F 7B 0A 6B 04 0F 03 0F 02 0F 01 1E 11 72 +R 00 00 00 09 +T 00 01 6C FB 03 1F 0C 7B 10 19 02 6B 0B 7B 0F 19 +R 00 00 00 09 +T 00 01 79 01 6B 0A 16 0C 17 11 16 0A 17 0F 1E 13 +R 00 00 00 09 +T 00 01 86 5C 1F 13 20 8E +R 00 00 00 09 +T 00 01 8B +R 00 00 00 09 +T 00 01 8B 1E 19 27 05 1E 08 16 13 FF +R 00 00 00 09 +T 00 01 94 +R 00 00 00 09 +T 00 01 94 0D 05 27 0C AE 00 22 CF 00 00 5F 5A 90 +R 00 00 00 09 12 0B 00 00 +T 00 01 A1 93 20 20 +R 00 00 00 09 +T 00 01 A4 +R 00 00 00 09 +T 00 01 A4 0D 06 27 10 16 11 90 50 1E 0F 24 01 5C +R 00 00 00 09 +T 00 01 B1 +R 00 00 00 09 +T 00 01 B1 50 17 0C 1F 0A 20 08 +R 00 00 00 09 +T 00 01 B8 +R 00 00 00 09 +T 00 01 B8 16 11 17 0C 16 0F 17 0A +R 00 00 00 09 +T 00 01 C0 +R 00 00 00 09 +T 00 01 C0 1E 0C 16 0A +R 00 00 00 09 +T 00 01 C4 +R 00 00 00 09 +T 00 01 C4 5B 14 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 07 +T 00 00 00 30 78 00 +R 00 00 00 07 +T 00 00 03 +R 00 00 00 07 +T 00 00 03 30 58 00 +R 00 00 00 07 diff --git a/device/lib/stm8/strtoul.sym b/device/lib/stm8/strtoul.sym new file mode 100644 index 0000000..b789557 --- /dev/null +++ b/device/lib/stm8/strtoul.sym @@ -0,0 +1,35 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 7 ___str_0 000000 R + 7 ___str_1 000003 R + 9 __isdigit 000000 R + __mullong ****** GX + _errno ****** GX + _strncmp ****** GX + 9 _strtoul 00003B GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 6 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1C7 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/strxfrm.asm b/device/lib/stm8/strxfrm.asm new file mode 100644 index 0000000..29501de --- /dev/null +++ b/device/lib/stm8/strxfrm.asm @@ -0,0 +1,76 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module strxfrm + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strlen + .globl _strncpy + .globl _strxfrm +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../strxfrm.c: 31: size_t strxfrm(char *dest, const char *src, size_t n) +; ----------------------------------------- +; function strxfrm +; ----------------------------------------- +_strxfrm: +; ../strxfrm.c: 33: strncpy(dest, src, n); + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call _strncpy + addw sp, #6 +; ../strxfrm.c: 34: return(strlen(src) + 1); + ldw x, (0x05, sp) + pushw x + call _strlen + addw sp, #2 + incw x +; ../strxfrm.c: 35: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/strxfrm.lst b/device/lib/stm8/strxfrm.lst new file mode 100644 index 0000000..9aa3593 --- /dev/null +++ b/device/lib/stm8/strxfrm.lst @@ -0,0 +1,76 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module strxfrm + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strlen + 12 .globl _strncpy + 13 .globl _strxfrm + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../strxfrm.c: 31: size_t strxfrm(char *dest, const char *src, size_t n) + 52 ; ----------------------------------------- + 53 ; function strxfrm + 54 ; ----------------------------------------- + 000000 55 _strxfrm: + 56 ; ../strxfrm.c: 33: strncpy(dest, src, n); + 000000 1E 07 [ 2] 57 ldw x, (0x07, sp) + 000002 89 [ 2] 58 pushw x + 000003 1E 07 [ 2] 59 ldw x, (0x07, sp) + 000005 89 [ 2] 60 pushw x + 000006 1E 07 [ 2] 61 ldw x, (0x07, sp) + 000008 89 [ 2] 62 pushw x + 000009 CDr00r00 [ 4] 63 call _strncpy + 00000C 5B 06 [ 2] 64 addw sp, #6 + 65 ; ../strxfrm.c: 34: return(strlen(src) + 1); + 00000E 1E 05 [ 2] 66 ldw x, (0x05, sp) + 000010 89 [ 2] 67 pushw x + 000011 CDr00r00 [ 4] 68 call _strlen + 000014 5B 02 [ 2] 69 addw sp, #2 + 000016 5C [ 1] 70 incw x + 71 ; ../strxfrm.c: 35: } + 000017 81 [ 4] 72 ret + 73 .area CODE + 74 .area CONST + 75 .area INITIALIZER + 76 .area CABS (ABS) diff --git a/device/lib/stm8/strxfrm.rel b/device/lib/stm8/strxfrm.rel new file mode 100644 index 0000000..641896b --- /dev/null +++ b/device/lib/stm8/strxfrm.rel @@ -0,0 +1,25 @@ +XH3 +H B areas 4 global symbols +M strxfrm +O -mstm8 +S .__.ABS. Def000000 +S _strncpy Ref000000 +S _strlen Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 18 flags 0 addr 0 +S _strxfrm Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 07 89 1E 07 89 1E 07 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 00 0D 06 1E 05 89 CD 00 00 5B 02 5C 81 +R 00 00 00 09 02 08 00 02 diff --git a/device/lib/stm8/strxfrm.sym b/device/lib/stm8/strxfrm.sym new file mode 100644 index 0000000..0bd5384 --- /dev/null +++ b/device/lib/stm8/strxfrm.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _strlen ****** GX + _strncpy ****** GX + 9 _strxfrm 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 18 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/tancotf.asm b/device/lib/stm8/tancotf.asm new file mode 100644 index 0000000..6990bf9 --- /dev/null +++ b/device/lib/stm8/tancotf.asm @@ -0,0 +1,408 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module tancotf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _tancotf + .globl _fabsf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../tancotf.c: 53: float tancotf(float x, bool iscotan) +; ----------------------------------------- +; function tancotf +; ----------------------------------------- +_tancotf: + sub sp, #14 +; ../tancotf.c: 58: if (fabsf(x) > YMAX) + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call _fabsf + addw sp, #4 + pushw x + pushw y + push #0x00 + push #0x08 + push #0xc9 + push #0x45 + call ___fslt + addw sp, #8 + ld (0x0e, sp), a + jreq 00102$ +; ../tancotf.c: 60: errno = ERANGE; + ldw x, #0x0022 + ldw _errno+0, x +; ../tancotf.c: 61: return 0.0; + clrw x + clrw y + jp 00115$ +00102$: +; ../tancotf.c: 65: n=(x*TWO_O_PI+(x>0.0?0.5:-0.5)); /*works for +-x*/ + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + push #0x83 + push #0xf9 + push #0x22 + push #0x3f + call ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + clrw x + pushw x + clrw x + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00117$ + clrw x + ldw (0x0d, sp), x + ldw x, #0x3f00 + ldw (0x0b, sp), x + jra 00118$ +00117$: + clrw x + ldw (0x0d, sp), x + ldw x, #0xbf00 + ldw (0x0b, sp), x +00118$: + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call ___fsadd + addw sp, #8 + pushw x + pushw y + call ___fs2sint + addw sp, #4 +; ../tancotf.c: 66: xn=n; + ldw (0x01, sp), x + pushw x + call ___sint2fs + addw sp, #2 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../tancotf.c: 68: xnum=(int)x; + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + call ___fs2sint + addw sp, #4 + pushw x + call ___sint2fs + addw sp, #2 + ldw (0x0d, sp), x + ldw (0x0b, sp), y +; ../tancotf.c: 69: xden=x-xnum; + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../tancotf.c: 70: f=((xnum-xn*C1)+xden)-xn*C2; + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + clrw x + pushw x + push #0xc9 + push #0x3f + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x0d, sp), x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x11, sp) + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + push #0x22 + push #0xaa + push #0xfd + push #0x39 + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fssub + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y +; ../tancotf.c: 72: if (fabsf(f) < EPS) + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + call _fabsf + addw sp, #4 + push #0x00 + push #0x00 + push #0x80 + push #0x39 + pushw x + pushw y + call ___fslt + addw sp, #8 + ld (0x0a, sp), a + jreq 00104$ +; ../tancotf.c: 74: xnum = f; + ldw y, (0x0d, sp) + ldw (0x05, sp), y + ldw y, (0x0b, sp) + ldw (0x03, sp), y +; ../tancotf.c: 75: xden = 1.0; + clrw x + ldw (0x0d, sp), x + ldw x, #0x3f80 + ldw (0x0b, sp), x + jp 00105$ +00104$: +; ../tancotf.c: 79: g = f*f; + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../tancotf.c: 80: xnum = P(f,g); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + push #0xb8 + push #0x33 + push #0xc4 + push #0xbd + call ___fsmul + addw sp, #8 + ldw (0x05, sp), x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x09, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + ldw (0x05, sp), x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x09, sp) + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../tancotf.c: 81: xden = Q(g); + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + push #0x75 + push #0x33 + push #0x1f + push #0x3c + call ___fsmul + addw sp, #8 + push #0xaf + push #0xb7 + push #0xdb + push #0xbe + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x11, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x80 + push #0x3f + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y +00105$: +; ../tancotf.c: 84: if(n&1) + ld a, (0x02, sp) + srl a + jrnc 00113$ +; ../tancotf.c: 87: if(iscotan) return (-xnum/xden); + tnz (0x15, sp) + jreq 00107$ + ldw y, (0x05, sp) + ldw x, (0x03, sp) + sllw x + ccf + rrcw x + ld a, (0x0e, sp) + push a + ld a, (0x0e, sp) + push a + ld a, (0x0e, sp) + push a + ld a, (0x0e, sp) + push a + pushw y + pushw x + call ___fsdiv + addw sp, #8 + jra 00115$ +00107$: +; ../tancotf.c: 88: else return (-xden/xnum); + ldw y, (0x0d, sp) + ldw x, (0x0b, sp) + sllw x + ccf + rrcw x + ld a, (0x06, sp) + push a + ld a, (0x06, sp) + push a + ld a, (0x06, sp) + push a + ld a, (0x06, sp) + push a + pushw y + pushw x + call ___fsdiv + addw sp, #8 + jra 00115$ +00113$: +; ../tancotf.c: 92: if(iscotan) return (xden/xnum); + tnz (0x15, sp) + jreq 00110$ + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call ___fsdiv + addw sp, #8 + jra 00115$ +00110$: +; ../tancotf.c: 93: else return (xnum/xden); + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + call ___fsdiv + addw sp, #8 +00115$: +; ../tancotf.c: 95: } + addw sp, #14 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/tancotf.lst b/device/lib/stm8/tancotf.lst new file mode 100644 index 0000000..ac61d69 --- /dev/null +++ b/device/lib/stm8/tancotf.lst @@ -0,0 +1,408 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module tancotf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _tancotf + 12 .globl _fabsf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../tancotf.c: 53: float tancotf(float x, bool iscotan) + 51 ; ----------------------------------------- + 52 ; function tancotf + 53 ; ----------------------------------------- + 000000 54 _tancotf: + 000000 52 0E [ 2] 55 sub sp, #14 + 56 ; ../tancotf.c: 58: if (fabsf(x) > YMAX) + 000002 1E 13 [ 2] 57 ldw x, (0x13, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 13 [ 2] 59 ldw x, (0x13, sp) + 000007 89 [ 2] 60 pushw x + 000008 CDr00r00 [ 4] 61 call _fabsf + 00000B 5B 04 [ 2] 62 addw sp, #4 + 00000D 89 [ 2] 63 pushw x + 00000E 90 89 [ 2] 64 pushw y + 000010 4B 00 [ 1] 65 push #0x00 + 000012 4B 08 [ 1] 66 push #0x08 + 000014 4B C9 [ 1] 67 push #0xc9 + 000016 4B 45 [ 1] 68 push #0x45 + 000018 CDr00r00 [ 4] 69 call ___fslt + 00001B 5B 08 [ 2] 70 addw sp, #8 + 00001D 6B 0E [ 1] 71 ld (0x0e, sp), a + 00001F 27 0C [ 1] 72 jreq 00102$ + 73 ; ../tancotf.c: 60: errno = ERANGE; + 000021 AE 00 22 [ 2] 74 ldw x, #0x0022 + 000024 CFu00u00 [ 2] 75 ldw _errno+0, x + 76 ; ../tancotf.c: 61: return 0.0; + 000027 5F [ 1] 77 clrw x + 000028 90 5F [ 1] 78 clrw y + 00002A CCr02r47 [ 2] 79 jp 00115$ + 00002D 80 00102$: + 81 ; ../tancotf.c: 65: n=(x*TWO_O_PI+(x>0.0?0.5:-0.5)); /*works for +-x*/ + 00002D 1E 13 [ 2] 82 ldw x, (0x13, sp) + 00002F 89 [ 2] 83 pushw x + 000030 1E 13 [ 2] 84 ldw x, (0x13, sp) + 000032 89 [ 2] 85 pushw x + 000033 4B 83 [ 1] 86 push #0x83 + 000035 4B F9 [ 1] 87 push #0xf9 + 000037 4B 22 [ 1] 88 push #0x22 + 000039 4B 3F [ 1] 89 push #0x3f + 00003B CDr00r00 [ 4] 90 call ___fsmul + 00003E 5B 08 [ 2] 91 addw sp, #8 + 000040 1F 09 [ 2] 92 ldw (0x09, sp), x + 000042 17 07 [ 2] 93 ldw (0x07, sp), y + 000044 1E 13 [ 2] 94 ldw x, (0x13, sp) + 000046 89 [ 2] 95 pushw x + 000047 1E 13 [ 2] 96 ldw x, (0x13, sp) + 000049 89 [ 2] 97 pushw x + 00004A 5F [ 1] 98 clrw x + 00004B 89 [ 2] 99 pushw x + 00004C 5F [ 1] 100 clrw x + 00004D 89 [ 2] 101 pushw x + 00004E CDr00r00 [ 4] 102 call ___fslt + 000051 5B 08 [ 2] 103 addw sp, #8 + 000053 4D [ 1] 104 tnz a + 000054 27 0A [ 1] 105 jreq 00117$ + 000056 5F [ 1] 106 clrw x + 000057 1F 0D [ 2] 107 ldw (0x0d, sp), x + 000059 AE 3F 00 [ 2] 108 ldw x, #0x3f00 + 00005C 1F 0B [ 2] 109 ldw (0x0b, sp), x + 00005E 20 08 [ 2] 110 jra 00118$ + 000060 111 00117$: + 000060 5F [ 1] 112 clrw x + 000061 1F 0D [ 2] 113 ldw (0x0d, sp), x + 000063 AE BF 00 [ 2] 114 ldw x, #0xbf00 + 000066 1F 0B [ 2] 115 ldw (0x0b, sp), x + 000068 116 00118$: + 000068 1E 0D [ 2] 117 ldw x, (0x0d, sp) + 00006A 89 [ 2] 118 pushw x + 00006B 1E 0D [ 2] 119 ldw x, (0x0d, sp) + 00006D 89 [ 2] 120 pushw x + 00006E 1E 0D [ 2] 121 ldw x, (0x0d, sp) + 000070 89 [ 2] 122 pushw x + 000071 1E 0D [ 2] 123 ldw x, (0x0d, sp) + 000073 89 [ 2] 124 pushw x + 000074 CDr00r00 [ 4] 125 call ___fsadd + 000077 5B 08 [ 2] 126 addw sp, #8 + 000079 89 [ 2] 127 pushw x + 00007A 90 89 [ 2] 128 pushw y + 00007C CDr00r00 [ 4] 129 call ___fs2sint + 00007F 5B 04 [ 2] 130 addw sp, #4 + 131 ; ../tancotf.c: 66: xn=n; + 000081 1F 01 [ 2] 132 ldw (0x01, sp), x + 000083 89 [ 2] 133 pushw x + 000084 CDr00r00 [ 4] 134 call ___sint2fs + 000087 5B 02 [ 2] 135 addw sp, #2 + 000089 1F 05 [ 2] 136 ldw (0x05, sp), x + 00008B 17 03 [ 2] 137 ldw (0x03, sp), y + 138 ; ../tancotf.c: 68: xnum=(int)x; + 00008D 1E 13 [ 2] 139 ldw x, (0x13, sp) + 00008F 89 [ 2] 140 pushw x + 000090 1E 13 [ 2] 141 ldw x, (0x13, sp) + 000092 89 [ 2] 142 pushw x + 000093 CDr00r00 [ 4] 143 call ___fs2sint + 000096 5B 04 [ 2] 144 addw sp, #4 + 000098 89 [ 2] 145 pushw x + 000099 CDr00r00 [ 4] 146 call ___sint2fs + 00009C 5B 02 [ 2] 147 addw sp, #2 + 00009E 1F 0D [ 2] 148 ldw (0x0d, sp), x + 0000A0 17 0B [ 2] 149 ldw (0x0b, sp), y + 150 ; ../tancotf.c: 69: xden=x-xnum; + 0000A2 1E 0D [ 2] 151 ldw x, (0x0d, sp) + 0000A4 89 [ 2] 152 pushw x + 0000A5 1E 0D [ 2] 153 ldw x, (0x0d, sp) + 0000A7 89 [ 2] 154 pushw x + 0000A8 1E 17 [ 2] 155 ldw x, (0x17, sp) + 0000AA 89 [ 2] 156 pushw x + 0000AB 1E 17 [ 2] 157 ldw x, (0x17, sp) + 0000AD 89 [ 2] 158 pushw x + 0000AE CDr00r00 [ 4] 159 call ___fssub + 0000B1 5B 08 [ 2] 160 addw sp, #8 + 0000B3 1F 09 [ 2] 161 ldw (0x09, sp), x + 0000B5 17 07 [ 2] 162 ldw (0x07, sp), y + 163 ; ../tancotf.c: 70: f=((xnum-xn*C1)+xden)-xn*C2; + 0000B7 1E 05 [ 2] 164 ldw x, (0x05, sp) + 0000B9 89 [ 2] 165 pushw x + 0000BA 1E 05 [ 2] 166 ldw x, (0x05, sp) + 0000BC 89 [ 2] 167 pushw x + 0000BD 5F [ 1] 168 clrw x + 0000BE 89 [ 2] 169 pushw x + 0000BF 4B C9 [ 1] 170 push #0xc9 + 0000C1 4B 3F [ 1] 171 push #0x3f + 0000C3 CDr00r00 [ 4] 172 call ___fsmul + 0000C6 5B 08 [ 2] 173 addw sp, #8 + 0000C8 89 [ 2] 174 pushw x + 0000C9 90 89 [ 2] 175 pushw y + 0000CB 1E 11 [ 2] 176 ldw x, (0x11, sp) + 0000CD 89 [ 2] 177 pushw x + 0000CE 1E 11 [ 2] 178 ldw x, (0x11, sp) + 0000D0 89 [ 2] 179 pushw x + 0000D1 CDr00r00 [ 4] 180 call ___fssub + 0000D4 5B 08 [ 2] 181 addw sp, #8 + 0000D6 1F 0D [ 2] 182 ldw (0x0d, sp), x + 0000D8 1E 09 [ 2] 183 ldw x, (0x09, sp) + 0000DA 89 [ 2] 184 pushw x + 0000DB 1E 09 [ 2] 185 ldw x, (0x09, sp) + 0000DD 89 [ 2] 186 pushw x + 0000DE 1E 11 [ 2] 187 ldw x, (0x11, sp) + 0000E0 89 [ 2] 188 pushw x + 0000E1 90 89 [ 2] 189 pushw y + 0000E3 CDr00r00 [ 4] 190 call ___fsadd + 0000E6 5B 08 [ 2] 191 addw sp, #8 + 0000E8 1F 0D [ 2] 192 ldw (0x0d, sp), x + 0000EA 17 0B [ 2] 193 ldw (0x0b, sp), y + 0000EC 1E 05 [ 2] 194 ldw x, (0x05, sp) + 0000EE 89 [ 2] 195 pushw x + 0000EF 1E 05 [ 2] 196 ldw x, (0x05, sp) + 0000F1 89 [ 2] 197 pushw x + 0000F2 4B 22 [ 1] 198 push #0x22 + 0000F4 4B AA [ 1] 199 push #0xaa + 0000F6 4B FD [ 1] 200 push #0xfd + 0000F8 4B 39 [ 1] 201 push #0x39 + 0000FA CDr00r00 [ 4] 202 call ___fsmul + 0000FD 5B 08 [ 2] 203 addw sp, #8 + 0000FF 89 [ 2] 204 pushw x + 000100 90 89 [ 2] 205 pushw y + 000102 1E 11 [ 2] 206 ldw x, (0x11, sp) + 000104 89 [ 2] 207 pushw x + 000105 1E 11 [ 2] 208 ldw x, (0x11, sp) + 000107 89 [ 2] 209 pushw x + 000108 CDr00r00 [ 4] 210 call ___fssub + 00010B 5B 08 [ 2] 211 addw sp, #8 + 00010D 1F 0D [ 2] 212 ldw (0x0d, sp), x + 00010F 17 0B [ 2] 213 ldw (0x0b, sp), y + 214 ; ../tancotf.c: 72: if (fabsf(f) < EPS) + 000111 1E 0D [ 2] 215 ldw x, (0x0d, sp) + 000113 89 [ 2] 216 pushw x + 000114 1E 0D [ 2] 217 ldw x, (0x0d, sp) + 000116 89 [ 2] 218 pushw x + 000117 CDr00r00 [ 4] 219 call _fabsf + 00011A 5B 04 [ 2] 220 addw sp, #4 + 00011C 4B 00 [ 1] 221 push #0x00 + 00011E 4B 00 [ 1] 222 push #0x00 + 000120 4B 80 [ 1] 223 push #0x80 + 000122 4B 39 [ 1] 224 push #0x39 + 000124 89 [ 2] 225 pushw x + 000125 90 89 [ 2] 226 pushw y + 000127 CDr00r00 [ 4] 227 call ___fslt + 00012A 5B 08 [ 2] 228 addw sp, #8 + 00012C 6B 0A [ 1] 229 ld (0x0a, sp), a + 00012E 27 13 [ 1] 230 jreq 00104$ + 231 ; ../tancotf.c: 74: xnum = f; + 000130 16 0D [ 2] 232 ldw y, (0x0d, sp) + 000132 17 05 [ 2] 233 ldw (0x05, sp), y + 000134 16 0B [ 2] 234 ldw y, (0x0b, sp) + 000136 17 03 [ 2] 235 ldw (0x03, sp), y + 236 ; ../tancotf.c: 75: xden = 1.0; + 000138 5F [ 1] 237 clrw x + 000139 1F 0D [ 2] 238 ldw (0x0d, sp), x + 00013B AE 3F 80 [ 2] 239 ldw x, #0x3f80 + 00013E 1F 0B [ 2] 240 ldw (0x0b, sp), x + 000140 CCr01rDC [ 2] 241 jp 00105$ + 000143 242 00104$: + 243 ; ../tancotf.c: 79: g = f*f; + 000143 1E 0D [ 2] 244 ldw x, (0x0d, sp) + 000145 89 [ 2] 245 pushw x + 000146 1E 0D [ 2] 246 ldw x, (0x0d, sp) + 000148 89 [ 2] 247 pushw x + 000149 1E 11 [ 2] 248 ldw x, (0x11, sp) + 00014B 89 [ 2] 249 pushw x + 00014C 1E 11 [ 2] 250 ldw x, (0x11, sp) + 00014E 89 [ 2] 251 pushw x + 00014F CDr00r00 [ 4] 252 call ___fsmul + 000152 5B 08 [ 2] 253 addw sp, #8 + 000154 1F 09 [ 2] 254 ldw (0x09, sp), x + 000156 17 07 [ 2] 255 ldw (0x07, sp), y + 256 ; ../tancotf.c: 80: xnum = P(f,g); + 000158 1E 09 [ 2] 257 ldw x, (0x09, sp) + 00015A 89 [ 2] 258 pushw x + 00015B 1E 09 [ 2] 259 ldw x, (0x09, sp) + 00015D 89 [ 2] 260 pushw x + 00015E 4B B8 [ 1] 261 push #0xb8 + 000160 4B 33 [ 1] 262 push #0x33 + 000162 4B C4 [ 1] 263 push #0xc4 + 000164 4B BD [ 1] 264 push #0xbd + 000166 CDr00r00 [ 4] 265 call ___fsmul + 000169 5B 08 [ 2] 266 addw sp, #8 + 00016B 1F 05 [ 2] 267 ldw (0x05, sp), x + 00016D 1E 0D [ 2] 268 ldw x, (0x0d, sp) + 00016F 89 [ 2] 269 pushw x + 000170 1E 0D [ 2] 270 ldw x, (0x0d, sp) + 000172 89 [ 2] 271 pushw x + 000173 1E 09 [ 2] 272 ldw x, (0x09, sp) + 000175 89 [ 2] 273 pushw x + 000176 90 89 [ 2] 274 pushw y + 000178 CDr00r00 [ 4] 275 call ___fsmul + 00017B 5B 08 [ 2] 276 addw sp, #8 + 00017D 1F 05 [ 2] 277 ldw (0x05, sp), x + 00017F 1E 0D [ 2] 278 ldw x, (0x0d, sp) + 000181 89 [ 2] 279 pushw x + 000182 1E 0D [ 2] 280 ldw x, (0x0d, sp) + 000184 89 [ 2] 281 pushw x + 000185 1E 09 [ 2] 282 ldw x, (0x09, sp) + 000187 89 [ 2] 283 pushw x + 000188 90 89 [ 2] 284 pushw y + 00018A CDr00r00 [ 4] 285 call ___fsadd + 00018D 5B 08 [ 2] 286 addw sp, #8 + 00018F 1F 05 [ 2] 287 ldw (0x05, sp), x + 000191 17 03 [ 2] 288 ldw (0x03, sp), y + 289 ; ../tancotf.c: 81: xden = Q(g); + 000193 1E 09 [ 2] 290 ldw x, (0x09, sp) + 000195 89 [ 2] 291 pushw x + 000196 1E 09 [ 2] 292 ldw x, (0x09, sp) + 000198 89 [ 2] 293 pushw x + 000199 4B 75 [ 1] 294 push #0x75 + 00019B 4B 33 [ 1] 295 push #0x33 + 00019D 4B 1F [ 1] 296 push #0x1f + 00019F 4B 3C [ 1] 297 push #0x3c + 0001A1 CDr00r00 [ 4] 298 call ___fsmul + 0001A4 5B 08 [ 2] 299 addw sp, #8 + 0001A6 4B AF [ 1] 300 push #0xaf + 0001A8 4B B7 [ 1] 301 push #0xb7 + 0001AA 4B DB [ 1] 302 push #0xdb + 0001AC 4B BE [ 1] 303 push #0xbe + 0001AE 89 [ 2] 304 pushw x + 0001AF 90 89 [ 2] 305 pushw y + 0001B1 CDr00r00 [ 4] 306 call ___fsadd + 0001B4 5B 08 [ 2] 307 addw sp, #8 + 0001B6 1F 0D [ 2] 308 ldw (0x0d, sp), x + 0001B8 1E 09 [ 2] 309 ldw x, (0x09, sp) + 0001BA 89 [ 2] 310 pushw x + 0001BB 1E 09 [ 2] 311 ldw x, (0x09, sp) + 0001BD 89 [ 2] 312 pushw x + 0001BE 1E 11 [ 2] 313 ldw x, (0x11, sp) + 0001C0 89 [ 2] 314 pushw x + 0001C1 90 89 [ 2] 315 pushw y + 0001C3 CDr00r00 [ 4] 316 call ___fsmul + 0001C6 5B 08 [ 2] 317 addw sp, #8 + 0001C8 4B 00 [ 1] 318 push #0x00 + 0001CA 4B 00 [ 1] 319 push #0x00 + 0001CC 4B 80 [ 1] 320 push #0x80 + 0001CE 4B 3F [ 1] 321 push #0x3f + 0001D0 89 [ 2] 322 pushw x + 0001D1 90 89 [ 2] 323 pushw y + 0001D3 CDr00r00 [ 4] 324 call ___fsadd + 0001D6 5B 08 [ 2] 325 addw sp, #8 + 0001D8 1F 0D [ 2] 326 ldw (0x0d, sp), x + 0001DA 17 0B [ 2] 327 ldw (0x0b, sp), y + 0001DC 328 00105$: + 329 ; ../tancotf.c: 84: if(n&1) + 0001DC 7B 02 [ 1] 330 ld a, (0x02, sp) + 0001DE 44 [ 1] 331 srl a + 0001DF 24 3E [ 1] 332 jrnc 00113$ + 333 ; ../tancotf.c: 87: if(iscotan) return (-xnum/xden); + 0001E1 0D 15 [ 1] 334 tnz (0x15, sp) + 0001E3 27 1D [ 1] 335 jreq 00107$ + 0001E5 16 05 [ 2] 336 ldw y, (0x05, sp) + 0001E7 1E 03 [ 2] 337 ldw x, (0x03, sp) + 0001E9 58 [ 2] 338 sllw x + 0001EA 8C [ 1] 339 ccf + 0001EB 56 [ 2] 340 rrcw x + 0001EC 7B 0E [ 1] 341 ld a, (0x0e, sp) + 0001EE 88 [ 1] 342 push a + 0001EF 7B 0E [ 1] 343 ld a, (0x0e, sp) + 0001F1 88 [ 1] 344 push a + 0001F2 7B 0E [ 1] 345 ld a, (0x0e, sp) + 0001F4 88 [ 1] 346 push a + 0001F5 7B 0E [ 1] 347 ld a, (0x0e, sp) + 0001F7 88 [ 1] 348 push a + 0001F8 90 89 [ 2] 349 pushw y + 0001FA 89 [ 2] 350 pushw x + 0001FB CDr00r00 [ 4] 351 call ___fsdiv + 0001FE 5B 08 [ 2] 352 addw sp, #8 + 000200 20 45 [ 2] 353 jra 00115$ + 000202 354 00107$: + 355 ; ../tancotf.c: 88: else return (-xden/xnum); + 000202 16 0D [ 2] 356 ldw y, (0x0d, sp) + 000204 1E 0B [ 2] 357 ldw x, (0x0b, sp) + 000206 58 [ 2] 358 sllw x + 000207 8C [ 1] 359 ccf + 000208 56 [ 2] 360 rrcw x + 000209 7B 06 [ 1] 361 ld a, (0x06, sp) + 00020B 88 [ 1] 362 push a + 00020C 7B 06 [ 1] 363 ld a, (0x06, sp) + 00020E 88 [ 1] 364 push a + 00020F 7B 06 [ 1] 365 ld a, (0x06, sp) + 000211 88 [ 1] 366 push a + 000212 7B 06 [ 1] 367 ld a, (0x06, sp) + 000214 88 [ 1] 368 push a + 000215 90 89 [ 2] 369 pushw y + 000217 89 [ 2] 370 pushw x + 000218 CDr00r00 [ 4] 371 call ___fsdiv + 00021B 5B 08 [ 2] 372 addw sp, #8 + 00021D 20 28 [ 2] 373 jra 00115$ + 00021F 374 00113$: + 375 ; ../tancotf.c: 92: if(iscotan) return (xden/xnum); + 00021F 0D 15 [ 1] 376 tnz (0x15, sp) + 000221 27 13 [ 1] 377 jreq 00110$ + 000223 1E 05 [ 2] 378 ldw x, (0x05, sp) + 000225 89 [ 2] 379 pushw x + 000226 1E 05 [ 2] 380 ldw x, (0x05, sp) + 000228 89 [ 2] 381 pushw x + 000229 1E 11 [ 2] 382 ldw x, (0x11, sp) + 00022B 89 [ 2] 383 pushw x + 00022C 1E 11 [ 2] 384 ldw x, (0x11, sp) + 00022E 89 [ 2] 385 pushw x + 00022F CDr00r00 [ 4] 386 call ___fsdiv + 000232 5B 08 [ 2] 387 addw sp, #8 + 000234 20 11 [ 2] 388 jra 00115$ + 000236 389 00110$: + 390 ; ../tancotf.c: 93: else return (xnum/xden); + 000236 1E 0D [ 2] 391 ldw x, (0x0d, sp) + 000238 89 [ 2] 392 pushw x + 000239 1E 0D [ 2] 393 ldw x, (0x0d, sp) + 00023B 89 [ 2] 394 pushw x + 00023C 1E 09 [ 2] 395 ldw x, (0x09, sp) + 00023E 89 [ 2] 396 pushw x + 00023F 1E 09 [ 2] 397 ldw x, (0x09, sp) + 000241 89 [ 2] 398 pushw x + 000242 CDr00r00 [ 4] 399 call ___fsdiv + 000245 5B 08 [ 2] 400 addw sp, #8 + 000247 401 00115$: + 402 ; ../tancotf.c: 95: } + 000247 5B 0E [ 2] 403 addw sp, #14 + 000249 81 [ 4] 404 ret + 405 .area CODE + 406 .area CONST + 407 .area INITIALIZER + 408 .area CABS (ABS) diff --git a/device/lib/stm8/tancotf.rel b/device/lib/stm8/tancotf.rel new file mode 100644 index 0000000..e0c704d --- /dev/null +++ b/device/lib/stm8/tancotf.rel @@ -0,0 +1,144 @@ +XH3 +H B areas B global symbols +M tancotf +O -mstm8 +S ___fssub Ref000000 +S ___fsmul Ref000000 +S _errno Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S _fabsf Ref000000 +S ___sint2fs Ref000000 +S ___fs2sint Ref000000 +S ___fsdiv Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 24A flags 0 addr 0 +S _tancotf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0E 1E 13 89 1E 13 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 06 +T 00 00 0D 89 90 89 4B 00 4B 08 4B C9 4B 45 CD +R 00 00 00 09 +T 00 00 19 00 00 5B 08 6B 0E 27 0C AE 00 22 CF +R 00 00 00 09 02 03 00 03 +T 00 00 25 00 00 5F 90 5F CC 02 47 +R 00 00 00 09 12 03 00 02 00 09 00 09 +T 00 00 2D +R 00 00 00 09 +T 00 00 2D 1E 13 89 1E 13 89 4B 83 4B F9 4B 22 4B +R 00 00 00 09 +T 00 00 3A 3F CD 00 00 5B 08 1F 09 17 07 1E 13 89 +R 00 00 00 09 02 05 00 01 +T 00 00 47 1E 13 89 5F 89 5F 89 CD 00 00 5B 08 4D +R 00 00 00 09 02 0B 00 03 +T 00 00 54 27 0A 5F 1F 0D AE 3F 00 1F 0B 20 08 +R 00 00 00 09 +T 00 00 60 +R 00 00 00 09 +T 00 00 60 5F 1F 0D AE BF 00 1F 0B +R 00 00 00 09 +T 00 00 68 +R 00 00 00 09 +T 00 00 68 1E 0D 89 1E 0D 89 1E 0D 89 1E 0D 89 CD +R 00 00 00 09 +T 00 00 75 00 00 5B 08 89 90 89 CD 00 00 5B 04 1F +R 00 00 00 09 02 03 00 05 02 0B 00 08 +T 00 00 82 01 89 CD 00 00 5B 02 1F 05 17 03 1E 13 +R 00 00 00 09 02 06 00 07 +T 00 00 8F 89 1E 13 89 CD 00 00 5B 04 89 CD 00 00 +R 00 00 00 09 02 08 00 08 02 0E 00 07 +T 00 00 9C 5B 02 1F 0D 17 0B 1E 0D 89 1E 0D 89 1E +R 00 00 00 09 +T 00 00 A9 17 89 1E 17 89 CD 00 00 5B 08 1F 09 17 +R 00 00 00 09 02 09 00 00 +T 00 00 B6 07 1E 05 89 1E 05 89 5F 89 4B C9 4B 3F +R 00 00 00 09 +T 00 00 C3 CD 00 00 5B 08 89 90 89 1E 11 89 1E 11 +R 00 00 00 09 02 04 00 01 +T 00 00 D0 89 CD 00 00 5B 08 1F 0D 1E 09 89 1E 09 +R 00 00 00 09 02 05 00 00 +T 00 00 DD 89 1E 11 89 90 89 CD 00 00 5B 08 1F 0D +R 00 00 00 09 02 0A 00 05 +T 00 00 EA 17 0B 1E 05 89 1E 05 89 4B 22 4B AA 4B +R 00 00 00 09 +T 00 00 F7 FD 4B 39 CD 00 00 5B 08 89 90 89 1E 11 +R 00 00 00 09 02 07 00 01 +T 00 01 04 89 1E 11 89 CD 00 00 5B 08 1F 0D 17 0B +R 00 00 00 09 02 08 00 00 +T 00 01 11 1E 0D 89 1E 0D 89 CD 00 00 5B 04 4B 00 +R 00 00 00 09 02 0A 00 06 +T 00 01 1E 4B 00 4B 80 4B 39 89 90 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 03 +T 00 01 2B 08 6B 0A 27 13 16 0D 17 05 16 0B 17 03 +R 00 00 00 09 +T 00 01 38 5F 1F 0D AE 3F 80 1F 0B CC 01 DC +R 00 00 00 09 00 0C 00 09 +T 00 01 43 +R 00 00 00 09 +T 00 01 43 1E 0D 89 1E 0D 89 1E 11 89 1E 11 89 CD +R 00 00 00 09 +T 00 01 50 00 00 5B 08 1F 09 17 07 1E 09 89 1E 09 +R 00 00 00 09 02 03 00 01 +T 00 01 5D 89 4B B8 4B 33 4B C4 4B BD CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 01 6A 08 1F 05 1E 0D 89 1E 0D 89 1E 09 89 90 +R 00 00 00 09 +T 00 01 77 89 CD 00 00 5B 08 1F 05 1E 0D 89 1E 0D +R 00 00 00 09 02 05 00 01 +T 00 01 84 89 1E 09 89 90 89 CD 00 00 5B 08 1F 05 +R 00 00 00 09 02 0A 00 05 +T 00 01 91 17 03 1E 09 89 1E 09 89 4B 75 4B 33 4B +R 00 00 00 09 +T 00 01 9E 1F 4B 3C CD 00 00 5B 08 4B AF 4B B7 4B +R 00 00 00 09 02 07 00 01 +T 00 01 AB DB 4B BE 89 90 89 CD 00 00 5B 08 1F 0D +R 00 00 00 09 02 0A 00 05 +T 00 01 B8 1E 09 89 1E 09 89 1E 11 89 90 89 CD +R 00 00 00 09 +T 00 01 C4 00 00 5B 08 4B 00 4B 00 4B 80 4B 3F 89 +R 00 00 00 09 02 03 00 01 +T 00 01 D1 90 89 CD 00 00 5B 08 1F 0D 17 0B +R 00 00 00 09 02 06 00 05 +T 00 01 DC +R 00 00 00 09 +T 00 01 DC 7B 02 44 24 3E 0D 15 27 1D 16 05 1E 03 +R 00 00 00 09 +T 00 01 E9 58 8C 56 7B 0E 88 7B 0E 88 7B 0E 88 7B +R 00 00 00 09 +T 00 01 F6 0E 88 90 89 89 CD 00 00 5B 08 20 45 +R 00 00 00 09 02 09 00 09 +T 00 02 02 +R 00 00 00 09 +T 00 02 02 16 0D 1E 0B 58 8C 56 7B 06 88 7B 06 88 +R 00 00 00 09 +T 00 02 0F 7B 06 88 7B 06 88 90 89 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 09 +T 00 02 1C 08 20 28 +R 00 00 00 09 +T 00 02 1F +R 00 00 00 09 +T 00 02 1F 0D 15 27 13 1E 05 89 1E 05 89 1E 11 89 +R 00 00 00 09 +T 00 02 2C 1E 11 89 CD 00 00 5B 08 20 11 +R 00 00 00 09 02 07 00 09 +T 00 02 36 +R 00 00 00 09 +T 00 02 36 1E 0D 89 1E 0D 89 1E 09 89 1E 09 89 CD +R 00 00 00 09 +T 00 02 43 00 00 5B 08 +R 00 00 00 09 02 03 00 09 +T 00 02 47 +R 00 00 00 09 +T 00 02 47 5B 0E 81 +R 00 00 00 09 diff --git a/device/lib/stm8/tancotf.sym b/device/lib/stm8/tancotf.sym new file mode 100644 index 0000000..f785770 --- /dev/null +++ b/device/lib/stm8/tancotf.sym @@ -0,0 +1,38 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fs2sint ****** GX + ___fsadd ****** GX + ___fsdiv ****** GX + ___fslt ****** GX + ___fsmul ****** GX + ___fssub ****** GX + ___sint2fs ****** GX + _errno ****** GX + _fabsf ****** GX + 9 _tancotf 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 24A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/tanf.asm b/device/lib/stm8/tanf.asm new file mode 100644 index 0000000..5065ca4 --- /dev/null +++ b/device/lib/stm8/tanf.asm @@ -0,0 +1,68 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module tanf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _tancotf + .globl _tanf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../tanf.c: 36: float tanf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function tanf +; ----------------------------------------- +_tanf: +; ../tanf.c: 38: return tancotf(x, 0); + push #0x00 + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + call _tancotf + addw sp, #5 +; ../tanf.c: 39: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/tanf.lst b/device/lib/stm8/tanf.lst new file mode 100644 index 0000000..b3cd6af --- /dev/null +++ b/device/lib/stm8/tanf.lst @@ -0,0 +1,68 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module tanf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _tancotf + 12 .globl _tanf + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../tanf.c: 36: float tanf(float x) _FLOAT_FUNC_REENTRANT + 51 ; ----------------------------------------- + 52 ; function tanf + 53 ; ----------------------------------------- + 000000 54 _tanf: + 55 ; ../tanf.c: 38: return tancotf(x, 0); + 000000 4B 00 [ 1] 56 push #0x00 + 000002 1E 06 [ 2] 57 ldw x, (0x06, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 06 [ 2] 59 ldw x, (0x06, sp) + 000007 89 [ 2] 60 pushw x + 000008 CDr00r00 [ 4] 61 call _tancotf + 00000B 5B 05 [ 2] 62 addw sp, #5 + 63 ; ../tanf.c: 39: } + 00000D 81 [ 4] 64 ret + 65 .area CODE + 66 .area CONST + 67 .area INITIALIZER + 68 .area CABS (ABS) diff --git a/device/lib/stm8/tanf.rel b/device/lib/stm8/tanf.rel new file mode 100644 index 0000000..66b00e8 --- /dev/null +++ b/device/lib/stm8/tanf.rel @@ -0,0 +1,24 @@ +XH3 +H B areas 3 global symbols +M tanf +O -mstm8 +S _tancotf Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size E flags 0 addr 0 +S _tanf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 4B 00 1E 06 89 1E 06 89 CD 00 00 5B 05 +R 00 00 00 09 02 0C 00 00 +T 00 00 0D 81 +R 00 00 00 09 diff --git a/device/lib/stm8/tanf.sym b/device/lib/stm8/tanf.sym new file mode 100644 index 0000000..3f41190 --- /dev/null +++ b/device/lib/stm8/tanf.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _tancotf ****** GX + 9 _tanf 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/tanhf.asm b/device/lib/stm8/tanhf.asm new file mode 100644 index 0000000..c8480a5 --- /dev/null +++ b/device/lib/stm8/tanhf.asm @@ -0,0 +1,296 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module tanhf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _fabsf + .globl _expf + .globl _tanhf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../tanhf.c: 50: float tanhf(float x) _FLOAT_FUNC_REENTRANT +; ----------------------------------------- +; function tanhf +; ----------------------------------------- +_tanhf: + sub sp, #12 +; ../tanhf.c: 54: f=fabsf(x); + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + call _fabsf + addw sp, #4 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../tanhf.c: 55: if(f>SBIG) r=1.0; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + push #0xb0 + push #0x2c + push #0x10 + push #0x41 + call ___fslt + addw sp, #8 + ld (0x0c, sp), a + jreq 00108$ + clrw x + ldw (0x0b, sp), x + ldw x, #0x3f80 + ldw (0x09, sp), x + jp 00109$ +00108$: +; ../tanhf.c: 56: else if(f>K1) + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + push #0x54 + push #0x9f + push #0x0c + push #0x3f + call ___fslt + addw sp, #8 + tnz a + jreq 00105$ +; ../tanhf.c: 58: r=0.5-1.0/(expf(f+f)+1.0); + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call _expf + addw sp, #4 + ldw (0x0b, sp), x + ldw (0x09, sp), y + clrw x + pushw x + push #0x80 + push #0x3f + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + clrw x + pushw x + push #0x80 + push #0x3f + call ___fsdiv + addw sp, #8 + pushw x + pushw y + clrw x + pushw x + push #0x00 + push #0x3f + call ___fssub + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y +; ../tanhf.c: 59: r+=r; + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y + jp 00109$ +00105$: +; ../tanhf.c: 61: else if(f<EPS) r=f; + clrw x + pushw x + push #0x80 + push #0x39 + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00102$ + ldw y, (0x03, sp) + ldw (0x0b, sp), y + ldw y, (0x01, sp) + ldw (0x09, sp), y + jp 00109$ +00102$: +; ../tanhf.c: 64: g=f*f; + ldw x, (0x03, sp) + pushw x + ldw x, (0x03, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsmul + addw sp, #8 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../tanhf.c: 65: r=f+f*(P(g)/Q(g)); + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + push #0xb2 + push #0x11 + push #0x7b + push #0xbb + call ___fsmul + addw sp, #8 + push #0xc6 + push #0xe2 + push #0x52 + push #0xbf + pushw x + pushw y + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + pushw y + call ___fsmul + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y + push #0x1a + push #0x2a + push #0x1e + push #0x40 + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + call ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + call ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y +00109$: +; ../tanhf.c: 67: if(x<0.0) r=-r; + clrw x + pushw x + clrw x + pushw x + ldw x, (0x15, sp) + pushw x + ldw x, (0x15, sp) + pushw x + call ___fslt + addw sp, #8 + tnz a + jreq 00111$ + ldw y, (0x0b, sp) + ldw x, (0x09, sp) + sllw x + ccf + rrcw x + ldw (0x0b, sp), y + ldw (0x09, sp), x +00111$: +; ../tanhf.c: 68: return r; + ldw x, (0x0b, sp) + ldw y, (0x09, sp) +; ../tanhf.c: 69: } + addw sp, #12 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/tanhf.lst b/device/lib/stm8/tanhf.lst new file mode 100644 index 0000000..6cdb939 --- /dev/null +++ b/device/lib/stm8/tanhf.lst @@ -0,0 +1,296 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module tanhf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _fabsf + 12 .globl _expf + 13 .globl _tanhf + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 18 ;-------------------------------------------------------- + 19 ; ram data + 20 ;-------------------------------------------------------- + 21 .area INITIALIZED + 22 ;-------------------------------------------------------- + 23 ; absolute external ram data + 24 ;-------------------------------------------------------- + 25 .area DABS (ABS) + 26 + 27 ; default segment ordering for linker + 28 .area HOME + 29 .area GSINIT + 30 .area GSFINAL + 31 .area CONST + 32 .area INITIALIZER + 33 .area CODE + 34 + 35 ;-------------------------------------------------------- + 36 ; global & static initialisations + 37 ;-------------------------------------------------------- + 38 .area HOME + 39 .area GSINIT + 40 .area GSFINAL + 41 .area GSINIT + 42 ;-------------------------------------------------------- + 43 ; Home + 44 ;-------------------------------------------------------- + 45 .area HOME + 46 .area HOME + 47 ;-------------------------------------------------------- + 48 ; code + 49 ;-------------------------------------------------------- + 50 .area CODE + 51 ; ../tanhf.c: 50: float tanhf(float x) _FLOAT_FUNC_REENTRANT + 52 ; ----------------------------------------- + 53 ; function tanhf + 54 ; ----------------------------------------- + 000000 55 _tanhf: + 000000 52 0C [ 2] 56 sub sp, #12 + 57 ; ../tanhf.c: 54: f=fabsf(x); + 000002 1E 11 [ 2] 58 ldw x, (0x11, sp) + 000004 89 [ 2] 59 pushw x + 000005 1E 11 [ 2] 60 ldw x, (0x11, sp) + 000007 89 [ 2] 61 pushw x + 000008 CDr00r00 [ 4] 62 call _fabsf + 00000B 5B 04 [ 2] 63 addw sp, #4 + 00000D 1F 03 [ 2] 64 ldw (0x03, sp), x + 00000F 17 01 [ 2] 65 ldw (0x01, sp), y + 66 ; ../tanhf.c: 55: if(f>SBIG) r=1.0; + 000011 1E 03 [ 2] 67 ldw x, (0x03, sp) + 000013 89 [ 2] 68 pushw x + 000014 1E 03 [ 2] 69 ldw x, (0x03, sp) + 000016 89 [ 2] 70 pushw x + 000017 4B B0 [ 1] 71 push #0xb0 + 000019 4B 2C [ 1] 72 push #0x2c + 00001B 4B 10 [ 1] 73 push #0x10 + 00001D 4B 41 [ 1] 74 push #0x41 + 00001F CDr00r00 [ 4] 75 call ___fslt + 000022 5B 08 [ 2] 76 addw sp, #8 + 000024 6B 0C [ 1] 77 ld (0x0c, sp), a + 000026 27 0B [ 1] 78 jreq 00108$ + 000028 5F [ 1] 79 clrw x + 000029 1F 0B [ 2] 80 ldw (0x0b, sp), x + 00002B AE 3F 80 [ 2] 81 ldw x, #0x3f80 + 00002E 1F 09 [ 2] 82 ldw (0x09, sp), x + 000030 CCr01r6B [ 2] 83 jp 00109$ + 000033 84 00108$: + 85 ; ../tanhf.c: 56: else if(f>K1) + 000033 1E 03 [ 2] 86 ldw x, (0x03, sp) + 000035 89 [ 2] 87 pushw x + 000036 1E 03 [ 2] 88 ldw x, (0x03, sp) + 000038 89 [ 2] 89 pushw x + 000039 4B 54 [ 1] 90 push #0x54 + 00003B 4B 9F [ 1] 91 push #0x9f + 00003D 4B 0C [ 1] 92 push #0x0c + 00003F 4B 3F [ 1] 93 push #0x3f + 000041 CDr00r00 [ 4] 94 call ___fslt + 000044 5B 08 [ 2] 95 addw sp, #8 + 000046 4D [ 1] 96 tnz a + 000047 27 74 [ 1] 97 jreq 00105$ + 98 ; ../tanhf.c: 58: r=0.5-1.0/(expf(f+f)+1.0); + 000049 1E 03 [ 2] 99 ldw x, (0x03, sp) + 00004B 89 [ 2] 100 pushw x + 00004C 1E 03 [ 2] 101 ldw x, (0x03, sp) + 00004E 89 [ 2] 102 pushw x + 00004F 1E 07 [ 2] 103 ldw x, (0x07, sp) + 000051 89 [ 2] 104 pushw x + 000052 1E 07 [ 2] 105 ldw x, (0x07, sp) + 000054 89 [ 2] 106 pushw x + 000055 CDr00r00 [ 4] 107 call ___fsadd + 000058 5B 08 [ 2] 108 addw sp, #8 + 00005A 1F 0B [ 2] 109 ldw (0x0b, sp), x + 00005C 17 09 [ 2] 110 ldw (0x09, sp), y + 00005E 1E 0B [ 2] 111 ldw x, (0x0b, sp) + 000060 89 [ 2] 112 pushw x + 000061 1E 0B [ 2] 113 ldw x, (0x0b, sp) + 000063 89 [ 2] 114 pushw x + 000064 CDr00r00 [ 4] 115 call _expf + 000067 5B 04 [ 2] 116 addw sp, #4 + 000069 1F 0B [ 2] 117 ldw (0x0b, sp), x + 00006B 17 09 [ 2] 118 ldw (0x09, sp), y + 00006D 5F [ 1] 119 clrw x + 00006E 89 [ 2] 120 pushw x + 00006F 4B 80 [ 1] 121 push #0x80 + 000071 4B 3F [ 1] 122 push #0x3f + 000073 1E 0F [ 2] 123 ldw x, (0x0f, sp) + 000075 89 [ 2] 124 pushw x + 000076 1E 0F [ 2] 125 ldw x, (0x0f, sp) + 000078 89 [ 2] 126 pushw x + 000079 CDr00r00 [ 4] 127 call ___fsadd + 00007C 5B 08 [ 2] 128 addw sp, #8 + 00007E 1F 0B [ 2] 129 ldw (0x0b, sp), x + 000080 17 09 [ 2] 130 ldw (0x09, sp), y + 000082 1E 0B [ 2] 131 ldw x, (0x0b, sp) + 000084 89 [ 2] 132 pushw x + 000085 1E 0B [ 2] 133 ldw x, (0x0b, sp) + 000087 89 [ 2] 134 pushw x + 000088 5F [ 1] 135 clrw x + 000089 89 [ 2] 136 pushw x + 00008A 4B 80 [ 1] 137 push #0x80 + 00008C 4B 3F [ 1] 138 push #0x3f + 00008E CDr00r00 [ 4] 139 call ___fsdiv + 000091 5B 08 [ 2] 140 addw sp, #8 + 000093 89 [ 2] 141 pushw x + 000094 90 89 [ 2] 142 pushw y + 000096 5F [ 1] 143 clrw x + 000097 89 [ 2] 144 pushw x + 000098 4B 00 [ 1] 145 push #0x00 + 00009A 4B 3F [ 1] 146 push #0x3f + 00009C CDr00r00 [ 4] 147 call ___fssub + 00009F 5B 08 [ 2] 148 addw sp, #8 + 0000A1 1F 0B [ 2] 149 ldw (0x0b, sp), x + 0000A3 17 09 [ 2] 150 ldw (0x09, sp), y + 151 ; ../tanhf.c: 59: r+=r; + 0000A5 1E 0B [ 2] 152 ldw x, (0x0b, sp) + 0000A7 89 [ 2] 153 pushw x + 0000A8 1E 0B [ 2] 154 ldw x, (0x0b, sp) + 0000AA 89 [ 2] 155 pushw x + 0000AB 1E 0F [ 2] 156 ldw x, (0x0f, sp) + 0000AD 89 [ 2] 157 pushw x + 0000AE 1E 0F [ 2] 158 ldw x, (0x0f, sp) + 0000B0 89 [ 2] 159 pushw x + 0000B1 CDr00r00 [ 4] 160 call ___fsadd + 0000B4 5B 08 [ 2] 161 addw sp, #8 + 0000B6 1F 0B [ 2] 162 ldw (0x0b, sp), x + 0000B8 17 09 [ 2] 163 ldw (0x09, sp), y + 0000BA CCr01r6B [ 2] 164 jp 00109$ + 0000BD 165 00105$: + 166 ; ../tanhf.c: 61: else if(f<EPS) r=f; + 0000BD 5F [ 1] 167 clrw x + 0000BE 89 [ 2] 168 pushw x + 0000BF 4B 80 [ 1] 169 push #0x80 + 0000C1 4B 39 [ 1] 170 push #0x39 + 0000C3 1E 07 [ 2] 171 ldw x, (0x07, sp) + 0000C5 89 [ 2] 172 pushw x + 0000C6 1E 07 [ 2] 173 ldw x, (0x07, sp) + 0000C8 89 [ 2] 174 pushw x + 0000C9 CDr00r00 [ 4] 175 call ___fslt + 0000CC 5B 08 [ 2] 176 addw sp, #8 + 0000CE 4D [ 1] 177 tnz a + 0000CF 27 0B [ 1] 178 jreq 00102$ + 0000D1 16 03 [ 2] 179 ldw y, (0x03, sp) + 0000D3 17 0B [ 2] 180 ldw (0x0b, sp), y + 0000D5 16 01 [ 2] 181 ldw y, (0x01, sp) + 0000D7 17 09 [ 2] 182 ldw (0x09, sp), y + 0000D9 CCr01r6B [ 2] 183 jp 00109$ + 0000DC 184 00102$: + 185 ; ../tanhf.c: 64: g=f*f; + 0000DC 1E 03 [ 2] 186 ldw x, (0x03, sp) + 0000DE 89 [ 2] 187 pushw x + 0000DF 1E 03 [ 2] 188 ldw x, (0x03, sp) + 0000E1 89 [ 2] 189 pushw x + 0000E2 1E 07 [ 2] 190 ldw x, (0x07, sp) + 0000E4 89 [ 2] 191 pushw x + 0000E5 1E 07 [ 2] 192 ldw x, (0x07, sp) + 0000E7 89 [ 2] 193 pushw x + 0000E8 CDr00r00 [ 4] 194 call ___fsmul + 0000EB 5B 08 [ 2] 195 addw sp, #8 + 0000ED 1F 07 [ 2] 196 ldw (0x07, sp), x + 0000EF 17 05 [ 2] 197 ldw (0x05, sp), y + 198 ; ../tanhf.c: 65: r=f+f*(P(g)/Q(g)); + 0000F1 1E 07 [ 2] 199 ldw x, (0x07, sp) + 0000F3 89 [ 2] 200 pushw x + 0000F4 1E 07 [ 2] 201 ldw x, (0x07, sp) + 0000F6 89 [ 2] 202 pushw x + 0000F7 4B B2 [ 1] 203 push #0xb2 + 0000F9 4B 11 [ 1] 204 push #0x11 + 0000FB 4B 7B [ 1] 205 push #0x7b + 0000FD 4B BB [ 1] 206 push #0xbb + 0000FF CDr00r00 [ 4] 207 call ___fsmul + 000102 5B 08 [ 2] 208 addw sp, #8 + 000104 4B C6 [ 1] 209 push #0xc6 + 000106 4B E2 [ 1] 210 push #0xe2 + 000108 4B 52 [ 1] 211 push #0x52 + 00010A 4B BF [ 1] 212 push #0xbf + 00010C 89 [ 2] 213 pushw x + 00010D 90 89 [ 2] 214 pushw y + 00010F CDr00r00 [ 4] 215 call ___fsadd + 000112 5B 08 [ 2] 216 addw sp, #8 + 000114 1F 0B [ 2] 217 ldw (0x0b, sp), x + 000116 1E 07 [ 2] 218 ldw x, (0x07, sp) + 000118 89 [ 2] 219 pushw x + 000119 1E 07 [ 2] 220 ldw x, (0x07, sp) + 00011B 89 [ 2] 221 pushw x + 00011C 1E 0F [ 2] 222 ldw x, (0x0f, sp) + 00011E 89 [ 2] 223 pushw x + 00011F 90 89 [ 2] 224 pushw y + 000121 CDr00r00 [ 4] 225 call ___fsmul + 000124 5B 08 [ 2] 226 addw sp, #8 + 000126 1F 0B [ 2] 227 ldw (0x0b, sp), x + 000128 17 09 [ 2] 228 ldw (0x09, sp), y + 00012A 4B 1A [ 1] 229 push #0x1a + 00012C 4B 2A [ 1] 230 push #0x2a + 00012E 4B 1E [ 1] 231 push #0x1e + 000130 4B 40 [ 1] 232 push #0x40 + 000132 1E 0B [ 2] 233 ldw x, (0x0b, sp) + 000134 89 [ 2] 234 pushw x + 000135 1E 0B [ 2] 235 ldw x, (0x0b, sp) + 000137 89 [ 2] 236 pushw x + 000138 CDr00r00 [ 4] 237 call ___fsadd + 00013B 5B 08 [ 2] 238 addw sp, #8 + 00013D 89 [ 2] 239 pushw x + 00013E 90 89 [ 2] 240 pushw y + 000140 1E 0F [ 2] 241 ldw x, (0x0f, sp) + 000142 89 [ 2] 242 pushw x + 000143 1E 0F [ 2] 243 ldw x, (0x0f, sp) + 000145 89 [ 2] 244 pushw x + 000146 CDr00r00 [ 4] 245 call ___fsdiv + 000149 5B 08 [ 2] 246 addw sp, #8 + 00014B 89 [ 2] 247 pushw x + 00014C 90 89 [ 2] 248 pushw y + 00014E 1E 07 [ 2] 249 ldw x, (0x07, sp) + 000150 89 [ 2] 250 pushw x + 000151 1E 07 [ 2] 251 ldw x, (0x07, sp) + 000153 89 [ 2] 252 pushw x + 000154 CDr00r00 [ 4] 253 call ___fsmul + 000157 5B 08 [ 2] 254 addw sp, #8 + 000159 89 [ 2] 255 pushw x + 00015A 90 89 [ 2] 256 pushw y + 00015C 1E 07 [ 2] 257 ldw x, (0x07, sp) + 00015E 89 [ 2] 258 pushw x + 00015F 1E 07 [ 2] 259 ldw x, (0x07, sp) + 000161 89 [ 2] 260 pushw x + 000162 CDr00r00 [ 4] 261 call ___fsadd + 000165 5B 08 [ 2] 262 addw sp, #8 + 000167 1F 0B [ 2] 263 ldw (0x0b, sp), x + 000169 17 09 [ 2] 264 ldw (0x09, sp), y + 00016B 265 00109$: + 266 ; ../tanhf.c: 67: if(x<0.0) r=-r; + 00016B 5F [ 1] 267 clrw x + 00016C 89 [ 2] 268 pushw x + 00016D 5F [ 1] 269 clrw x + 00016E 89 [ 2] 270 pushw x + 00016F 1E 15 [ 2] 271 ldw x, (0x15, sp) + 000171 89 [ 2] 272 pushw x + 000172 1E 15 [ 2] 273 ldw x, (0x15, sp) + 000174 89 [ 2] 274 pushw x + 000175 CDr00r00 [ 4] 275 call ___fslt + 000178 5B 08 [ 2] 276 addw sp, #8 + 00017A 4D [ 1] 277 tnz a + 00017B 27 0B [ 1] 278 jreq 00111$ + 00017D 16 0B [ 2] 279 ldw y, (0x0b, sp) + 00017F 1E 09 [ 2] 280 ldw x, (0x09, sp) + 000181 58 [ 2] 281 sllw x + 000182 8C [ 1] 282 ccf + 000183 56 [ 2] 283 rrcw x + 000184 17 0B [ 2] 284 ldw (0x0b, sp), y + 000186 1F 09 [ 2] 285 ldw (0x09, sp), x + 000188 286 00111$: + 287 ; ../tanhf.c: 68: return r; + 000188 1E 0B [ 2] 288 ldw x, (0x0b, sp) + 00018A 16 09 [ 2] 289 ldw y, (0x09, sp) + 290 ; ../tanhf.c: 69: } + 00018C 5B 0C [ 2] 291 addw sp, #12 + 00018E 81 [ 4] 292 ret + 293 .area CODE + 294 .area CONST + 295 .area INITIALIZER + 296 .area CABS (ABS) diff --git a/device/lib/stm8/tanhf.rel b/device/lib/stm8/tanhf.rel new file mode 100644 index 0000000..a6312cf --- /dev/null +++ b/device/lib/stm8/tanhf.rel @@ -0,0 +1,102 @@ +XH3 +H B areas 9 global symbols +M tanhf +O -mstm8 +S ___fssub Ref000000 +S ___fsmul Ref000000 +S _expf Ref000000 +S ___fslt Ref000000 +S .__.ABS. Def000000 +S ___fsadd Ref000000 +S _fabsf Ref000000 +S ___fsdiv Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 18F flags 0 addr 0 +S _tanhf Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0C 1E 11 89 1E 11 89 CD 00 00 5B 04 +R 00 00 00 09 02 0C 00 06 +T 00 00 0D 1F 03 17 01 1E 03 89 1E 03 89 4B B0 4B +R 00 00 00 09 +T 00 00 1A 2C 4B 10 4B 41 CD 00 00 5B 08 6B 0C 27 +R 00 00 00 09 02 09 00 03 +T 00 00 27 0B 5F 1F 0B AE 3F 80 1F 09 CC 01 6B +R 00 00 00 09 00 0D 00 09 +T 00 00 33 +R 00 00 00 09 +T 00 00 33 1E 03 89 1E 03 89 4B 54 4B 9F 4B 0C 4B +R 00 00 00 09 +T 00 00 40 3F CD 00 00 5B 08 4D 27 74 1E 03 89 1E +R 00 00 00 09 02 05 00 03 +T 00 00 4D 03 89 1E 07 89 1E 07 89 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 05 +T 00 00 5A 1F 0B 17 09 1E 0B 89 1E 0B 89 CD 00 00 +R 00 00 00 09 02 0E 00 02 +T 00 00 67 5B 04 1F 0B 17 09 5F 89 4B 80 4B 3F 1E +R 00 00 00 09 +T 00 00 74 0F 89 1E 0F 89 CD 00 00 5B 08 1F 0B 17 +R 00 00 00 09 02 09 00 05 +T 00 00 81 09 1E 0B 89 1E 0B 89 5F 89 4B 80 4B 3F +R 00 00 00 09 +T 00 00 8E CD 00 00 5B 08 89 90 89 5F 89 4B 00 4B +R 00 00 00 09 02 04 00 07 +T 00 00 9B 3F CD 00 00 5B 08 1F 0B 17 09 1E 0B 89 +R 00 00 00 09 02 05 00 00 +T 00 00 A8 1E 0B 89 1E 0F 89 1E 0F 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 05 +T 00 00 B5 08 1F 0B 17 09 CC 01 6B +R 00 00 00 09 00 09 00 09 +T 00 00 BD +R 00 00 00 09 +T 00 00 BD 5F 89 4B 80 4B 39 1E 07 89 1E 07 89 CD +R 00 00 00 09 +T 00 00 CA 00 00 5B 08 4D 27 0B 16 03 17 0B 16 01 +R 00 00 00 09 02 03 00 03 +T 00 00 D7 17 09 CC 01 6B +R 00 00 00 09 00 06 00 09 +T 00 00 DC +R 00 00 00 09 +T 00 00 DC 1E 03 89 1E 03 89 1E 07 89 1E 07 89 CD +R 00 00 00 09 +T 00 00 E9 00 00 5B 08 1F 07 17 05 1E 07 89 1E 07 +R 00 00 00 09 02 03 00 01 +T 00 00 F6 89 4B B2 4B 11 4B 7B 4B BB CD 00 00 5B +R 00 00 00 09 02 0D 00 01 +T 00 01 03 08 4B C6 4B E2 4B 52 4B BF 89 90 89 CD +R 00 00 00 09 +T 00 01 10 00 00 5B 08 1F 0B 1E 07 89 1E 07 89 1E +R 00 00 00 09 02 03 00 05 +T 00 01 1D 0F 89 90 89 CD 00 00 5B 08 1F 0B 17 09 +R 00 00 00 09 02 08 00 01 +T 00 01 2A 4B 1A 4B 2A 4B 1E 4B 40 1E 0B 89 1E 0B +R 00 00 00 09 +T 00 01 37 89 CD 00 00 5B 08 89 90 89 1E 0F 89 1E +R 00 00 00 09 02 05 00 05 +T 00 01 44 0F 89 CD 00 00 5B 08 89 90 89 1E 07 89 +R 00 00 00 09 02 06 00 07 +T 00 01 51 1E 07 89 CD 00 00 5B 08 89 90 89 1E 07 +R 00 00 00 09 02 07 00 01 +T 00 01 5E 89 1E 07 89 CD 00 00 5B 08 1F 0B 17 09 +R 00 00 00 09 02 08 00 05 +T 00 01 6B +R 00 00 00 09 +T 00 01 6B 5F 89 5F 89 1E 15 89 1E 15 89 CD 00 00 +R 00 00 00 09 02 0E 00 03 +T 00 01 78 5B 08 4D 27 0B 16 0B 1E 09 58 8C 56 17 +R 00 00 00 09 +T 00 01 85 0B 1F 09 +R 00 00 00 09 +T 00 01 88 +R 00 00 00 09 +T 00 01 88 1E 0B 16 09 5B 0C 81 +R 00 00 00 09 diff --git a/device/lib/stm8/tanhf.sym b/device/lib/stm8/tanhf.sym new file mode 100644 index 0000000..db7fd9c --- /dev/null +++ b/device/lib/stm8/tanhf.sym @@ -0,0 +1,35 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + ___fsadd ****** GX + ___fsdiv ****** GX + ___fslt ****** GX + ___fsmul ****** GX + ___fssub ****** GX + _expf ****** GX + _fabsf ****** GX + 9 _tanhf 000000 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 18F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/time.asm b/device/lib/stm8/time.asm new file mode 100644 index 0000000..c3356fe --- /dev/null +++ b/device/lib/stm8/time.asm @@ -0,0 +1,988 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module time + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl ___day + .globl ___month + .globl _RtcRead + .globl _sprintf + .globl _time + .globl _asctime + .globl _ctime + .globl _localtime + .globl _gmtime + .globl _mktime +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +_ascTimeBuffer: + .ds 32 +_lastTime: + .ds 12 +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../time.c: 42: unsigned char RtcRead(struct tm *timeptr) { +; ----------------------------------------- +; function RtcRead +; ----------------------------------------- +_RtcRead: +; ../time.c: 45: return 0; + clr a +; ../time.c: 46: } + ret +; ../time.c: 50: time_t time(time_t *timeptr) { +; ----------------------------------------- +; function time +; ----------------------------------------- +_time: + sub sp, #16 +; ../time.c: 52: time_t t=(time_t) -1; + ldw x, #0xffff + ldw (0x0f, sp), x + ldw x, #0xffff + ldw (0x0d, sp), x +; ../time.c: 54: if (RtcRead(&now)) { + ldw x, sp + incw x + ldw y, x + pushw x + pushw y + call _RtcRead + addw sp, #2 + popw x + tnz a + jreq 00102$ +; ../time.c: 55: t=mktime(&now); + pushw x + call _mktime + addw sp, #2 + ldw (0x0f, sp), x + ldw (0x0d, sp), y +00102$: +; ../time.c: 57: if (timeptr) { +; ../time.c: 58: *timeptr=t; + ldw x, (0x13, sp) + jreq 00104$ + ldw y, (0x0f, sp) + ldw (0x2, x), y + ldw y, (0x0d, sp) + ldw (x), y +00104$: +; ../time.c: 60: return t; + ldw x, (0x0f, sp) + ldw y, (0x0d, sp) +; ../time.c: 61: } + addw sp, #16 + ret +; ../time.c: 73: static void CheckTime(struct tm *timeptr) { +; ----------------------------------------- +; function CheckTime +; ----------------------------------------- +_CheckTime: +; ../time.c: 84: if (timeptr->tm_sec>59) timeptr->tm_sec=59; + ldw y, (0x03, sp) + ld a, (y) + cp a, #0x3b + jrule 00102$ + ld a, #0x3b + ld (y), a +00102$: +; ../time.c: 85: if (timeptr->tm_min>59) timeptr->tm_min=59; + ldw x, y + incw x + ld a, (x) + cp a, #0x3b + jrule 00104$ + ld a, #0x3b + ld (x), a +00104$: +; ../time.c: 86: if (timeptr->tm_hour>23) timeptr->tm_hour=23; + ldw x, y + incw x + incw x + ld a, (x) + cp a, #0x17 + jrule 00106$ + ld a, #0x17 + ld (x), a +00106$: +; ../time.c: 87: if (timeptr->tm_wday>6) timeptr->tm_wday=6; + ldw x, y + addw x, #0x0007 + ld a, (x) + cp a, #0x06 + jrule 00108$ + ld a, #0x06 + ld (x), a +00108$: +; ../time.c: 88: if (timeptr->tm_mday<1) timeptr->tm_mday=1; + ldw x, y + addw x, #0x0003 + ld a, (x) + cp a, #0x01 + jrnc 00112$ + ld a, #0x01 + ld (x), a + jra 00113$ +00112$: +; ../time.c: 89: else if (timeptr->tm_mday>31) timeptr->tm_mday=31; + cp a, #0x1f + jrule 00113$ + ld a, #0x1f + ld (x), a +00113$: +; ../time.c: 90: if (timeptr->tm_mon>11) timeptr->tm_mon=11; + ldw x, y + addw x, #0x0004 + ld a, (x) + cp a, #0x0b + jrule 00115$ + ld a, #0x0b + ld (x), a +00115$: +; ../time.c: 91: if (timeptr->tm_year<0) timeptr->tm_year=0; + addw y, #0x0005 + ldw x, y + ldw x, (x) + jrmi 00167$ + ret +00167$: + ldw x, y + clr (0x1, x) + clr (x) +; ../time.c: 92: } + ret +; ../time.c: 95: char *asctime(struct tm *timeptr) { +; ----------------------------------------- +; function asctime +; ----------------------------------------- +_asctime: + sub sp, #12 +; ../time.c: 96: CheckTime(timeptr); + ldw x, (0x0f, sp) + pushw x + call _CheckTime + addw sp, #2 +; ../time.c: 100: timeptr->tm_year+1900); + ldw y, (0x0f, sp) + ldw x, y + ldw x, (0x5, x) + addw x, #0x076c + ldw (0x01, sp), x +; ../time.c: 99: timeptr->tm_hour, timeptr->tm_min, timeptr->tm_sec, + ld a, (y) + ld (0x04, sp), a + clr (0x03, sp) + ldw x, y + ld a, (0x1, x) + ld (0x06, sp), a + clr (0x05, sp) + ldw x, y + ld a, (0x2, x) + ld (0x08, sp), a + clr (0x07, sp) +; ../time.c: 98: __day[timeptr->tm_wday], __month[timeptr->tm_mon], timeptr->tm_mday, + ldw x, y + ld a, (0x3, x) + ld (0x0a, sp), a + clr (0x09, sp) + ldw x, y + ld a, (0x4, x) + clrw x + ld xl, a + sllw x + addw x, #(___month + 0) + ldw x, (x) + ldw (0x0b, sp), x + ld a, (0x7, y) + clrw x + ld xl, a + sllw x + addw x, #(___day + 0) + ldw x, (x) + ldw y, x +; ../time.c: 97: sprintf (ascTimeBuffer, "%s %s %2d %02d:%02d:%02d %04d\n", + ldw x, (0x01, sp) + pushw x + ldw x, (0x05, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + ldw x, (0x11, sp) + pushw x + ldw x, (0x15, sp) + pushw x + pushw y + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + push #<(_ascTimeBuffer + 0) + push #((_ascTimeBuffer + 0) >> 8) + call _sprintf + addw sp, #18 +; ../time.c: 101: return ascTimeBuffer; + ldw x, #(_ascTimeBuffer + 0) +; ../time.c: 102: } + addw sp, #12 + ret +; ../time.c: 104: char *ctime(time_t *timep) { +; ----------------------------------------- +; function ctime +; ----------------------------------------- +_ctime: +; ../time.c: 105: return asctime(localtime(timep)); + ldw x, (0x03, sp) + pushw x + call _localtime + addw sp, #2 + pushw x + call _asctime + addw sp, #2 +; ../time.c: 106: } + ret +; ../time.c: 121: struct tm *localtime(time_t *timep) { +; ----------------------------------------- +; function localtime +; ----------------------------------------- +_localtime: +; ../time.c: 122: return gmtime(timep); + ldw x, (0x03, sp) + pushw x + call _gmtime + addw sp, #2 +; ../time.c: 123: } + ret +; ../time.c: 125: struct tm *gmtime(time_t *timep) { +; ----------------------------------------- +; function gmtime +; ----------------------------------------- +_gmtime: + sub sp, #20 +; ../time.c: 126: unsigned long epoch=*timep; + ldw x, (0x17, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ldw (0x13, sp), y + ldw (0x11, sp), x +; ../time.c: 131: lastTime.tm_sec=epoch%60; + push #0x3c + clrw x + pushw x + push #0x00 + ldw x, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + call __modulong + addw sp, #8 + ld a, xl + ld _lastTime+0, a +; ../time.c: 132: epoch/=60; // now it is minutes + push #0x3c + clrw x + pushw x + push #0x00 + ldw x, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + call __divulong + addw sp, #8 + ldw (0x11, sp), x + ldw (0x0f, sp), y +; ../time.c: 133: lastTime.tm_min=epoch%60; + ldw x, #(_lastTime + 0)+1 + ldw (0x13, sp), x + push #0x3c + clrw x + pushw x + push #0x00 + ldw x, (0x15, sp) + pushw x + ldw x, (0x15, sp) + pushw x + call __modulong + addw sp, #8 + ld a, xl + ldw x, (0x13, sp) + ld (x), a +; ../time.c: 134: epoch/=60; // now it is hours + push #0x3c + clrw x + pushw x + push #0x00 + ldw x, (0x15, sp) + pushw x + ldw x, (0x15, sp) + pushw x + call __divulong + addw sp, #8 + ldw (0x11, sp), x + ldw (0x0f, sp), y +; ../time.c: 135: lastTime.tm_hour=epoch%24; + ldw x, #(_lastTime + 0)+2 + ldw (0x13, sp), x + push #0x18 + clrw x + pushw x + push #0x00 + ldw x, (0x15, sp) + pushw x + ldw x, (0x15, sp) + pushw x + call __modulong + addw sp, #8 + ld a, xl + ldw x, (0x13, sp) + ld (x), a +; ../time.c: 136: epoch/=24; // now it is days + push #0x18 + clrw x + pushw x + push #0x00 + ldw x, (0x15, sp) + pushw x + ldw x, (0x15, sp) + pushw x + call __divulong + addw sp, #8 + ldw (0x07, sp), x + ldw (0x05, sp), y +; ../time.c: 137: lastTime.tm_wday=(epoch+4)%7; + ldw x, #(_lastTime + 0)+7 + ldw (0x13, sp), x + ldw x, (0x07, sp) + addw x, #0x0004 + ldw y, (0x05, sp) + jrnc 00164$ + incw y +00164$: + push #0x07 + push #0x00 + push #0x00 + push #0x00 + pushw x + pushw y + call __modulong + addw sp, #8 + ld a, xl + ldw x, (0x13, sp) + ld (x), a +; ../time.c: 140: days=0; + clrw x + ldw (0x0b, sp), x + ldw (0x09, sp), x +; ../time.c: 141: while((days += (LEAP_YEAR(year) ? 366 : 365)) <= epoch) { + ldw x, #0x07b2 + ldw (0x13, sp), x +00101$: + ld a, (0x14, sp) + and a, #0x03 + ld (0x0e, sp), a + clr (0x0d, sp) + ldw x, (0x0d, sp) + jrne 00118$ + ldw x, #0x016e + ldw (0x11, sp), x + jra 00119$ +00118$: + ldw x, #0x016d + ldw (0x11, sp), x +00119$: + ldw y, (0x11, sp) + ldw (0x03, sp), y + ld a, (0x03, sp) + rlc a + clr a + sbc a, #0x00 + ld (0x02, sp), a + ld (0x01, sp), a + ldw x, (0x0b, sp) + addw x, (0x03, sp) + ldw (0x11, sp), x + ld a, (0x0a, sp) + adc a, (0x02, sp) + ld (0x10, sp), a + ld a, (0x09, sp) + adc a, (0x01, sp) + ld (0x0f, sp), a + ldw y, (0x11, sp) + ldw (0x0b, sp), y + ldw y, (0x0f, sp) + ldw (0x09, sp), y + ldw x, (0x07, sp) + cpw x, (0x11, sp) + ld a, (0x06, sp) + sbc a, (0x10, sp) + ld a, (0x05, sp) + sbc a, (0x0f, sp) + jrc 00103$ +; ../time.c: 142: year++; + ldw x, (0x13, sp) + incw x + ldw (0x13, sp), x + jra 00101$ +00103$: +; ../time.c: 144: lastTime.tm_year=year-1900; + ldw x, #(_lastTime + 0)+5 + ldw (0x0f, sp), x + ldw x, (0x13, sp) + subw x, #0x076c + ldw (0x11, sp), x + ldw x, (0x0f, sp) + ldw y, (0x11, sp) + ldw (x), y +; ../time.c: 146: days -= LEAP_YEAR(year) ? 366 : 365; + ldw y, (0x0d, sp) + ldw (0x13, sp), y + ldw x, (0x0d, sp) + jrne 00120$ + ldw x, #0x016e + ldw (0x11, sp), x + jra 00121$ +00120$: + ldw x, #0x016d + ldw (0x11, sp), x +00121$: + ldw y, (0x11, sp) + ldw (0x03, sp), y + ld a, (0x03, sp) + rlc a + clr a + sbc a, #0x00 + ld (0x02, sp), a + ld (0x01, sp), a + ldw x, (0x0b, sp) + subw x, (0x03, sp) + ldw (0x11, sp), x + ld a, (0x0a, sp) + sbc a, (0x02, sp) + ld (0x10, sp), a + ld a, (0x09, sp) + sbc a, (0x01, sp) + ld (0x0f, sp), a +; ../time.c: 147: epoch -= days; // now it is days in this year, starting at 0 + ldw x, (0x07, sp) + subw x, (0x11, sp) + ldw (0x0d, sp), x + ld a, (0x06, sp) + sbc a, (0x10, sp) + ld (0x0c, sp), a + ld a, (0x05, sp) + sbc a, (0x0f, sp) + ld (0x0b, sp), a + ldw y, (0x0d, sp) + ldw (0x08, sp), y + ldw y, (0x0b, sp) + ldw (0x06, sp), y +; ../time.c: 148: lastTime.tm_yday=epoch; + ldw x, #(_lastTime + 0)+8 + ldw y, (0x08, sp) + ldw (x), y +; ../time.c: 153: for (month=0; month<12; month++) { + clr (0x12, sp) +00114$: +; ../time.c: 154: if (month==1) { // februari + ld a, (0x12, sp) + dec a + jrne 00108$ +; ../time.c: 155: if (LEAP_YEAR(year)) { + ldw x, (0x13, sp) + jrne 00105$ +; ../time.c: 156: monthLength=29; + ld a, #0x1d + jra 00109$ +00105$: +; ../time.c: 158: monthLength=28; + ld a, #0x1c + jra 00109$ +00108$: +; ../time.c: 161: monthLength = monthDays[month]; + ld a, (0x12, sp) + add a, #<(_monthDays + 0) + push a + clr a + adc a, #((_monthDays + 0) >> 8) + ld xh, a + pop a + ld xl, a + ld a, (x) +00109$: +; ../time.c: 164: if (epoch>=monthLength) { + ld (0x11, sp), a + clr (0x10, sp) + clr (0x0f, sp) + clr (0x0e, sp) + ldw x, (0x08, sp) + cpw x, (0x10, sp) + ld a, (0x07, sp) + sbc a, (0x0f, sp) + ld a, (0x06, sp) + sbc a, (0x0e, sp) + jrc 00113$ +; ../time.c: 165: epoch-=monthLength; + ldw y, (0x08, sp) + subw y, (0x10, sp) + ld a, (0x07, sp) + sbc a, (0x0f, sp) + ld xl, a + ld a, (0x06, sp) + sbc a, (0x0e, sp) + ld xh, a + ldw (0x08, sp), y + ldw (0x06, sp), x +; ../time.c: 153: for (month=0; month<12; month++) { + inc (0x12, sp) + ld a, (0x12, sp) + cp a, #0x0c + jrc 00114$ +00113$: +; ../time.c: 170: lastTime.tm_mon=month; + ldw x, #(_lastTime + 0)+4 + ld a, (0x12, sp) + ld (x), a +; ../time.c: 171: lastTime.tm_mday=epoch+1; + ldw x, #(_lastTime + 0)+3 + ld a, (0x09, sp) + inc a + ld (x), a +; ../time.c: 173: lastTime.tm_isdst=0; + ldw x, #(_lastTime + 0)+10 + clr (x) +; ../time.c: 175: return &lastTime; + ldw x, #(_lastTime + 0) +; ../time.c: 176: } + addw sp, #20 + ret +; ../time.c: 179: time_t mktime(struct tm *timeptr) { +; ----------------------------------------- +; function mktime +; ----------------------------------------- +_mktime: + sub sp, #18 +; ../time.c: 180: int year=timeptr->tm_year+1900, month=timeptr->tm_mon, i; + ldw y, (0x15, sp) + ldw (0x01, sp), y + ldw x, y + ldw x, (0x5, x) + addw x, #0x076c + ldw (0x0b, sp), x + ldw x, (0x01, sp) + ld a, (0x4, x) + clrw x + ld xl, a + ldw (0x03, sp), x +; ../time.c: 183: CheckTime(timeptr); + ldw x, (0x01, sp) + pushw x + call _CheckTime + addw sp, #2 +; ../time.c: 186: seconds= (year-1970)*(60*60*24L*365); + ldw x, (0x0b, sp) + subw x, #0x07b2 + clrw y + tnzw x + jrpl 00154$ + decw y +00154$: + pushw x + pushw y + push #0x80 + push #0x33 + push #0xe1 + push #0x01 + call __mullong + addw sp, #8 +; ../time.c: 189: for (i=1970; i<year; i++) { + ldw (0x11, sp), x + ldw (0x0f, sp), y + ldw x, #0x07b2 + ldw (0x0d, sp), x +00110$: + ldw x, (0x0d, sp) + cpw x, (0x0b, sp) + jrsge 00124$ +; ../time.c: 190: if (LEAP_YEAR(i)) { + push #0x04 + push #0x00 + ldw x, (0x0f, sp) + pushw x + call __modsint + addw sp, #4 + tnzw x + jrne 00111$ +; ../time.c: 191: seconds+= 60*60*24L; + ldw x, (0x11, sp) + addw x, #0x5180 + ldw (0x11, sp), x + ld a, (0x10, sp) + adc a, #0x01 + ld (0x10, sp), a + ld a, (0x0f, sp) + adc a, #0x00 + ld (0x0f, sp), a +00111$: +; ../time.c: 189: for (i=1970; i<year; i++) { + ldw x, (0x0d, sp) + incw x + ldw (0x0d, sp), x + jra 00110$ +00124$: + ldw y, (0x11, sp) + ldw (0x07, sp), y + ldw y, (0x0f, sp) + ldw (0x05, sp), y +; ../time.c: 196: for (i=0; i<month; i++) { + push #0x04 + push #0x00 + ldw x, (0x0d, sp) + pushw x + call __modsint + addw sp, #4 + ldw (0x09, sp), x + clrw y +00113$: + exgw x, y + cpw x, (0x03, sp) + exgw x, y + jrsge 00108$ +; ../time.c: 197: if (i==1 && LEAP_YEAR(year)) { + cpw y, #0x0001 + jrne 00105$ + ldw x, (0x09, sp) + jrne 00105$ +; ../time.c: 198: seconds+= 60*60*24L*29; + ldw x, (0x07, sp) + addw x, #0x3b80 + ldw (0x11, sp), x + ldw x, (0x05, sp) + jrnc 00163$ + incw x +00163$: + addw x, #0x0026 + ldw (0x05, sp), x + ldw x, (0x11, sp) + ldw (0x07, sp), x + jra 00114$ +00105$: +; ../time.c: 200: seconds+= 60*60*24L*monthDays[i]; + ldw x, y + addw x, #(_monthDays + 0) + ld a, (x) + ld (0x12, sp), a + clr (0x11, sp) + clr (0x10, sp) + clr (0x0f, sp) + pushw y + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + push #0x80 + push #0x51 + push #0x01 + push #0x00 + call __mullong + addw sp, #8 + ldw (0x0f, sp), x + ldw (0x0d, sp), y + popw y + ldw x, (0x07, sp) + addw x, (0x0d, sp) + ldw (0x11, sp), x + ldw x, (0x05, sp) + jrnc 00164$ + incw x +00164$: + addw x, (0x0b, sp) + ldw (0x05, sp), x + ldw x, (0x11, sp) + ldw (0x07, sp), x +00114$: +; ../time.c: 196: for (i=0; i<month; i++) { + incw y + jra 00113$ +00108$: +; ../time.c: 204: seconds+= (timeptr->tm_mday-1)*60*60*24L; + ldw x, (0x01, sp) + ld a, (0x3, x) + clrw x + ld xl, a + decw x + clrw y + tnzw x + jrpl 00165$ + decw y +00165$: + pushw x + pushw y + push #0x80 + push #0x51 + push #0x01 + push #0x00 + call __mullong + addw sp, #8 + exgw x, y + addw y, (0x07, sp) + ld a, xl + adc a, (0x06, sp) + rlwa x + adc a, (0x05, sp) + ld xh, a + ldw (0x11, sp), y + ldw (0x0f, sp), x +; ../time.c: 205: seconds+= timeptr->tm_hour*60*60L; + ldw x, (0x01, sp) + ld a, (0x2, x) + clrw x + ld xl, a + clrw y + pushw x + pushw y + push #0x10 + push #0x0e + clrw x + pushw x + call __mullong + addw sp, #8 + ld a, yl + addw x, (0x11, sp) + adc a, (0x10, sp) + rlwa y + adc a, (0x0f, sp) + ld yh, a + ldw (0x0d, sp), x +; ../time.c: 206: seconds+= timeptr->tm_min*60; + ldw x, (0x01, sp) + ld a, (0x1, x) + clrw x + ld xl, a + pushw x + sllw x + sllw x + sllw x + sllw x + subw x, (1, sp) + sllw x + sllw x + addw sp, #2 + ldw (0x11, sp), x + ld a, (0x11, sp) + rlc a + clr a + sbc a, #0x00 + ld (0x10, sp), a + ld (0x0f, sp), a + ldw x, (0x0d, sp) + addw x, (0x11, sp) + ld a, yl + adc a, (0x10, sp) + push a + ld a, yh + adc a, (0x10, sp) + ld yh, a + pop a + ldw (0x11, sp), x + ld (0x10, sp), a +; ../time.c: 207: seconds+= timeptr->tm_sec; + ldw x, (0x01, sp) + ld a, (x) + clrw x + ld xl, a + ldw (0x0d, sp), x + ld a, (0x0d, sp) + rlc a + clr a + sbc a, #0x00 + ld (0x0c, sp), a + ld (0x0b, sp), a + ldw x, (0x11, sp) + addw x, (0x0d, sp) + ld a, (0x10, sp) + adc a, (0x0c, sp) + rlwa y + adc a, (0x0b, sp) + ld yh, a +; ../time.c: 208: return seconds; +; ../time.c: 209: } + addw sp, #18 + ret + .area CODE + .area CONST +_monthDays: + .db #0x1f ; 31 + .db #0x1c ; 28 + .db #0x1f ; 31 + .db #0x1e ; 30 + .db #0x1f ; 31 + .db #0x1e ; 30 + .db #0x1f ; 31 + .db #0x1f ; 31 + .db #0x1e ; 30 + .db #0x1f ; 31 + .db #0x1e ; 30 + .db #0x1f ; 31 +___month: + .dw __str_1 + .dw __str_2 + .dw __str_3 + .dw __str_4 + .dw __str_5 + .dw __str_6 + .dw __str_7 + .dw __str_8 + .dw __str_9 + .dw __str_10 + .dw __str_11 + .dw __str_12 +___day: + .dw __str_13 + .dw __str_14 + .dw __str_15 + .dw __str_16 + .dw __str_17 + .dw __str_18 + .dw __str_19 + .area CONST +___str_0: + .ascii "%s %s %2d %02d:%02d:%02d %04d" + .db 0x0a + .db 0x00 + .area CODE + .area CONST +__str_1: + .ascii "Jan" + .db 0x00 + .area CODE + .area CONST +__str_2: + .ascii "Feb" + .db 0x00 + .area CODE + .area CONST +__str_3: + .ascii "Mar" + .db 0x00 + .area CODE + .area CONST +__str_4: + .ascii "Apr" + .db 0x00 + .area CODE + .area CONST +__str_5: + .ascii "May" + .db 0x00 + .area CODE + .area CONST +__str_6: + .ascii "Jun" + .db 0x00 + .area CODE + .area CONST +__str_7: + .ascii "Jul" + .db 0x00 + .area CODE + .area CONST +__str_8: + .ascii "Aug" + .db 0x00 + .area CODE + .area CONST +__str_9: + .ascii "Sep" + .db 0x00 + .area CODE + .area CONST +__str_10: + .ascii "Oct" + .db 0x00 + .area CODE + .area CONST +__str_11: + .ascii "Nov" + .db 0x00 + .area CODE + .area CONST +__str_12: + .ascii "Dec" + .db 0x00 + .area CODE + .area CONST +__str_13: + .ascii "Sun" + .db 0x00 + .area CODE + .area CONST +__str_14: + .ascii "Mon" + .db 0x00 + .area CODE + .area CONST +__str_15: + .ascii "Tue" + .db 0x00 + .area CODE + .area CONST +__str_16: + .ascii "Wed" + .db 0x00 + .area CODE + .area CONST +__str_17: + .ascii "Thu" + .db 0x00 + .area CODE + .area CONST +__str_18: + .ascii "Fri" + .db 0x00 + .area CODE + .area CONST +__str_19: + .ascii "Sat" + .db 0x00 + .area CODE + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/time.lst b/device/lib/stm8/time.lst new file mode 100644 index 0000000..a342816 --- /dev/null +++ b/device/lib/stm8/time.lst @@ -0,0 +1,992 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module time + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___day + 12 .globl ___month + 13 .globl _RtcRead + 14 .globl _sprintf + 15 .globl _time + 16 .globl _asctime + 17 .globl _ctime + 18 .globl _localtime + 19 .globl _gmtime + 20 .globl _mktime + 21 ;-------------------------------------------------------- + 22 ; ram data + 23 ;-------------------------------------------------------- + 24 .area DATA + 000000 25 _ascTimeBuffer: + 000000 26 .ds 32 + 000020 27 _lastTime: + 000020 28 .ds 12 + 29 ;-------------------------------------------------------- + 30 ; ram data + 31 ;-------------------------------------------------------- + 32 .area INITIALIZED + 33 ;-------------------------------------------------------- + 34 ; absolute external ram data + 35 ;-------------------------------------------------------- + 36 .area DABS (ABS) + 37 + 38 ; default segment ordering for linker + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area CONST + 43 .area INITIALIZER + 44 .area CODE + 45 + 46 ;-------------------------------------------------------- + 47 ; global & static initialisations + 48 ;-------------------------------------------------------- + 49 .area HOME + 50 .area GSINIT + 51 .area GSFINAL + 52 .area GSINIT + 53 ;-------------------------------------------------------- + 54 ; Home + 55 ;-------------------------------------------------------- + 56 .area HOME + 57 .area HOME + 58 ;-------------------------------------------------------- + 59 ; code + 60 ;-------------------------------------------------------- + 61 .area CODE + 62 ; ../time.c: 42: unsigned char RtcRead(struct tm *timeptr) { + 63 ; ----------------------------------------- + 64 ; function RtcRead + 65 ; ----------------------------------------- + 000000 66 _RtcRead: + 67 ; ../time.c: 45: return 0; + 000000 4F [ 1] 68 clr a + 69 ; ../time.c: 46: } + 000001 81 [ 4] 70 ret + 71 ; ../time.c: 50: time_t time(time_t *timeptr) { + 72 ; ----------------------------------------- + 73 ; function time + 74 ; ----------------------------------------- + 000002 75 _time: + 000002 52 10 [ 2] 76 sub sp, #16 + 77 ; ../time.c: 52: time_t t=(time_t) -1; + 000004 AE FF FF [ 2] 78 ldw x, #0xffff + 000007 1F 0F [ 2] 79 ldw (0x0f, sp), x + 000009 AE FF FF [ 2] 80 ldw x, #0xffff + 00000C 1F 0D [ 2] 81 ldw (0x0d, sp), x + 82 ; ../time.c: 54: if (RtcRead(&now)) { + 00000E 96 [ 1] 83 ldw x, sp + 00000F 5C [ 1] 84 incw x + 000010 90 93 [ 1] 85 ldw y, x + 000012 89 [ 2] 86 pushw x + 000013 90 89 [ 2] 87 pushw y + 000015 CDr00r00 [ 4] 88 call _RtcRead + 000018 5B 02 [ 2] 89 addw sp, #2 + 00001A 85 [ 2] 90 popw x + 00001B 4D [ 1] 91 tnz a + 00001C 27 0A [ 1] 92 jreq 00102$ + 93 ; ../time.c: 55: t=mktime(&now); + 00001E 89 [ 2] 94 pushw x + 00001F CDr03r04 [ 4] 95 call _mktime + 000022 5B 02 [ 2] 96 addw sp, #2 + 000024 1F 0F [ 2] 97 ldw (0x0f, sp), x + 000026 17 0D [ 2] 98 ldw (0x0d, sp), y + 000028 99 00102$: + 100 ; ../time.c: 57: if (timeptr) { + 101 ; ../time.c: 58: *timeptr=t; + 000028 1E 13 [ 2] 102 ldw x, (0x13, sp) + 00002A 27 07 [ 1] 103 jreq 00104$ + 00002C 16 0F [ 2] 104 ldw y, (0x0f, sp) + 00002E EF 02 [ 2] 105 ldw (0x2, x), y + 000030 16 0D [ 2] 106 ldw y, (0x0d, sp) + 000032 FF [ 2] 107 ldw (x), y + 000033 108 00104$: + 109 ; ../time.c: 60: return t; + 000033 1E 0F [ 2] 110 ldw x, (0x0f, sp) + 000035 16 0D [ 2] 111 ldw y, (0x0d, sp) + 112 ; ../time.c: 61: } + 000037 5B 10 [ 2] 113 addw sp, #16 + 000039 81 [ 4] 114 ret + 115 ; ../time.c: 73: static void CheckTime(struct tm *timeptr) { + 116 ; ----------------------------------------- + 117 ; function CheckTime + 118 ; ----------------------------------------- + 00003A 119 _CheckTime: + 120 ; ../time.c: 84: if (timeptr->tm_sec>59) timeptr->tm_sec=59; + 00003A 16 03 [ 2] 121 ldw y, (0x03, sp) + 00003C 90 F6 [ 1] 122 ld a, (y) + 00003E A1 3B [ 1] 123 cp a, #0x3b + 000040 23 04 [ 2] 124 jrule 00102$ + 000042 A6 3B [ 1] 125 ld a, #0x3b + 000044 90 F7 [ 1] 126 ld (y), a + 000046 127 00102$: + 128 ; ../time.c: 85: if (timeptr->tm_min>59) timeptr->tm_min=59; + 000046 93 [ 1] 129 ldw x, y + 000047 5C [ 1] 130 incw x + 000048 F6 [ 1] 131 ld a, (x) + 000049 A1 3B [ 1] 132 cp a, #0x3b + 00004B 23 03 [ 2] 133 jrule 00104$ + 00004D A6 3B [ 1] 134 ld a, #0x3b + 00004F F7 [ 1] 135 ld (x), a + 000050 136 00104$: + 137 ; ../time.c: 86: if (timeptr->tm_hour>23) timeptr->tm_hour=23; + 000050 93 [ 1] 138 ldw x, y + 000051 5C [ 1] 139 incw x + 000052 5C [ 1] 140 incw x + 000053 F6 [ 1] 141 ld a, (x) + 000054 A1 17 [ 1] 142 cp a, #0x17 + 000056 23 03 [ 2] 143 jrule 00106$ + 000058 A6 17 [ 1] 144 ld a, #0x17 + 00005A F7 [ 1] 145 ld (x), a + 00005B 146 00106$: + 147 ; ../time.c: 87: if (timeptr->tm_wday>6) timeptr->tm_wday=6; + 00005B 93 [ 1] 148 ldw x, y + 00005C 1C 00 07 [ 2] 149 addw x, #0x0007 + 00005F F6 [ 1] 150 ld a, (x) + 000060 A1 06 [ 1] 151 cp a, #0x06 + 000062 23 03 [ 2] 152 jrule 00108$ + 000064 A6 06 [ 1] 153 ld a, #0x06 + 000066 F7 [ 1] 154 ld (x), a + 000067 155 00108$: + 156 ; ../time.c: 88: if (timeptr->tm_mday<1) timeptr->tm_mday=1; + 000067 93 [ 1] 157 ldw x, y + 000068 1C 00 03 [ 2] 158 addw x, #0x0003 + 00006B F6 [ 1] 159 ld a, (x) + 00006C A1 01 [ 1] 160 cp a, #0x01 + 00006E 24 05 [ 1] 161 jrnc 00112$ + 000070 A6 01 [ 1] 162 ld a, #0x01 + 000072 F7 [ 1] 163 ld (x), a + 000073 20 07 [ 2] 164 jra 00113$ + 000075 165 00112$: + 166 ; ../time.c: 89: else if (timeptr->tm_mday>31) timeptr->tm_mday=31; + 000075 A1 1F [ 1] 167 cp a, #0x1f + 000077 23 03 [ 2] 168 jrule 00113$ + 000079 A6 1F [ 1] 169 ld a, #0x1f + 00007B F7 [ 1] 170 ld (x), a + 00007C 171 00113$: + 172 ; ../time.c: 90: if (timeptr->tm_mon>11) timeptr->tm_mon=11; + 00007C 93 [ 1] 173 ldw x, y + 00007D 1C 00 04 [ 2] 174 addw x, #0x0004 + 000080 F6 [ 1] 175 ld a, (x) + 000081 A1 0B [ 1] 176 cp a, #0x0b + 000083 23 03 [ 2] 177 jrule 00115$ + 000085 A6 0B [ 1] 178 ld a, #0x0b + 000087 F7 [ 1] 179 ld (x), a + 000088 180 00115$: + 181 ; ../time.c: 91: if (timeptr->tm_year<0) timeptr->tm_year=0; + 000088 72 A9 00 05 [ 2] 182 addw y, #0x0005 + 00008C 93 [ 1] 183 ldw x, y + 00008D FE [ 2] 184 ldw x, (x) + 00008E 2B 01 [ 1] 185 jrmi 00167$ + 000090 81 [ 4] 186 ret + 000091 187 00167$: + 000091 93 [ 1] 188 ldw x, y + 000092 6F 01 [ 1] 189 clr (0x1, x) + 000094 7F [ 1] 190 clr (x) + 191 ; ../time.c: 92: } + 000095 81 [ 4] 192 ret + 193 ; ../time.c: 95: char *asctime(struct tm *timeptr) { + 194 ; ----------------------------------------- + 195 ; function asctime + 196 ; ----------------------------------------- + 000096 197 _asctime: + 000096 52 0C [ 2] 198 sub sp, #12 + 199 ; ../time.c: 96: CheckTime(timeptr); + 000098 1E 0F [ 2] 200 ldw x, (0x0f, sp) + 00009A 89 [ 2] 201 pushw x + 00009B CDr00r3A [ 4] 202 call _CheckTime + 00009E 5B 02 [ 2] 203 addw sp, #2 + 204 ; ../time.c: 100: timeptr->tm_year+1900); + 0000A0 16 0F [ 2] 205 ldw y, (0x0f, sp) + 0000A2 93 [ 1] 206 ldw x, y + 0000A3 EE 05 [ 2] 207 ldw x, (0x5, x) + 0000A5 1C 07 6C [ 2] 208 addw x, #0x076c + 0000A8 1F 01 [ 2] 209 ldw (0x01, sp), x + 210 ; ../time.c: 99: timeptr->tm_hour, timeptr->tm_min, timeptr->tm_sec, + 0000AA 90 F6 [ 1] 211 ld a, (y) + 0000AC 6B 04 [ 1] 212 ld (0x04, sp), a + 0000AE 0F 03 [ 1] 213 clr (0x03, sp) + 0000B0 93 [ 1] 214 ldw x, y + 0000B1 E6 01 [ 1] 215 ld a, (0x1, x) + 0000B3 6B 06 [ 1] 216 ld (0x06, sp), a + 0000B5 0F 05 [ 1] 217 clr (0x05, sp) + 0000B7 93 [ 1] 218 ldw x, y + 0000B8 E6 02 [ 1] 219 ld a, (0x2, x) + 0000BA 6B 08 [ 1] 220 ld (0x08, sp), a + 0000BC 0F 07 [ 1] 221 clr (0x07, sp) + 222 ; ../time.c: 98: __day[timeptr->tm_wday], __month[timeptr->tm_mon], timeptr->tm_mday, + 0000BE 93 [ 1] 223 ldw x, y + 0000BF E6 03 [ 1] 224 ld a, (0x3, x) + 0000C1 6B 0A [ 1] 225 ld (0x0a, sp), a + 0000C3 0F 09 [ 1] 226 clr (0x09, sp) + 0000C5 93 [ 1] 227 ldw x, y + 0000C6 E6 04 [ 1] 228 ld a, (0x4, x) + 0000C8 5F [ 1] 229 clrw x + 0000C9 97 [ 1] 230 ld xl, a + 0000CA 58 [ 2] 231 sllw x + 0000CB 1Cr00r0C [ 2] 232 addw x, #(___month + 0) + 0000CE FE [ 2] 233 ldw x, (x) + 0000CF 1F 0B [ 2] 234 ldw (0x0b, sp), x + 0000D1 90 E6 07 [ 1] 235 ld a, (0x7, y) + 0000D4 5F [ 1] 236 clrw x + 0000D5 97 [ 1] 237 ld xl, a + 0000D6 58 [ 2] 238 sllw x + 0000D7 1Cr00r24 [ 2] 239 addw x, #(___day + 0) + 0000DA FE [ 2] 240 ldw x, (x) + 0000DB 90 93 [ 1] 241 ldw y, x + 242 ; ../time.c: 97: sprintf (ascTimeBuffer, "%s %s %2d %02d:%02d:%02d %04d\n", + 0000DD 1E 01 [ 2] 243 ldw x, (0x01, sp) + 0000DF 89 [ 2] 244 pushw x + 0000E0 1E 05 [ 2] 245 ldw x, (0x05, sp) + 0000E2 89 [ 2] 246 pushw x + 0000E3 1E 09 [ 2] 247 ldw x, (0x09, sp) + 0000E5 89 [ 2] 248 pushw x + 0000E6 1E 0D [ 2] 249 ldw x, (0x0d, sp) + 0000E8 89 [ 2] 250 pushw x + 0000E9 1E 11 [ 2] 251 ldw x, (0x11, sp) + 0000EB 89 [ 2] 252 pushw x + 0000EC 1E 15 [ 2] 253 ldw x, (0x15, sp) + 0000EE 89 [ 2] 254 pushw x + 0000EF 90 89 [ 2] 255 pushw y + 0000F1 4Br32 [ 1] 256 push #<(___str_0 + 0) + 0000F3 4Bs00 [ 1] 257 push #((___str_0 + 0) >> 8) + 0000F5 4Br00 [ 1] 258 push #<(_ascTimeBuffer + 0) + 0000F7 4Bs00 [ 1] 259 push #((_ascTimeBuffer + 0) >> 8) + 0000F9 CDr00r00 [ 4] 260 call _sprintf + 0000FC 5B 12 [ 2] 261 addw sp, #18 + 262 ; ../time.c: 101: return ascTimeBuffer; + 0000FE AEr00r00 [ 2] 263 ldw x, #(_ascTimeBuffer + 0) + 264 ; ../time.c: 102: } + 000101 5B 0C [ 2] 265 addw sp, #12 + 000103 81 [ 4] 266 ret + 267 ; ../time.c: 104: char *ctime(time_t *timep) { + 268 ; ----------------------------------------- + 269 ; function ctime + 270 ; ----------------------------------------- + 000104 271 _ctime: + 272 ; ../time.c: 105: return asctime(localtime(timep)); + 000104 1E 03 [ 2] 273 ldw x, (0x03, sp) + 000106 89 [ 2] 274 pushw x + 000107 CDr01r13 [ 4] 275 call _localtime + 00010A 5B 02 [ 2] 276 addw sp, #2 + 00010C 89 [ 2] 277 pushw x + 00010D CDr00r96 [ 4] 278 call _asctime + 000110 5B 02 [ 2] 279 addw sp, #2 + 280 ; ../time.c: 106: } + 000112 81 [ 4] 281 ret + 282 ; ../time.c: 121: struct tm *localtime(time_t *timep) { + 283 ; ----------------------------------------- + 284 ; function localtime + 285 ; ----------------------------------------- + 000113 286 _localtime: + 287 ; ../time.c: 122: return gmtime(timep); + 000113 1E 03 [ 2] 288 ldw x, (0x03, sp) + 000115 89 [ 2] 289 pushw x + 000116 CDr01r1C [ 4] 290 call _gmtime + 000119 5B 02 [ 2] 291 addw sp, #2 + 292 ; ../time.c: 123: } + 00011B 81 [ 4] 293 ret + 294 ; ../time.c: 125: struct tm *gmtime(time_t *timep) { + 295 ; ----------------------------------------- + 296 ; function gmtime + 297 ; ----------------------------------------- + 00011C 298 _gmtime: + 00011C 52 14 [ 2] 299 sub sp, #20 + 300 ; ../time.c: 126: unsigned long epoch=*timep; + 00011E 1E 17 [ 2] 301 ldw x, (0x17, sp) + 000120 90 93 [ 1] 302 ldw y, x + 000122 90 EE 02 [ 2] 303 ldw y, (0x2, y) + 000125 FE [ 2] 304 ldw x, (x) + 000126 17 13 [ 2] 305 ldw (0x13, sp), y + 000128 1F 11 [ 2] 306 ldw (0x11, sp), x + 307 ; ../time.c: 131: lastTime.tm_sec=epoch%60; + 00012A 4B 3C [ 1] 308 push #0x3c + 00012C 5F [ 1] 309 clrw x + 00012D 89 [ 2] 310 pushw x + 00012E 4B 00 [ 1] 311 push #0x00 + 000130 1E 17 [ 2] 312 ldw x, (0x17, sp) + 000132 89 [ 2] 313 pushw x + 000133 1E 17 [ 2] 314 ldw x, (0x17, sp) + 000135 89 [ 2] 315 pushw x + 000136 CDr00r00 [ 4] 316 call __modulong + 000139 5B 08 [ 2] 317 addw sp, #8 + 00013B 9F [ 1] 318 ld a, xl + 00013C C7u00u20 [ 1] 319 ld _lastTime+0, a + 320 ; ../time.c: 132: epoch/=60; // now it is minutes + 00013F 4B 3C [ 1] 321 push #0x3c + 000141 5F [ 1] 322 clrw x + 000142 89 [ 2] 323 pushw x + 000143 4B 00 [ 1] 324 push #0x00 + 000145 1E 17 [ 2] 325 ldw x, (0x17, sp) + 000147 89 [ 2] 326 pushw x + 000148 1E 17 [ 2] 327 ldw x, (0x17, sp) + 00014A 89 [ 2] 328 pushw x + 00014B CDr00r00 [ 4] 329 call __divulong + 00014E 5B 08 [ 2] 330 addw sp, #8 + 000150 1F 11 [ 2] 331 ldw (0x11, sp), x + 000152 17 0F [ 2] 332 ldw (0x0f, sp), y + 333 ; ../time.c: 133: lastTime.tm_min=epoch%60; + 000154 AEr00r21 [ 2] 334 ldw x, #(_lastTime + 0)+1 + 000157 1F 13 [ 2] 335 ldw (0x13, sp), x + 000159 4B 3C [ 1] 336 push #0x3c + 00015B 5F [ 1] 337 clrw x + 00015C 89 [ 2] 338 pushw x + 00015D 4B 00 [ 1] 339 push #0x00 + 00015F 1E 15 [ 2] 340 ldw x, (0x15, sp) + 000161 89 [ 2] 341 pushw x + 000162 1E 15 [ 2] 342 ldw x, (0x15, sp) + 000164 89 [ 2] 343 pushw x + 000165 CDr00r00 [ 4] 344 call __modulong + 000168 5B 08 [ 2] 345 addw sp, #8 + 00016A 9F [ 1] 346 ld a, xl + 00016B 1E 13 [ 2] 347 ldw x, (0x13, sp) + 00016D F7 [ 1] 348 ld (x), a + 349 ; ../time.c: 134: epoch/=60; // now it is hours + 00016E 4B 3C [ 1] 350 push #0x3c + 000170 5F [ 1] 351 clrw x + 000171 89 [ 2] 352 pushw x + 000172 4B 00 [ 1] 353 push #0x00 + 000174 1E 15 [ 2] 354 ldw x, (0x15, sp) + 000176 89 [ 2] 355 pushw x + 000177 1E 15 [ 2] 356 ldw x, (0x15, sp) + 000179 89 [ 2] 357 pushw x + 00017A CDr00r00 [ 4] 358 call __divulong + 00017D 5B 08 [ 2] 359 addw sp, #8 + 00017F 1F 11 [ 2] 360 ldw (0x11, sp), x + 000181 17 0F [ 2] 361 ldw (0x0f, sp), y + 362 ; ../time.c: 135: lastTime.tm_hour=epoch%24; + 000183 AEr00r22 [ 2] 363 ldw x, #(_lastTime + 0)+2 + 000186 1F 13 [ 2] 364 ldw (0x13, sp), x + 000188 4B 18 [ 1] 365 push #0x18 + 00018A 5F [ 1] 366 clrw x + 00018B 89 [ 2] 367 pushw x + 00018C 4B 00 [ 1] 368 push #0x00 + 00018E 1E 15 [ 2] 369 ldw x, (0x15, sp) + 000190 89 [ 2] 370 pushw x + 000191 1E 15 [ 2] 371 ldw x, (0x15, sp) + 000193 89 [ 2] 372 pushw x + 000194 CDr00r00 [ 4] 373 call __modulong + 000197 5B 08 [ 2] 374 addw sp, #8 + 000199 9F [ 1] 375 ld a, xl + 00019A 1E 13 [ 2] 376 ldw x, (0x13, sp) + 00019C F7 [ 1] 377 ld (x), a + 378 ; ../time.c: 136: epoch/=24; // now it is days + 00019D 4B 18 [ 1] 379 push #0x18 + 00019F 5F [ 1] 380 clrw x + 0001A0 89 [ 2] 381 pushw x + 0001A1 4B 00 [ 1] 382 push #0x00 + 0001A3 1E 15 [ 2] 383 ldw x, (0x15, sp) + 0001A5 89 [ 2] 384 pushw x + 0001A6 1E 15 [ 2] 385 ldw x, (0x15, sp) + 0001A8 89 [ 2] 386 pushw x + 0001A9 CDr00r00 [ 4] 387 call __divulong + 0001AC 5B 08 [ 2] 388 addw sp, #8 + 0001AE 1F 07 [ 2] 389 ldw (0x07, sp), x + 0001B0 17 05 [ 2] 390 ldw (0x05, sp), y + 391 ; ../time.c: 137: lastTime.tm_wday=(epoch+4)%7; + 0001B2 AEr00r27 [ 2] 392 ldw x, #(_lastTime + 0)+7 + 0001B5 1F 13 [ 2] 393 ldw (0x13, sp), x + 0001B7 1E 07 [ 2] 394 ldw x, (0x07, sp) + 0001B9 1C 00 04 [ 2] 395 addw x, #0x0004 + 0001BC 16 05 [ 2] 396 ldw y, (0x05, sp) + 0001BE 24 02 [ 1] 397 jrnc 00164$ + 0001C0 90 5C [ 1] 398 incw y + 0001C2 399 00164$: + 0001C2 4B 07 [ 1] 400 push #0x07 + 0001C4 4B 00 [ 1] 401 push #0x00 + 0001C6 4B 00 [ 1] 402 push #0x00 + 0001C8 4B 00 [ 1] 403 push #0x00 + 0001CA 89 [ 2] 404 pushw x + 0001CB 90 89 [ 2] 405 pushw y + 0001CD CDr00r00 [ 4] 406 call __modulong + 0001D0 5B 08 [ 2] 407 addw sp, #8 + 0001D2 9F [ 1] 408 ld a, xl + 0001D3 1E 13 [ 2] 409 ldw x, (0x13, sp) + 0001D5 F7 [ 1] 410 ld (x), a + 411 ; ../time.c: 140: days=0; + 0001D6 5F [ 1] 412 clrw x + 0001D7 1F 0B [ 2] 413 ldw (0x0b, sp), x + 0001D9 1F 09 [ 2] 414 ldw (0x09, sp), x + 415 ; ../time.c: 141: while((days += (LEAP_YEAR(year) ? 366 : 365)) <= epoch) { + 0001DB AE 07 B2 [ 2] 416 ldw x, #0x07b2 + 0001DE 1F 13 [ 2] 417 ldw (0x13, sp), x + 0001E0 418 00101$: + 0001E0 7B 14 [ 1] 419 ld a, (0x14, sp) + 0001E2 A4 03 [ 1] 420 and a, #0x03 + 0001E4 6B 0E [ 1] 421 ld (0x0e, sp), a + 0001E6 0F 0D [ 1] 422 clr (0x0d, sp) + 0001E8 1E 0D [ 2] 423 ldw x, (0x0d, sp) + 0001EA 26 07 [ 1] 424 jrne 00118$ + 0001EC AE 01 6E [ 2] 425 ldw x, #0x016e + 0001EF 1F 11 [ 2] 426 ldw (0x11, sp), x + 0001F1 20 05 [ 2] 427 jra 00119$ + 0001F3 428 00118$: + 0001F3 AE 01 6D [ 2] 429 ldw x, #0x016d + 0001F6 1F 11 [ 2] 430 ldw (0x11, sp), x + 0001F8 431 00119$: + 0001F8 16 11 [ 2] 432 ldw y, (0x11, sp) + 0001FA 17 03 [ 2] 433 ldw (0x03, sp), y + 0001FC 7B 03 [ 1] 434 ld a, (0x03, sp) + 0001FE 49 [ 1] 435 rlc a + 0001FF 4F [ 1] 436 clr a + 000200 A2 00 [ 1] 437 sbc a, #0x00 + 000202 6B 02 [ 1] 438 ld (0x02, sp), a + 000204 6B 01 [ 1] 439 ld (0x01, sp), a + 000206 1E 0B [ 2] 440 ldw x, (0x0b, sp) + 000208 72 FB 03 [ 2] 441 addw x, (0x03, sp) + 00020B 1F 11 [ 2] 442 ldw (0x11, sp), x + 00020D 7B 0A [ 1] 443 ld a, (0x0a, sp) + 00020F 19 02 [ 1] 444 adc a, (0x02, sp) + 000211 6B 10 [ 1] 445 ld (0x10, sp), a + 000213 7B 09 [ 1] 446 ld a, (0x09, sp) + 000215 19 01 [ 1] 447 adc a, (0x01, sp) + 000217 6B 0F [ 1] 448 ld (0x0f, sp), a + 000219 16 11 [ 2] 449 ldw y, (0x11, sp) + 00021B 17 0B [ 2] 450 ldw (0x0b, sp), y + 00021D 16 0F [ 2] 451 ldw y, (0x0f, sp) + 00021F 17 09 [ 2] 452 ldw (0x09, sp), y + 000221 1E 07 [ 2] 453 ldw x, (0x07, sp) + 000223 13 11 [ 2] 454 cpw x, (0x11, sp) + 000225 7B 06 [ 1] 455 ld a, (0x06, sp) + 000227 12 10 [ 1] 456 sbc a, (0x10, sp) + 000229 7B 05 [ 1] 457 ld a, (0x05, sp) + 00022B 12 0F [ 1] 458 sbc a, (0x0f, sp) + 00022D 25 07 [ 1] 459 jrc 00103$ + 460 ; ../time.c: 142: year++; + 00022F 1E 13 [ 2] 461 ldw x, (0x13, sp) + 000231 5C [ 1] 462 incw x + 000232 1F 13 [ 2] 463 ldw (0x13, sp), x + 000234 20 AA [ 2] 464 jra 00101$ + 000236 465 00103$: + 466 ; ../time.c: 144: lastTime.tm_year=year-1900; + 000236 AEr00r25 [ 2] 467 ldw x, #(_lastTime + 0)+5 + 000239 1F 0F [ 2] 468 ldw (0x0f, sp), x + 00023B 1E 13 [ 2] 469 ldw x, (0x13, sp) + 00023D 1D 07 6C [ 2] 470 subw x, #0x076c + 000240 1F 11 [ 2] 471 ldw (0x11, sp), x + 000242 1E 0F [ 2] 472 ldw x, (0x0f, sp) + 000244 16 11 [ 2] 473 ldw y, (0x11, sp) + 000246 FF [ 2] 474 ldw (x), y + 475 ; ../time.c: 146: days -= LEAP_YEAR(year) ? 366 : 365; + 000247 16 0D [ 2] 476 ldw y, (0x0d, sp) + 000249 17 13 [ 2] 477 ldw (0x13, sp), y + 00024B 1E 0D [ 2] 478 ldw x, (0x0d, sp) + 00024D 26 07 [ 1] 479 jrne 00120$ + 00024F AE 01 6E [ 2] 480 ldw x, #0x016e + 000252 1F 11 [ 2] 481 ldw (0x11, sp), x + 000254 20 05 [ 2] 482 jra 00121$ + 000256 483 00120$: + 000256 AE 01 6D [ 2] 484 ldw x, #0x016d + 000259 1F 11 [ 2] 485 ldw (0x11, sp), x + 00025B 486 00121$: + 00025B 16 11 [ 2] 487 ldw y, (0x11, sp) + 00025D 17 03 [ 2] 488 ldw (0x03, sp), y + 00025F 7B 03 [ 1] 489 ld a, (0x03, sp) + 000261 49 [ 1] 490 rlc a + 000262 4F [ 1] 491 clr a + 000263 A2 00 [ 1] 492 sbc a, #0x00 + 000265 6B 02 [ 1] 493 ld (0x02, sp), a + 000267 6B 01 [ 1] 494 ld (0x01, sp), a + 000269 1E 0B [ 2] 495 ldw x, (0x0b, sp) + 00026B 72 F0 03 [ 2] 496 subw x, (0x03, sp) + 00026E 1F 11 [ 2] 497 ldw (0x11, sp), x + 000270 7B 0A [ 1] 498 ld a, (0x0a, sp) + 000272 12 02 [ 1] 499 sbc a, (0x02, sp) + 000274 6B 10 [ 1] 500 ld (0x10, sp), a + 000276 7B 09 [ 1] 501 ld a, (0x09, sp) + 000278 12 01 [ 1] 502 sbc a, (0x01, sp) + 00027A 6B 0F [ 1] 503 ld (0x0f, sp), a + 504 ; ../time.c: 147: epoch -= days; // now it is days in this year, starting at 0 + 00027C 1E 07 [ 2] 505 ldw x, (0x07, sp) + 00027E 72 F0 11 [ 2] 506 subw x, (0x11, sp) + 000281 1F 0D [ 2] 507 ldw (0x0d, sp), x + 000283 7B 06 [ 1] 508 ld a, (0x06, sp) + 000285 12 10 [ 1] 509 sbc a, (0x10, sp) + 000287 6B 0C [ 1] 510 ld (0x0c, sp), a + 000289 7B 05 [ 1] 511 ld a, (0x05, sp) + 00028B 12 0F [ 1] 512 sbc a, (0x0f, sp) + 00028D 6B 0B [ 1] 513 ld (0x0b, sp), a + 00028F 16 0D [ 2] 514 ldw y, (0x0d, sp) + 000291 17 08 [ 2] 515 ldw (0x08, sp), y + 000293 16 0B [ 2] 516 ldw y, (0x0b, sp) + 000295 17 06 [ 2] 517 ldw (0x06, sp), y + 518 ; ../time.c: 148: lastTime.tm_yday=epoch; + 000297 AEr00r28 [ 2] 519 ldw x, #(_lastTime + 0)+8 + 00029A 16 08 [ 2] 520 ldw y, (0x08, sp) + 00029C FF [ 2] 521 ldw (x), y + 522 ; ../time.c: 153: for (month=0; month<12; month++) { + 00029D 0F 12 [ 1] 523 clr (0x12, sp) + 00029F 524 00114$: + 525 ; ../time.c: 154: if (month==1) { // februari + 00029F 7B 12 [ 1] 526 ld a, (0x12, sp) + 0002A1 4A [ 1] 527 dec a + 0002A2 26 0C [ 1] 528 jrne 00108$ + 529 ; ../time.c: 155: if (LEAP_YEAR(year)) { + 0002A4 1E 13 [ 2] 530 ldw x, (0x13, sp) + 0002A6 26 04 [ 1] 531 jrne 00105$ + 532 ; ../time.c: 156: monthLength=29; + 0002A8 A6 1D [ 1] 533 ld a, #0x1d + 0002AA 20 10 [ 2] 534 jra 00109$ + 0002AC 535 00105$: + 536 ; ../time.c: 158: monthLength=28; + 0002AC A6 1C [ 1] 537 ld a, #0x1c + 0002AE 20 0C [ 2] 538 jra 00109$ + 0002B0 539 00108$: + 540 ; ../time.c: 161: monthLength = monthDays[month]; + 0002B0 7B 12 [ 1] 541 ld a, (0x12, sp) + 0002B2 ABr00 [ 1] 542 add a, #<(_monthDays + 0) + 0002B4 88 [ 1] 543 push a + 0002B5 4F [ 1] 544 clr a + 0002B6 A9s00 [ 1] 545 adc a, #((_monthDays + 0) >> 8) + 0002B8 95 [ 1] 546 ld xh, a + 0002B9 84 [ 1] 547 pop a + 0002BA 97 [ 1] 548 ld xl, a + 0002BB F6 [ 1] 549 ld a, (x) + 0002BC 550 00109$: + 551 ; ../time.c: 164: if (epoch>=monthLength) { + 0002BC 6B 11 [ 1] 552 ld (0x11, sp), a + 0002BE 0F 10 [ 1] 553 clr (0x10, sp) + 0002C0 0F 0F [ 1] 554 clr (0x0f, sp) + 0002C2 0F 0E [ 1] 555 clr (0x0e, sp) + 0002C4 1E 08 [ 2] 556 ldw x, (0x08, sp) + 0002C6 13 10 [ 2] 557 cpw x, (0x10, sp) + 0002C8 7B 07 [ 1] 558 ld a, (0x07, sp) + 0002CA 12 0F [ 1] 559 sbc a, (0x0f, sp) + 0002CC 7B 06 [ 1] 560 ld a, (0x06, sp) + 0002CE 12 0E [ 1] 561 sbc a, (0x0e, sp) + 0002D0 25 1B [ 1] 562 jrc 00113$ + 563 ; ../time.c: 165: epoch-=monthLength; + 0002D2 16 08 [ 2] 564 ldw y, (0x08, sp) + 0002D4 72 F2 10 [ 2] 565 subw y, (0x10, sp) + 0002D7 7B 07 [ 1] 566 ld a, (0x07, sp) + 0002D9 12 0F [ 1] 567 sbc a, (0x0f, sp) + 0002DB 97 [ 1] 568 ld xl, a + 0002DC 7B 06 [ 1] 569 ld a, (0x06, sp) + 0002DE 12 0E [ 1] 570 sbc a, (0x0e, sp) + 0002E0 95 [ 1] 571 ld xh, a + 0002E1 17 08 [ 2] 572 ldw (0x08, sp), y + 0002E3 1F 06 [ 2] 573 ldw (0x06, sp), x + 574 ; ../time.c: 153: for (month=0; month<12; month++) { + 0002E5 0C 12 [ 1] 575 inc (0x12, sp) + 0002E7 7B 12 [ 1] 576 ld a, (0x12, sp) + 0002E9 A1 0C [ 1] 577 cp a, #0x0c + 0002EB 25 B2 [ 1] 578 jrc 00114$ + 0002ED 579 00113$: + 580 ; ../time.c: 170: lastTime.tm_mon=month; + 0002ED AEr00r24 [ 2] 581 ldw x, #(_lastTime + 0)+4 + 0002F0 7B 12 [ 1] 582 ld a, (0x12, sp) + 0002F2 F7 [ 1] 583 ld (x), a + 584 ; ../time.c: 171: lastTime.tm_mday=epoch+1; + 0002F3 AEr00r23 [ 2] 585 ldw x, #(_lastTime + 0)+3 + 0002F6 7B 09 [ 1] 586 ld a, (0x09, sp) + 0002F8 4C [ 1] 587 inc a + 0002F9 F7 [ 1] 588 ld (x), a + 589 ; ../time.c: 173: lastTime.tm_isdst=0; + 0002FA AEr00r2A [ 2] 590 ldw x, #(_lastTime + 0)+10 + 0002FD 7F [ 1] 591 clr (x) + 592 ; ../time.c: 175: return &lastTime; + 0002FE AEr00r20 [ 2] 593 ldw x, #(_lastTime + 0) + 594 ; ../time.c: 176: } + 000301 5B 14 [ 2] 595 addw sp, #20 + 000303 81 [ 4] 596 ret + 597 ; ../time.c: 179: time_t mktime(struct tm *timeptr) { + 598 ; ----------------------------------------- + 599 ; function mktime + 600 ; ----------------------------------------- + 000304 601 _mktime: + 000304 52 12 [ 2] 602 sub sp, #18 + 603 ; ../time.c: 180: int year=timeptr->tm_year+1900, month=timeptr->tm_mon, i; + 000306 16 15 [ 2] 604 ldw y, (0x15, sp) + 000308 17 01 [ 2] 605 ldw (0x01, sp), y + 00030A 93 [ 1] 606 ldw x, y + 00030B EE 05 [ 2] 607 ldw x, (0x5, x) + 00030D 1C 07 6C [ 2] 608 addw x, #0x076c + 000310 1F 0B [ 2] 609 ldw (0x0b, sp), x + 000312 1E 01 [ 2] 610 ldw x, (0x01, sp) + 000314 E6 04 [ 1] 611 ld a, (0x4, x) + 000316 5F [ 1] 612 clrw x + 000317 97 [ 1] 613 ld xl, a + 000318 1F 03 [ 2] 614 ldw (0x03, sp), x + 615 ; ../time.c: 183: CheckTime(timeptr); + 00031A 1E 01 [ 2] 616 ldw x, (0x01, sp) + 00031C 89 [ 2] 617 pushw x + 00031D CDr00r3A [ 4] 618 call _CheckTime + 000320 5B 02 [ 2] 619 addw sp, #2 + 620 ; ../time.c: 186: seconds= (year-1970)*(60*60*24L*365); + 000322 1E 0B [ 2] 621 ldw x, (0x0b, sp) + 000324 1D 07 B2 [ 2] 622 subw x, #0x07b2 + 000327 90 5F [ 1] 623 clrw y + 000329 5D [ 2] 624 tnzw x + 00032A 2A 02 [ 1] 625 jrpl 00154$ + 00032C 90 5A [ 2] 626 decw y + 00032E 627 00154$: + 00032E 89 [ 2] 628 pushw x + 00032F 90 89 [ 2] 629 pushw y + 000331 4B 80 [ 1] 630 push #0x80 + 000333 4B 33 [ 1] 631 push #0x33 + 000335 4B E1 [ 1] 632 push #0xe1 + 000337 4B 01 [ 1] 633 push #0x01 + 000339 CDr00r00 [ 4] 634 call __mullong + 00033C 5B 08 [ 2] 635 addw sp, #8 + 636 ; ../time.c: 189: for (i=1970; i<year; i++) { + 00033E 1F 11 [ 2] 637 ldw (0x11, sp), x + 000340 17 0F [ 2] 638 ldw (0x0f, sp), y + 000342 AE 07 B2 [ 2] 639 ldw x, #0x07b2 + 000345 1F 0D [ 2] 640 ldw (0x0d, sp), x + 000347 641 00110$: + 000347 1E 0D [ 2] 642 ldw x, (0x0d, sp) + 000349 13 0B [ 2] 643 cpw x, (0x0b, sp) + 00034B 2E 29 [ 1] 644 jrsge 00124$ + 645 ; ../time.c: 190: if (LEAP_YEAR(i)) { + 00034D 4B 04 [ 1] 646 push #0x04 + 00034F 4B 00 [ 1] 647 push #0x00 + 000351 1E 0F [ 2] 648 ldw x, (0x0f, sp) + 000353 89 [ 2] 649 pushw x + 000354 CDr00r00 [ 4] 650 call __modsint + 000357 5B 04 [ 2] 651 addw sp, #4 + 000359 5D [ 2] 652 tnzw x + 00035A 26 13 [ 1] 653 jrne 00111$ + 654 ; ../time.c: 191: seconds+= 60*60*24L; + 00035C 1E 11 [ 2] 655 ldw x, (0x11, sp) + 00035E 1C 51 80 [ 2] 656 addw x, #0x5180 + 000361 1F 11 [ 2] 657 ldw (0x11, sp), x + 000363 7B 10 [ 1] 658 ld a, (0x10, sp) + 000365 A9 01 [ 1] 659 adc a, #0x01 + 000367 6B 10 [ 1] 660 ld (0x10, sp), a + 000369 7B 0F [ 1] 661 ld a, (0x0f, sp) + 00036B A9 00 [ 1] 662 adc a, #0x00 + 00036D 6B 0F [ 1] 663 ld (0x0f, sp), a + 00036F 664 00111$: + 665 ; ../time.c: 189: for (i=1970; i<year; i++) { + 00036F 1E 0D [ 2] 666 ldw x, (0x0d, sp) + 000371 5C [ 1] 667 incw x + 000372 1F 0D [ 2] 668 ldw (0x0d, sp), x + 000374 20 D1 [ 2] 669 jra 00110$ + 000376 670 00124$: + 000376 16 11 [ 2] 671 ldw y, (0x11, sp) + 000378 17 07 [ 2] 672 ldw (0x07, sp), y + 00037A 16 0F [ 2] 673 ldw y, (0x0f, sp) + 00037C 17 05 [ 2] 674 ldw (0x05, sp), y + 675 ; ../time.c: 196: for (i=0; i<month; i++) { + 00037E 4B 04 [ 1] 676 push #0x04 + 000380 4B 00 [ 1] 677 push #0x00 + 000382 1E 0D [ 2] 678 ldw x, (0x0d, sp) + 000384 89 [ 2] 679 pushw x + 000385 CDr00r00 [ 4] 680 call __modsint + 000388 5B 04 [ 2] 681 addw sp, #4 + 00038A 1F 09 [ 2] 682 ldw (0x09, sp), x + 00038C 90 5F [ 1] 683 clrw y + 00038E 684 00113$: + 00038E 51 [ 1] 685 exgw x, y + 00038F 13 03 [ 2] 686 cpw x, (0x03, sp) + 000391 51 [ 1] 687 exgw x, y + 000392 2E 62 [ 1] 688 jrsge 00108$ + 689 ; ../time.c: 197: if (i==1 && LEAP_YEAR(year)) { + 000394 90 A3 00 01 [ 2] 690 cpw y, #0x0001 + 000398 26 1B [ 1] 691 jrne 00105$ + 00039A 1E 09 [ 2] 692 ldw x, (0x09, sp) + 00039C 26 17 [ 1] 693 jrne 00105$ + 694 ; ../time.c: 198: seconds+= 60*60*24L*29; + 00039E 1E 07 [ 2] 695 ldw x, (0x07, sp) + 0003A0 1C 3B 80 [ 2] 696 addw x, #0x3b80 + 0003A3 1F 11 [ 2] 697 ldw (0x11, sp), x + 0003A5 1E 05 [ 2] 698 ldw x, (0x05, sp) + 0003A7 24 01 [ 1] 699 jrnc 00163$ + 0003A9 5C [ 1] 700 incw x + 0003AA 701 00163$: + 0003AA 1C 00 26 [ 2] 702 addw x, #0x0026 + 0003AD 1F 05 [ 2] 703 ldw (0x05, sp), x + 0003AF 1E 11 [ 2] 704 ldw x, (0x11, sp) + 0003B1 1F 07 [ 2] 705 ldw (0x07, sp), x + 0003B3 20 3D [ 2] 706 jra 00114$ + 0003B5 707 00105$: + 708 ; ../time.c: 200: seconds+= 60*60*24L*monthDays[i]; + 0003B5 93 [ 1] 709 ldw x, y + 0003B6 1Cr00r00 [ 2] 710 addw x, #(_monthDays + 0) + 0003B9 F6 [ 1] 711 ld a, (x) + 0003BA 6B 12 [ 1] 712 ld (0x12, sp), a + 0003BC 0F 11 [ 1] 713 clr (0x11, sp) + 0003BE 0F 10 [ 1] 714 clr (0x10, sp) + 0003C0 0F 0F [ 1] 715 clr (0x0f, sp) + 0003C2 90 89 [ 2] 716 pushw y + 0003C4 1E 13 [ 2] 717 ldw x, (0x13, sp) + 0003C6 89 [ 2] 718 pushw x + 0003C7 1E 13 [ 2] 719 ldw x, (0x13, sp) + 0003C9 89 [ 2] 720 pushw x + 0003CA 4B 80 [ 1] 721 push #0x80 + 0003CC 4B 51 [ 1] 722 push #0x51 + 0003CE 4B 01 [ 1] 723 push #0x01 + 0003D0 4B 00 [ 1] 724 push #0x00 + 0003D2 CDr00r00 [ 4] 725 call __mullong + 0003D5 5B 08 [ 2] 726 addw sp, #8 + 0003D7 1F 0F [ 2] 727 ldw (0x0f, sp), x + 0003D9 17 0D [ 2] 728 ldw (0x0d, sp), y + 0003DB 90 85 [ 2] 729 popw y + 0003DD 1E 07 [ 2] 730 ldw x, (0x07, sp) + 0003DF 72 FB 0D [ 2] 731 addw x, (0x0d, sp) + 0003E2 1F 11 [ 2] 732 ldw (0x11, sp), x + 0003E4 1E 05 [ 2] 733 ldw x, (0x05, sp) + 0003E6 24 01 [ 1] 734 jrnc 00164$ + 0003E8 5C [ 1] 735 incw x + 0003E9 736 00164$: + 0003E9 72 FB 0B [ 2] 737 addw x, (0x0b, sp) + 0003EC 1F 05 [ 2] 738 ldw (0x05, sp), x + 0003EE 1E 11 [ 2] 739 ldw x, (0x11, sp) + 0003F0 1F 07 [ 2] 740 ldw (0x07, sp), x + 0003F2 741 00114$: + 742 ; ../time.c: 196: for (i=0; i<month; i++) { + 0003F2 90 5C [ 1] 743 incw y + 0003F4 20 98 [ 2] 744 jra 00113$ + 0003F6 745 00108$: + 746 ; ../time.c: 204: seconds+= (timeptr->tm_mday-1)*60*60*24L; + 0003F6 1E 01 [ 2] 747 ldw x, (0x01, sp) + 0003F8 E6 03 [ 1] 748 ld a, (0x3, x) + 0003FA 5F [ 1] 749 clrw x + 0003FB 97 [ 1] 750 ld xl, a + 0003FC 5A [ 2] 751 decw x + 0003FD 90 5F [ 1] 752 clrw y + 0003FF 5D [ 2] 753 tnzw x + 000400 2A 02 [ 1] 754 jrpl 00165$ + 000402 90 5A [ 2] 755 decw y + 000404 756 00165$: + 000404 89 [ 2] 757 pushw x + 000405 90 89 [ 2] 758 pushw y + 000407 4B 80 [ 1] 759 push #0x80 + 000409 4B 51 [ 1] 760 push #0x51 + 00040B 4B 01 [ 1] 761 push #0x01 + 00040D 4B 00 [ 1] 762 push #0x00 + 00040F CDr00r00 [ 4] 763 call __mullong + 000412 5B 08 [ 2] 764 addw sp, #8 + 000414 51 [ 1] 765 exgw x, y + 000415 72 F9 07 [ 2] 766 addw y, (0x07, sp) + 000418 9F [ 1] 767 ld a, xl + 000419 19 06 [ 1] 768 adc a, (0x06, sp) + 00041B 02 [ 1] 769 rlwa x + 00041C 19 05 [ 1] 770 adc a, (0x05, sp) + 00041E 95 [ 1] 771 ld xh, a + 00041F 17 11 [ 2] 772 ldw (0x11, sp), y + 000421 1F 0F [ 2] 773 ldw (0x0f, sp), x + 774 ; ../time.c: 205: seconds+= timeptr->tm_hour*60*60L; + 000423 1E 01 [ 2] 775 ldw x, (0x01, sp) + 000425 E6 02 [ 1] 776 ld a, (0x2, x) + 000427 5F [ 1] 777 clrw x + 000428 97 [ 1] 778 ld xl, a + 000429 90 5F [ 1] 779 clrw y + 00042B 89 [ 2] 780 pushw x + 00042C 90 89 [ 2] 781 pushw y + 00042E 4B 10 [ 1] 782 push #0x10 + 000430 4B 0E [ 1] 783 push #0x0e + 000432 5F [ 1] 784 clrw x + 000433 89 [ 2] 785 pushw x + 000434 CDr00r00 [ 4] 786 call __mullong + 000437 5B 08 [ 2] 787 addw sp, #8 + 000439 90 9F [ 1] 788 ld a, yl + 00043B 72 FB 11 [ 2] 789 addw x, (0x11, sp) + 00043E 19 10 [ 1] 790 adc a, (0x10, sp) + 000440 90 02 [ 1] 791 rlwa y + 000442 19 0F [ 1] 792 adc a, (0x0f, sp) + 000444 90 95 [ 1] 793 ld yh, a + 000446 1F 0D [ 2] 794 ldw (0x0d, sp), x + 795 ; ../time.c: 206: seconds+= timeptr->tm_min*60; + 000448 1E 01 [ 2] 796 ldw x, (0x01, sp) + 00044A E6 01 [ 1] 797 ld a, (0x1, x) + 00044C 5F [ 1] 798 clrw x + 00044D 97 [ 1] 799 ld xl, a + 00044E 89 [ 2] 800 pushw x + 00044F 58 [ 2] 801 sllw x + 000450 58 [ 2] 802 sllw x + 000451 58 [ 2] 803 sllw x + 000452 58 [ 2] 804 sllw x + 000453 72 F0 01 [ 2] 805 subw x, (1, sp) + 000456 58 [ 2] 806 sllw x + 000457 58 [ 2] 807 sllw x + 000458 5B 02 [ 2] 808 addw sp, #2 + 00045A 1F 11 [ 2] 809 ldw (0x11, sp), x + 00045C 7B 11 [ 1] 810 ld a, (0x11, sp) + 00045E 49 [ 1] 811 rlc a + 00045F 4F [ 1] 812 clr a + 000460 A2 00 [ 1] 813 sbc a, #0x00 + 000462 6B 10 [ 1] 814 ld (0x10, sp), a + 000464 6B 0F [ 1] 815 ld (0x0f, sp), a + 000466 1E 0D [ 2] 816 ldw x, (0x0d, sp) + 000468 72 FB 11 [ 2] 817 addw x, (0x11, sp) + 00046B 90 9F [ 1] 818 ld a, yl + 00046D 19 10 [ 1] 819 adc a, (0x10, sp) + 00046F 88 [ 1] 820 push a + 000470 90 9E [ 1] 821 ld a, yh + 000472 19 10 [ 1] 822 adc a, (0x10, sp) + 000474 90 95 [ 1] 823 ld yh, a + 000476 84 [ 1] 824 pop a + 000477 1F 11 [ 2] 825 ldw (0x11, sp), x + 000479 6B 10 [ 1] 826 ld (0x10, sp), a + 827 ; ../time.c: 207: seconds+= timeptr->tm_sec; + 00047B 1E 01 [ 2] 828 ldw x, (0x01, sp) + 00047D F6 [ 1] 829 ld a, (x) + 00047E 5F [ 1] 830 clrw x + 00047F 97 [ 1] 831 ld xl, a + 000480 1F 0D [ 2] 832 ldw (0x0d, sp), x + 000482 7B 0D [ 1] 833 ld a, (0x0d, sp) + 000484 49 [ 1] 834 rlc a + 000485 4F [ 1] 835 clr a + 000486 A2 00 [ 1] 836 sbc a, #0x00 + 000488 6B 0C [ 1] 837 ld (0x0c, sp), a + 00048A 6B 0B [ 1] 838 ld (0x0b, sp), a + 00048C 1E 11 [ 2] 839 ldw x, (0x11, sp) + 00048E 72 FB 0D [ 2] 840 addw x, (0x0d, sp) + 000491 7B 10 [ 1] 841 ld a, (0x10, sp) + 000493 19 0C [ 1] 842 adc a, (0x0c, sp) + 000495 90 02 [ 1] 843 rlwa y + 000497 19 0B [ 1] 844 adc a, (0x0b, sp) + 000499 90 95 [ 1] 845 ld yh, a + 846 ; ../time.c: 208: return seconds; + 847 ; ../time.c: 209: } + 00049B 5B 12 [ 2] 848 addw sp, #18 + 00049D 81 [ 4] 849 ret + 850 .area CODE + 851 .area CONST + 000000 852 _monthDays: + 000000 1F 853 .db #0x1f ; 31 + 000001 1C 854 .db #0x1c ; 28 + 000002 1F 855 .db #0x1f ; 31 + 000003 1E 856 .db #0x1e ; 30 + 000004 1F 857 .db #0x1f ; 31 + 000005 1E 858 .db #0x1e ; 30 + 000006 1F 859 .db #0x1f ; 31 + 000007 1F 860 .db #0x1f ; 31 + 000008 1E 861 .db #0x1e ; 30 + 000009 1F 862 .db #0x1f ; 31 + 00000A 1E 863 .db #0x1e ; 30 + 00000B 1F 864 .db #0x1f ; 31 + 00000C 865 ___month: + 00000Cr00r51 866 .dw __str_1 + 00000Er00r55 867 .dw __str_2 + 000010r00r59 868 .dw __str_3 + 000012r00r5D 869 .dw __str_4 + 000014r00r61 870 .dw __str_5 + 000016r00r65 871 .dw __str_6 + 000018r00r69 872 .dw __str_7 + 00001Ar00r6D 873 .dw __str_8 + 00001Cr00r71 874 .dw __str_9 + 00001Er00r75 875 .dw __str_10 + 000020r00r79 876 .dw __str_11 + 000022r00r7D 877 .dw __str_12 + 000024 878 ___day: + 000024r00r81 879 .dw __str_13 + 000026r00r85 880 .dw __str_14 + 000028r00r89 881 .dw __str_15 + 00002Ar00r8D 882 .dw __str_16 + 00002Cr00r91 883 .dw __str_17 + 00002Er00r95 884 .dw __str_18 + 000030r00r99 885 .dw __str_19 + 886 .area CONST + 000032 887 ___str_0: + 000032 25 73 20 25 73 20 25 888 .ascii "%s %s %2d %02d:%02d:%02d %04d" + 32 64 20 25 30 32 64 + 3A 25 30 32 64 3A 25 + 30 32 64 20 25 30 34 + 64 + 00004F 0A 889 .db 0x0a + 000050 00 890 .db 0x00 + 891 .area CODE + 892 .area CONST + 000051 893 __str_1: + 000051 4A 61 6E 894 .ascii "Jan" + 000054 00 895 .db 0x00 + 896 .area CODE + 897 .area CONST + 000055 898 __str_2: + 000055 46 65 62 899 .ascii "Feb" + 000058 00 900 .db 0x00 + 901 .area CODE + 902 .area CONST + 000059 903 __str_3: + 000059 4D 61 72 904 .ascii "Mar" + 00005C 00 905 .db 0x00 + 906 .area CODE + 907 .area CONST + 00005D 908 __str_4: + 00005D 41 70 72 909 .ascii "Apr" + 000060 00 910 .db 0x00 + 911 .area CODE + 912 .area CONST + 000061 913 __str_5: + 000061 4D 61 79 914 .ascii "May" + 000064 00 915 .db 0x00 + 916 .area CODE + 917 .area CONST + 000065 918 __str_6: + 000065 4A 75 6E 919 .ascii "Jun" + 000068 00 920 .db 0x00 + 921 .area CODE + 922 .area CONST + 000069 923 __str_7: + 000069 4A 75 6C 924 .ascii "Jul" + 00006C 00 925 .db 0x00 + 926 .area CODE + 927 .area CONST + 00006D 928 __str_8: + 00006D 41 75 67 929 .ascii "Aug" + 000070 00 930 .db 0x00 + 931 .area CODE + 932 .area CONST + 000071 933 __str_9: + 000071 53 65 70 934 .ascii "Sep" + 000074 00 935 .db 0x00 + 936 .area CODE + 937 .area CONST + 000075 938 __str_10: + 000075 4F 63 74 939 .ascii "Oct" + 000078 00 940 .db 0x00 + 941 .area CODE + 942 .area CONST + 000079 943 __str_11: + 000079 4E 6F 76 944 .ascii "Nov" + 00007C 00 945 .db 0x00 + 946 .area CODE + 947 .area CONST + 00007D 948 __str_12: + 00007D 44 65 63 949 .ascii "Dec" + 000080 00 950 .db 0x00 + 951 .area CODE + 952 .area CONST + 000081 953 __str_13: + 000081 53 75 6E 954 .ascii "Sun" + 000084 00 955 .db 0x00 + 956 .area CODE + 957 .area CONST + 000085 958 __str_14: + 000085 4D 6F 6E 959 .ascii "Mon" + 000088 00 960 .db 0x00 + 961 .area CODE + 962 .area CONST + 000089 963 __str_15: + 000089 54 75 65 964 .ascii "Tue" + 00008C 00 965 .db 0x00 + 966 .area CODE + 967 .area CONST + 00008D 968 __str_16: + 00008D 57 65 64 969 .ascii "Wed" + 000090 00 970 .db 0x00 + 971 .area CODE + 972 .area CONST + 000091 973 __str_17: + 000091 54 68 75 974 .ascii "Thu" + 000094 00 975 .db 0x00 + 976 .area CODE + 977 .area CONST + 000095 978 __str_18: + 000095 46 72 69 979 .ascii "Fri" + 000098 00 980 .db 0x00 + 981 .area CODE + 982 .area CONST + 000099 983 __str_19: + 000099 53 61 74 984 .ascii "Sat" + 00009C 00 985 .db 0x00 + 986 .area CODE + 987 .area INITIALIZER + 988 .area CABS (ABS) diff --git a/device/lib/stm8/time.rel b/device/lib/stm8/time.rel new file mode 100644 index 0000000..bf4f16c --- /dev/null +++ b/device/lib/stm8/time.rel @@ -0,0 +1,452 @@ +XH3 +H B areas F global symbols +M time +O -mstm8 +S .__.ABS. Def000000 +S __modulong Ref000000 +S _sprintf Ref000000 +S __divulong Ref000000 +S __modsint Ref000000 +S __mullong Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 2C flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 9D flags 0 addr 0 +S ___month Def00000C +S ___day Def000024 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 49E flags 0 addr 0 +S _RtcRead Def000000 +S _asctime Def000096 +S _time Def000002 +S _localtime Def000113 +S _gmtime Def00011C +S _mktime Def000304 +S _ctime Def000104 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 01 +T 00 00 20 +R 00 00 00 01 +T 00 00 20 +R 00 00 00 01 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 4F 81 +R 00 00 00 09 +T 00 00 02 +R 00 00 00 09 +T 00 00 02 52 10 AE FF FF 1F 0F AE FF FF 1F 0D 96 +R 00 00 00 09 +T 00 00 0F 5C 90 93 89 90 89 CD 00 00 5B 02 85 4D +R 00 00 00 09 00 0A 00 09 +T 00 00 1C 27 0A 89 CD 03 04 5B 02 1F 0F 17 0D +R 00 00 00 09 00 07 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 1E 13 27 07 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 33 +R 00 00 00 09 +T 00 00 33 1E 0F 16 0D 5B 10 81 +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 16 03 90 F6 A1 3B 23 04 A6 3B 90 F7 +R 00 00 00 09 +T 00 00 46 +R 00 00 00 09 +T 00 00 46 93 5C F6 A1 3B 23 03 A6 3B F7 +R 00 00 00 09 +T 00 00 50 +R 00 00 00 09 +T 00 00 50 93 5C 5C F6 A1 17 23 03 A6 17 F7 +R 00 00 00 09 +T 00 00 5B +R 00 00 00 09 +T 00 00 5B 93 1C 00 07 F6 A1 06 23 03 A6 06 F7 +R 00 00 00 09 +T 00 00 67 +R 00 00 00 09 +T 00 00 67 93 1C 00 03 F6 A1 01 24 05 A6 01 F7 20 +R 00 00 00 09 +T 00 00 74 07 +R 00 00 00 09 +T 00 00 75 +R 00 00 00 09 +T 00 00 75 A1 1F 23 03 A6 1F F7 +R 00 00 00 09 +T 00 00 7C +R 00 00 00 09 +T 00 00 7C 93 1C 00 04 F6 A1 0B 23 03 A6 0B F7 +R 00 00 00 09 +T 00 00 88 +R 00 00 00 09 +T 00 00 88 72 A9 00 05 93 FE 2B 01 81 +R 00 00 00 09 +T 00 00 91 +R 00 00 00 09 +T 00 00 91 93 6F 01 7F 81 +R 00 00 00 09 +T 00 00 96 +R 00 00 00 09 +T 00 00 96 52 0C 1E 0F 89 CD 00 3A 5B 02 16 0F 93 +R 00 00 00 09 00 09 00 09 +T 00 00 A3 EE 05 1C 07 6C 1F 01 90 F6 6B 04 0F 03 +R 00 00 00 09 +T 00 00 B0 93 E6 01 6B 06 0F 05 93 E6 02 6B 08 0F +R 00 00 00 09 +T 00 00 BD 07 93 E6 03 6B 0A 0F 09 93 E6 04 5F 97 +R 00 00 00 09 +T 00 00 CA 58 1C 00 0C FE 1F 0B 90 E6 07 5F 97 58 +R 00 00 00 09 00 05 00 07 +T 00 00 D7 1C 00 24 FE 90 93 1E 01 89 1E 05 89 1E +R 00 00 00 09 00 04 00 07 +T 00 00 E4 09 89 1E 0D 89 1E 11 89 1E 15 89 90 89 +R 00 00 00 09 +T 00 00 F1 4B 00 00 32 4B 00 00 32 4B +R 00 00 00 09 F1 09 04 00 07 F1 81 08 00 07 +T 00 00 F6 00 00 00 4B 00 00 00 CD +R 00 00 00 09 F1 09 03 00 01 F1 81 07 00 01 +T 00 00 FA 00 00 5B 12 AE 00 00 5B 0C 81 +R 00 00 00 09 02 03 00 02 00 08 00 01 +T 00 01 04 +R 00 00 00 09 +T 00 01 04 1E 03 89 CD 01 13 5B 02 89 CD 00 96 5B +R 00 00 00 09 00 07 00 09 00 0D 00 09 +T 00 01 11 02 81 +R 00 00 00 09 +T 00 01 13 +R 00 00 00 09 +T 00 01 13 1E 03 89 CD 01 1C 5B 02 81 +R 00 00 00 09 00 07 00 09 +T 00 01 1C +R 00 00 00 09 +T 00 01 1C 52 14 1E 17 90 93 90 EE 02 FE 17 13 1F +R 00 00 00 09 +T 00 01 29 11 4B 3C 5F 89 4B 00 1E 17 89 1E 17 89 +R 00 00 00 09 +T 00 01 36 CD 00 00 5B 08 9F C7 00 20 4B 3C 5F 89 +R 00 00 00 09 02 04 00 01 10 0A 00 01 +T 00 01 43 4B 00 1E 17 89 1E 17 89 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 03 +T 00 01 50 1F 11 17 0F AE 00 21 1F 13 4B 3C 5F 89 +R 00 00 00 09 00 08 00 01 +T 00 01 5D 4B 00 1E 15 89 1E 15 89 CD 00 00 5B 08 +R 00 00 00 09 02 0C 00 01 +T 00 01 6A 9F 1E 13 F7 4B 3C 5F 89 4B 00 1E 15 89 +R 00 00 00 09 +T 00 01 77 1E 15 89 CD 00 00 5B 08 1F 11 17 0F AE +R 00 00 00 09 02 07 00 03 +T 00 01 84 00 22 1F 13 4B 18 5F 89 4B 00 1E 15 89 +R 00 00 00 09 00 03 00 01 +T 00 01 91 1E 15 89 CD 00 00 5B 08 9F 1E 13 F7 4B +R 00 00 00 09 02 07 00 01 +T 00 01 9E 18 5F 89 4B 00 1E 15 89 1E 15 89 CD +R 00 00 00 09 +T 00 01 AA 00 00 5B 08 1F 07 17 05 AE 00 27 1F 13 +R 00 00 00 09 02 03 00 03 00 0C 00 01 +T 00 01 B7 1E 07 1C 00 04 16 05 24 02 90 5C +R 00 00 00 09 +T 00 01 C2 +R 00 00 00 09 +T 00 01 C2 4B 07 4B 00 4B 00 4B 00 89 90 89 CD +R 00 00 00 09 +T 00 01 CE 00 00 5B 08 9F 1E 13 F7 5F 1F 0B 1F 09 +R 00 00 00 09 02 03 00 01 +T 00 01 DB AE 07 B2 1F 13 +R 00 00 00 09 +T 00 01 E0 +R 00 00 00 09 +T 00 01 E0 7B 14 A4 03 6B 0E 0F 0D 1E 0D 26 07 AE +R 00 00 00 09 +T 00 01 ED 01 6E 1F 11 20 05 +R 00 00 00 09 +T 00 01 F3 +R 00 00 00 09 +T 00 01 F3 AE 01 6D 1F 11 +R 00 00 00 09 +T 00 01 F8 +R 00 00 00 09 +T 00 01 F8 16 11 17 03 7B 03 49 4F A2 00 6B 02 6B +R 00 00 00 09 +T 00 02 05 01 1E 0B 72 FB 03 1F 11 7B 0A 19 02 6B +R 00 00 00 09 +T 00 02 12 10 7B 09 19 01 6B 0F 16 11 17 0B 16 0F +R 00 00 00 09 +T 00 02 1F 17 09 1E 07 13 11 7B 06 12 10 7B 05 12 +R 00 00 00 09 +T 00 02 2C 0F 25 07 1E 13 5C 1F 13 20 AA +R 00 00 00 09 +T 00 02 36 +R 00 00 00 09 +T 00 02 36 AE 00 25 1F 0F 1E 13 1D 07 6C 1F 11 1E +R 00 00 00 09 00 04 00 01 +T 00 02 43 0F 16 11 FF 16 0D 17 13 1E 0D 26 07 AE +R 00 00 00 09 +T 00 02 50 01 6E 1F 11 20 05 +R 00 00 00 09 +T 00 02 56 +R 00 00 00 09 +T 00 02 56 AE 01 6D 1F 11 +R 00 00 00 09 +T 00 02 5B +R 00 00 00 09 +T 00 02 5B 16 11 17 03 7B 03 49 4F A2 00 6B 02 6B +R 00 00 00 09 +T 00 02 68 01 1E 0B 72 F0 03 1F 11 7B 0A 12 02 6B +R 00 00 00 09 +T 00 02 75 10 7B 09 12 01 6B 0F 1E 07 72 F0 11 1F +R 00 00 00 09 +T 00 02 82 0D 7B 06 12 10 6B 0C 7B 05 12 0F 6B 0B +R 00 00 00 09 +T 00 02 8F 16 0D 17 08 16 0B 17 06 AE 00 28 16 08 +R 00 00 00 09 00 0C 00 01 +T 00 02 9C FF 0F 12 +R 00 00 00 09 +T 00 02 9F +R 00 00 00 09 +T 00 02 9F 7B 12 4A 26 0C 1E 13 26 04 A6 1D 20 10 +R 00 00 00 09 +T 00 02 AC +R 00 00 00 09 +T 00 02 AC A6 1C 20 0C +R 00 00 00 09 +T 00 02 B0 +R 00 00 00 09 +T 00 02 B0 7B 12 AB 00 00 00 88 4F A9 00 00 00 95 +R 00 00 00 09 F1 09 06 00 07 F1 81 0C 00 07 +T 00 02 B9 84 97 F6 +R 00 00 00 09 +T 00 02 BC +R 00 00 00 09 +T 00 02 BC 6B 11 0F 10 0F 0F 0F 0E 1E 08 13 10 7B +R 00 00 00 09 +T 00 02 C9 07 12 0F 7B 06 12 0E 25 1B 16 08 72 F2 +R 00 00 00 09 +T 00 02 D6 10 7B 07 12 0F 97 7B 06 12 0E 95 17 08 +R 00 00 00 09 +T 00 02 E3 1F 06 0C 12 7B 12 A1 0C 25 B2 +R 00 00 00 09 +T 00 02 ED +R 00 00 00 09 +T 00 02 ED AE 00 24 7B 12 F7 AE 00 23 7B 09 4C F7 +R 00 00 00 09 00 04 00 01 00 0A 00 01 +T 00 02 FA AE 00 2A 7F AE 00 20 5B 14 81 +R 00 00 00 09 00 04 00 01 00 08 00 01 +T 00 03 04 +R 00 00 00 09 +T 00 03 04 52 12 16 15 17 01 93 EE 05 1C 07 6C 1F +R 00 00 00 09 +T 00 03 11 0B 1E 01 E6 04 5F 97 1F 03 1E 01 89 CD +R 00 00 00 09 +T 00 03 1E 00 3A 5B 02 1E 0B 1D 07 B2 90 5F 5D 2A +R 00 00 00 09 00 03 00 09 +T 00 03 2B 02 90 5A +R 00 00 00 09 +T 00 03 2E +R 00 00 00 09 +T 00 03 2E 89 90 89 4B 80 4B 33 4B E1 4B 01 CD +R 00 00 00 09 +T 00 03 3A 00 00 5B 08 1F 11 17 0F AE 07 B2 1F 0D +R 00 00 00 09 02 03 00 05 +T 00 03 47 +R 00 00 00 09 +T 00 03 47 1E 0D 13 0B 2E 29 4B 04 4B 00 1E 0F 89 +R 00 00 00 09 +T 00 03 54 CD 00 00 5B 04 5D 26 13 1E 11 1C 51 80 +R 00 00 00 09 02 04 00 04 +T 00 03 61 1F 11 7B 10 A9 01 6B 10 7B 0F A9 00 6B +R 00 00 00 09 +T 00 03 6E 0F +R 00 00 00 09 +T 00 03 6F +R 00 00 00 09 +T 00 03 6F 1E 0D 5C 1F 0D 20 D1 +R 00 00 00 09 +T 00 03 76 +R 00 00 00 09 +T 00 03 76 16 11 17 07 16 0F 17 05 4B 04 4B 00 1E +R 00 00 00 09 +T 00 03 83 0D 89 CD 00 00 5B 04 1F 09 90 5F +R 00 00 00 09 02 06 00 04 +T 00 03 8E +R 00 00 00 09 +T 00 03 8E 51 13 03 51 2E 62 90 A3 00 01 26 1B 1E +R 00 00 00 09 +T 00 03 9B 09 26 17 1E 07 1C 3B 80 1F 11 1E 05 24 +R 00 00 00 09 +T 00 03 A8 01 5C +R 00 00 00 09 +T 00 03 AA +R 00 00 00 09 +T 00 03 AA 1C 00 26 1F 05 1E 11 1F 07 20 3D +R 00 00 00 09 +T 00 03 B5 +R 00 00 00 09 +T 00 03 B5 93 1C 00 00 F6 6B 12 0F 11 0F 10 0F 0F +R 00 00 00 09 00 05 00 07 +T 00 03 C2 90 89 1E 13 89 1E 13 89 4B 80 4B 51 4B +R 00 00 00 09 +T 00 03 CF 01 4B 00 CD 00 00 5B 08 1F 0F 17 0D 90 +R 00 00 00 09 02 07 00 05 +T 00 03 DC 85 1E 07 72 FB 0D 1F 11 1E 05 24 01 5C +R 00 00 00 09 +T 00 03 E9 +R 00 00 00 09 +T 00 03 E9 72 FB 0B 1F 05 1E 11 1F 07 +R 00 00 00 09 +T 00 03 F2 +R 00 00 00 09 +T 00 03 F2 90 5C 20 98 +R 00 00 00 09 +T 00 03 F6 +R 00 00 00 09 +T 00 03 F6 1E 01 E6 03 5F 97 5A 90 5F 5D 2A 02 90 +R 00 00 00 09 +T 00 04 03 5A +R 00 00 00 09 +T 00 04 04 +R 00 00 00 09 +T 00 04 04 89 90 89 4B 80 4B 51 4B 01 4B 00 CD +R 00 00 00 09 +T 00 04 10 00 00 5B 08 51 72 F9 07 9F 19 06 02 19 +R 00 00 00 09 02 03 00 05 +T 00 04 1D 05 95 17 11 1F 0F 1E 01 E6 02 5F 97 90 +R 00 00 00 09 +T 00 04 2A 5F 89 90 89 4B 10 4B 0E 5F 89 CD 00 00 +R 00 00 00 09 02 0E 00 05 +T 00 04 37 5B 08 90 9F 72 FB 11 19 10 90 02 19 0F +R 00 00 00 09 +T 00 04 44 90 95 1F 0D 1E 01 E6 01 5F 97 89 58 58 +R 00 00 00 09 +T 00 04 51 58 58 72 F0 01 58 58 5B 02 1F 11 7B 11 +R 00 00 00 09 +T 00 04 5E 49 4F A2 00 6B 10 6B 0F 1E 0D 72 FB 11 +R 00 00 00 09 +T 00 04 6B 90 9F 19 10 88 90 9E 19 10 90 95 84 1F +R 00 00 00 09 +T 00 04 78 11 6B 10 1E 01 F6 5F 97 1F 0D 7B 0D 49 +R 00 00 00 09 +T 00 04 85 4F A2 00 6B 0C 6B 0B 1E 11 72 FB 0D 7B +R 00 00 00 09 +T 00 04 92 10 19 0C 90 02 19 0B 90 95 5B 12 81 +R 00 00 00 09 +T 00 00 00 +R 00 00 00 07 +T 00 00 00 1F 1C 1F 1E 1F 1E 1F 1F 1E 1F 1E 1F +R 00 00 00 07 +T 00 00 0C +R 00 00 00 07 +T 00 00 0C 00 51 00 55 +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 10 00 59 00 5D +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 14 00 61 00 65 +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 18 00 69 00 6D +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 1C 00 71 00 75 +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 20 00 79 00 7D +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 24 +R 00 00 00 07 +T 00 00 24 00 81 00 85 +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 28 00 89 00 8D +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 2C 00 91 00 95 +R 00 00 00 07 00 03 00 07 00 05 00 07 +T 00 00 30 00 99 +R 00 00 00 07 00 03 00 07 +T 00 00 32 +R 00 00 00 07 +T 00 00 32 25 73 20 25 73 20 25 32 64 20 25 30 32 +R 00 00 00 07 +T 00 00 3F 64 3A 25 30 32 64 3A 25 30 32 64 20 25 +R 00 00 00 07 +T 00 00 4C 30 34 64 0A 00 +R 00 00 00 07 +T 00 00 51 +R 00 00 00 07 +T 00 00 51 4A 61 6E 00 +R 00 00 00 07 +T 00 00 55 +R 00 00 00 07 +T 00 00 55 46 65 62 00 +R 00 00 00 07 +T 00 00 59 +R 00 00 00 07 +T 00 00 59 4D 61 72 00 +R 00 00 00 07 +T 00 00 5D +R 00 00 00 07 +T 00 00 5D 41 70 72 00 +R 00 00 00 07 +T 00 00 61 +R 00 00 00 07 +T 00 00 61 4D 61 79 00 +R 00 00 00 07 +T 00 00 65 +R 00 00 00 07 +T 00 00 65 4A 75 6E 00 +R 00 00 00 07 +T 00 00 69 +R 00 00 00 07 +T 00 00 69 4A 75 6C 00 +R 00 00 00 07 +T 00 00 6D +R 00 00 00 07 +T 00 00 6D 41 75 67 00 +R 00 00 00 07 +T 00 00 71 +R 00 00 00 07 +T 00 00 71 53 65 70 00 +R 00 00 00 07 +T 00 00 75 +R 00 00 00 07 +T 00 00 75 4F 63 74 00 +R 00 00 00 07 +T 00 00 79 +R 00 00 00 07 +T 00 00 79 4E 6F 76 00 +R 00 00 00 07 +T 00 00 7D +R 00 00 00 07 +T 00 00 7D 44 65 63 00 +R 00 00 00 07 +T 00 00 81 +R 00 00 00 07 +T 00 00 81 53 75 6E 00 +R 00 00 00 07 +T 00 00 85 +R 00 00 00 07 +T 00 00 85 4D 6F 6E 00 +R 00 00 00 07 +T 00 00 89 +R 00 00 00 07 +T 00 00 89 54 75 65 00 +R 00 00 00 07 +T 00 00 8D +R 00 00 00 07 +T 00 00 8D 57 65 64 00 +R 00 00 00 07 +T 00 00 91 +R 00 00 00 07 +T 00 00 91 54 68 75 00 +R 00 00 00 07 +T 00 00 95 +R 00 00 00 07 +T 00 00 95 46 72 69 00 +R 00 00 00 07 +T 00 00 99 +R 00 00 00 07 +T 00 00 99 53 61 74 00 +R 00 00 00 07 diff --git a/device/lib/stm8/time.sym b/device/lib/stm8/time.sym new file mode 100644 index 0000000..a37e4ed --- /dev/null +++ b/device/lib/stm8/time.sym @@ -0,0 +1,65 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _CheckTime 00003A R + 9 _RtcRead 000000 GR + 7 ___day 000024 GR + 7 ___month 00000C GR + 7 ___str_0 000032 R + __divulong ****** GX + __modsint ****** GX + __modulong ****** GX + __mullong ****** GX + 7 __str_1 000051 R + 7 __str_10 000075 R + 7 __str_11 000079 R + 7 __str_12 00007D R + 7 __str_13 000081 R + 7 __str_14 000085 R + 7 __str_15 000089 R + 7 __str_16 00008D R + 7 __str_17 000091 R + 7 __str_18 000095 R + 7 __str_19 000099 R + 7 __str_2 000055 R + 7 __str_3 000059 R + 7 __str_4 00005D R + 7 __str_5 000061 R + 7 __str_6 000065 R + 7 __str_7 000069 R + 7 __str_8 00006D R + 7 __str_9 000071 R + 1 _ascTimeBuffer 000000 R + 9 _asctime 000096 GR + 9 _ctime 000104 GR + 9 _gmtime 00011C GR + 1 _lastTime 000020 R + 9 _localtime 000113 GR + 9 _mktime 000304 GR + 7 _monthDays 000000 R + _sprintf ****** GX + 9 _time 000002 GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 2C flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 9D flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 49E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/tolower.asm b/device/lib/stm8/tolower.asm new file mode 100644 index 0000000..9733739 --- /dev/null +++ b/device/lib/stm8/tolower.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module tolower + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _tolower +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../tolower.c: 33: int tolower (int c) +; ----------------------------------------- +; function tolower +; ----------------------------------------- +_tolower: +; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c); + ldw x, (0x03, sp) +; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z'); + ld a, xl + cp a, #0x41 + jrnc 00117$ + ret +00117$: + cp a, #0x5a + jrule 00118$ + ret +00118$: +; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c); + addw x, #0x0020 +; ../tolower.c: 36: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/tolower.lst b/device/lib/stm8/tolower.lst new file mode 100644 index 0000000..5e89d2c --- /dev/null +++ b/device/lib/stm8/tolower.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module tolower + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _tolower + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../tolower.c: 33: int tolower (int c) + 50 ; ----------------------------------------- + 51 ; function tolower + 52 ; ----------------------------------------- + 000000 53 _tolower: + 54 ; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 56 ; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z'); + 000002 9F [ 1] 57 ld a, xl + 000003 A1 41 [ 1] 58 cp a, #0x41 + 000005 24 01 [ 1] 59 jrnc 00117$ + 000007 81 [ 4] 60 ret + 000008 61 00117$: + 000008 A1 5A [ 1] 62 cp a, #0x5a + 00000A 23 01 [ 2] 63 jrule 00118$ + 00000C 81 [ 4] 64 ret + 00000D 65 00118$: + 66 ; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c); + 00000D 1C 00 20 [ 2] 67 addw x, #0x0020 + 68 ; ../tolower.c: 36: } + 000010 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/tolower.rel b/device/lib/stm8/tolower.rel new file mode 100644 index 0000000..f9130e7 --- /dev/null +++ b/device/lib/stm8/tolower.rel @@ -0,0 +1,29 @@ +XH3 +H B areas 2 global symbols +M tolower +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 11 flags 0 addr 0 +S _tolower Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 9F A1 41 24 01 81 +R 00 00 00 09 +T 00 00 08 +R 00 00 00 09 +T 00 00 08 A1 5A 23 01 81 +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 1C 00 20 81 +R 00 00 00 09 diff --git a/device/lib/stm8/tolower.sym b/device/lib/stm8/tolower.sym new file mode 100644 index 0000000..908c93e --- /dev/null +++ b/device/lib/stm8/tolower.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _tolower 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 11 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/toupper.asm b/device/lib/stm8/toupper.asm new file mode 100644 index 0000000..8bf9d26 --- /dev/null +++ b/device/lib/stm8/toupper.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module toupper + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _toupper +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../toupper.c: 33: int toupper (int c) +; ----------------------------------------- +; function toupper +; ----------------------------------------- +_toupper: +; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c); + ldw x, (0x03, sp) +; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z'); + ld a, xl + cp a, #0x61 + jrnc 00117$ + ret +00117$: + cp a, #0x7a + jrule 00118$ + ret +00118$: +; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c); + addw x, #0xffe0 +; ../toupper.c: 36: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/toupper.lst b/device/lib/stm8/toupper.lst new file mode 100644 index 0000000..8a9f006 --- /dev/null +++ b/device/lib/stm8/toupper.lst @@ -0,0 +1,73 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module toupper + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _toupper + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../toupper.c: 33: int toupper (int c) + 50 ; ----------------------------------------- + 51 ; function toupper + 52 ; ----------------------------------------- + 000000 53 _toupper: + 54 ; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c); + 000000 1E 03 [ 2] 55 ldw x, (0x03, sp) + 56 ; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z'); + 000002 9F [ 1] 57 ld a, xl + 000003 A1 61 [ 1] 58 cp a, #0x61 + 000005 24 01 [ 1] 59 jrnc 00117$ + 000007 81 [ 4] 60 ret + 000008 61 00117$: + 000008 A1 7A [ 1] 62 cp a, #0x7a + 00000A 23 01 [ 2] 63 jrule 00118$ + 00000C 81 [ 4] 64 ret + 00000D 65 00118$: + 66 ; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c); + 00000D 1C FF E0 [ 2] 67 addw x, #0xffe0 + 68 ; ../toupper.c: 36: } + 000010 81 [ 4] 69 ret + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8/toupper.rel b/device/lib/stm8/toupper.rel new file mode 100644 index 0000000..f05683d --- /dev/null +++ b/device/lib/stm8/toupper.rel @@ -0,0 +1,29 @@ +XH3 +H B areas 2 global symbols +M toupper +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 11 flags 0 addr 0 +S _toupper Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 03 9F A1 61 24 01 81 +R 00 00 00 09 +T 00 00 08 +R 00 00 00 09 +T 00 00 08 A1 7A 23 01 81 +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 1C FF E0 81 +R 00 00 00 09 diff --git a/device/lib/stm8/toupper.sym b/device/lib/stm8/toupper.sym new file mode 100644 index 0000000..a699e3c --- /dev/null +++ b/device/lib/stm8/toupper.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _toupper 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 11 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/vprintf.asm b/device/lib/stm8/vprintf.asm new file mode 100644 index 0000000..ac413d5 --- /dev/null +++ b/device/lib/stm8/vprintf.asm @@ -0,0 +1,110 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module vprintf + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _putchar + .globl __print_format + .globl _vprintf + .globl _printf +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../vprintf.c: 34: put_char_to_stdout (char c, void* p) _REENTRANT +; ----------------------------------------- +; function put_char_to_stdout +; ----------------------------------------- +_put_char_to_stdout: +; ../vprintf.c: 37: putchar (c); + clrw x + ld a, (0x03, sp) + ld xl, a + pushw x + call _putchar + addw sp, #2 +; ../vprintf.c: 38: } + ret +; ../vprintf.c: 41: vprintf (const char *format, va_list ap) +; ----------------------------------------- +; function vprintf +; ----------------------------------------- +_vprintf: +; ../vprintf.c: 43: return _print_format (put_char_to_stdout, NULL, format, ap); + ldw x, (0x05, sp) + pushw x + ldw x, (0x05, sp) + pushw x + clrw x + pushw x + push #<(_put_char_to_stdout + 0) + push #((_put_char_to_stdout + 0) >> 8) + call __print_format + addw sp, #8 +; ../vprintf.c: 44: } + ret +; ../vprintf.c: 47: printf (const char *format, ...) +; ----------------------------------------- +; function printf +; ----------------------------------------- +_printf: +; ../vprintf.c: 52: va_start (arg, format); + ldw x, sp + addw x, #3 + incw x + incw x +; ../vprintf.c: 53: i = _print_format (put_char_to_stdout, NULL, format, arg); + pushw x + ldw x, (0x05, sp) + pushw x + clrw x + pushw x + push #<(_put_char_to_stdout + 0) + push #((_put_char_to_stdout + 0) >> 8) + call __print_format + addw sp, #8 +; ../vprintf.c: 56: return i; +; ../vprintf.c: 57: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/vprintf.lst b/device/lib/stm8/vprintf.lst new file mode 100644 index 0000000..28ef086 --- /dev/null +++ b/device/lib/stm8/vprintf.lst @@ -0,0 +1,110 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module vprintf + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _putchar + 12 .globl __print_format + 13 .globl _vprintf + 14 .globl _printf + 15 ;-------------------------------------------------------- + 16 ; ram data + 17 ;-------------------------------------------------------- + 18 .area DATA + 19 ;-------------------------------------------------------- + 20 ; ram data + 21 ;-------------------------------------------------------- + 22 .area INITIALIZED + 23 ;-------------------------------------------------------- + 24 ; absolute external ram data + 25 ;-------------------------------------------------------- + 26 .area DABS (ABS) + 27 + 28 ; default segment ordering for linker + 29 .area HOME + 30 .area GSINIT + 31 .area GSFINAL + 32 .area CONST + 33 .area INITIALIZER + 34 .area CODE + 35 + 36 ;-------------------------------------------------------- + 37 ; global & static initialisations + 38 ;-------------------------------------------------------- + 39 .area HOME + 40 .area GSINIT + 41 .area GSFINAL + 42 .area GSINIT + 43 ;-------------------------------------------------------- + 44 ; Home + 45 ;-------------------------------------------------------- + 46 .area HOME + 47 .area HOME + 48 ;-------------------------------------------------------- + 49 ; code + 50 ;-------------------------------------------------------- + 51 .area CODE + 52 ; ../vprintf.c: 34: put_char_to_stdout (char c, void* p) _REENTRANT + 53 ; ----------------------------------------- + 54 ; function put_char_to_stdout + 55 ; ----------------------------------------- + 000000 56 _put_char_to_stdout: + 57 ; ../vprintf.c: 37: putchar (c); + 000000 5F [ 1] 58 clrw x + 000001 7B 03 [ 1] 59 ld a, (0x03, sp) + 000003 97 [ 1] 60 ld xl, a + 000004 89 [ 2] 61 pushw x + 000005 CDr00r00 [ 4] 62 call _putchar + 000008 5B 02 [ 2] 63 addw sp, #2 + 64 ; ../vprintf.c: 38: } + 00000A 81 [ 4] 65 ret + 66 ; ../vprintf.c: 41: vprintf (const char *format, va_list ap) + 67 ; ----------------------------------------- + 68 ; function vprintf + 69 ; ----------------------------------------- + 00000B 70 _vprintf: + 71 ; ../vprintf.c: 43: return _print_format (put_char_to_stdout, NULL, format, ap); + 00000B 1E 05 [ 2] 72 ldw x, (0x05, sp) + 00000D 89 [ 2] 73 pushw x + 00000E 1E 05 [ 2] 74 ldw x, (0x05, sp) + 000010 89 [ 2] 75 pushw x + 000011 5F [ 1] 76 clrw x + 000012 89 [ 2] 77 pushw x + 000013 4Br00 [ 1] 78 push #<(_put_char_to_stdout + 0) + 000015 4Bs00 [ 1] 79 push #((_put_char_to_stdout + 0) >> 8) + 000017 CDr00r00 [ 4] 80 call __print_format + 00001A 5B 08 [ 2] 81 addw sp, #8 + 82 ; ../vprintf.c: 44: } + 00001C 81 [ 4] 83 ret + 84 ; ../vprintf.c: 47: printf (const char *format, ...) + 85 ; ----------------------------------------- + 86 ; function printf + 87 ; ----------------------------------------- + 00001D 88 _printf: + 89 ; ../vprintf.c: 52: va_start (arg, format); + 00001D 96 [ 1] 90 ldw x, sp + 00001E 1C 00 03 [ 2] 91 addw x, #3 + 000021 5C [ 1] 92 incw x + 000022 5C [ 1] 93 incw x + 94 ; ../vprintf.c: 53: i = _print_format (put_char_to_stdout, NULL, format, arg); + 000023 89 [ 2] 95 pushw x + 000024 1E 05 [ 2] 96 ldw x, (0x05, sp) + 000026 89 [ 2] 97 pushw x + 000027 5F [ 1] 98 clrw x + 000028 89 [ 2] 99 pushw x + 000029 4Br00 [ 1] 100 push #<(_put_char_to_stdout + 0) + 00002B 4Bs00 [ 1] 101 push #((_put_char_to_stdout + 0) >> 8) + 00002D CDr00r00 [ 4] 102 call __print_format + 000030 5B 08 [ 2] 103 addw sp, #8 + 104 ; ../vprintf.c: 56: return i; + 105 ; ../vprintf.c: 57: } + 000032 81 [ 4] 106 ret + 107 .area CODE + 108 .area CONST + 109 .area INITIALIZER + 110 .area CABS (ABS) diff --git a/device/lib/stm8/vprintf.rel b/device/lib/stm8/vprintf.rel new file mode 100644 index 0000000..e9660ce --- /dev/null +++ b/device/lib/stm8/vprintf.rel @@ -0,0 +1,38 @@ +XH3 +H B areas 5 global symbols +M vprintf +O -mstm8 +S __print_format Ref000000 +S _putchar Ref000000 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 33 flags 0 addr 0 +S _vprintf Def00000B +S _printf Def00001D +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 5F 7B 03 97 89 CD 00 00 5B 02 81 +R 00 00 00 09 02 09 00 01 +T 00 00 0B +R 00 00 00 09 +T 00 00 0B 1E 05 89 1E 05 89 5F 89 4B 00 00 00 4B +R 00 00 00 09 F1 09 0C 00 09 +T 00 00 16 00 00 00 CD 00 00 5B 08 81 +R 00 00 00 09 F1 81 03 00 09 02 07 00 00 +T 00 00 1D +R 00 00 00 09 +T 00 00 1D 96 1C 00 03 5C 5C 89 1E 05 89 5F 89 4B +R 00 00 00 09 +T 00 00 2A 00 00 00 4B 00 00 00 CD +R 00 00 00 09 F1 09 03 00 09 F1 81 07 00 09 +T 00 00 2E 00 00 5B 08 81 +R 00 00 00 09 02 03 00 00 diff --git a/device/lib/stm8/vprintf.sym b/device/lib/stm8/vprintf.sym new file mode 100644 index 0000000..f8c4e86 --- /dev/null +++ b/device/lib/stm8/vprintf.sym @@ -0,0 +1,32 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + __print_format ****** GX + 9 _printf 00001D GR + 9 _put_char_to_stdout 000000 R + _putchar ****** GX + 9 _vprintf 00000B GR + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 33 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/wcrtomb.asm b/device/lib/stm8/wcrtomb.asm new file mode 100644 index 0000000..04b2299 --- /dev/null +++ b/device/lib/stm8/wcrtomb.asm @@ -0,0 +1,78 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module wcrtomb + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _wctomb + .globl _wcrtomb +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../wcrtomb.c: 34: size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict ps) +; ----------------------------------------- +; function wcrtomb +; ----------------------------------------- +_wcrtomb: +; ../wcrtomb.c: 40: ret = wctomb(s, wc); + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + call _wctomb + addw sp, #6 +; ../wcrtomb.c: 42: if(ret == (size_t)(-1)) + cpw x, #0xffff + jreq 00112$ + ret +00112$: +; ../wcrtomb.c: 43: errno = EILSEQ; + mov _errno+1, #0x54 + clr _errno+0 +; ../wcrtomb.c: 45: return(ret); +; ../wcrtomb.c: 46: } + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/wcrtomb.lst b/device/lib/stm8/wcrtomb.lst new file mode 100644 index 0000000..e7a7de7 --- /dev/null +++ b/device/lib/stm8/wcrtomb.lst @@ -0,0 +1,78 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module wcrtomb + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _wctomb + 12 .globl _wcrtomb + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../wcrtomb.c: 34: size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict ps) + 51 ; ----------------------------------------- + 52 ; function wcrtomb + 53 ; ----------------------------------------- + 000000 54 _wcrtomb: + 55 ; ../wcrtomb.c: 40: ret = wctomb(s, wc); + 000000 1E 07 [ 2] 56 ldw x, (0x07, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 07 [ 2] 58 ldw x, (0x07, sp) + 000005 89 [ 2] 59 pushw x + 000006 1E 07 [ 2] 60 ldw x, (0x07, sp) + 000008 89 [ 2] 61 pushw x + 000009 CDr00r00 [ 4] 62 call _wctomb + 00000C 5B 06 [ 2] 63 addw sp, #6 + 64 ; ../wcrtomb.c: 42: if(ret == (size_t)(-1)) + 00000E A3 FF FF [ 2] 65 cpw x, #0xffff + 000011 27 01 [ 1] 66 jreq 00112$ + 000013 81 [ 4] 67 ret + 000014 68 00112$: + 69 ; ../wcrtomb.c: 43: errno = EILSEQ; + 000014 35 54u00u01 [ 1] 70 mov _errno+1, #0x54 + 000018 72 5Fu00u00 [ 1] 71 clr _errno+0 + 72 ; ../wcrtomb.c: 45: return(ret); + 73 ; ../wcrtomb.c: 46: } + 00001C 81 [ 4] 74 ret + 75 .area CODE + 76 .area CONST + 77 .area INITIALIZER + 78 .area CABS (ABS) diff --git a/device/lib/stm8/wcrtomb.rel b/device/lib/stm8/wcrtomb.rel new file mode 100644 index 0000000..cca8c5d --- /dev/null +++ b/device/lib/stm8/wcrtomb.rel @@ -0,0 +1,29 @@ +XH3 +H B areas 4 global symbols +M wcrtomb +O -mstm8 +S _errno Ref000000 +S .__.ABS. Def000000 +S _wctomb Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1D flags 0 addr 0 +S _wcrtomb Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 1E 07 89 1E 07 89 1E 07 89 CD 00 00 5B +R 00 00 00 09 02 0D 00 02 +T 00 00 0D 06 A3 FF FF 27 01 81 +R 00 00 00 09 +T 00 00 14 +R 00 00 00 09 +T 00 00 14 35 54 00 01 72 5F 00 00 81 +R 00 00 00 09 12 05 00 00 12 09 00 00 diff --git a/device/lib/stm8/wcrtomb.sym b/device/lib/stm8/wcrtomb.sym new file mode 100644 index 0000000..857566d --- /dev/null +++ b/device/lib/stm8/wcrtomb.sym @@ -0,0 +1,31 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + _errno ****** GX + 9 _wcrtomb 000000 GR + _wctomb ****** GX + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/wcscmp.asm b/device/lib/stm8/wcscmp.asm new file mode 100644 index 0000000..53c1440 --- /dev/null +++ b/device/lib/stm8/wcscmp.asm @@ -0,0 +1,127 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module wcscmp + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _wcscmp +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../wcscmp.c: 31: int wcscmp(const wchar_t *s1, const wchar_t *s2) +; ----------------------------------------- +; function wcscmp +; ----------------------------------------- +_wcscmp: + sub sp, #10 +; ../wcscmp.c: 33: while(*s1 == *s2 && *s1) + ldw y, (0x0d, sp) + ldw x, (0x0f, sp) + ldw (0x09, sp), x +00102$: + ldw x, y + ld a, (0x3, x) + ld (0x04, sp), a + ld a, (0x2, x) + ld (0x03, sp), a + ldw x, (x) + ldw (0x01, sp), x + ldw x, (0x09, sp) + ld a, (0x3, x) + ld (0x08, sp), a + ld a, (0x2, x) + ld (0x07, sp), a + ldw x, (x) + ldw (0x05, sp), x + ldw x, (0x03, sp) + cpw x, (0x07, sp) + jrne 00104$ + ldw x, (0x01, sp) + cpw x, (0x05, sp) + jrne 00104$ + ldw x, (0x03, sp) + jrne 00140$ + ldw x, (0x01, sp) + jreq 00104$ +00140$: +; ../wcscmp.c: 34: s1++, s2++; + addw y, #0x0004 + ldw x, (0x09, sp) + addw x, #0x0004 + ldw (0x09, sp), x + jra 00102$ +00104$: +; ../wcscmp.c: 36: if(*s1 < *s2) + ldw x, (0x03, sp) + cpw x, (0x07, sp) + ld a, (0x02, sp) + sbc a, (0x06, sp) + ld a, (0x01, sp) + sbc a, (0x05, sp) + jrnc 00106$ +; ../wcscmp.c: 37: return(-1); + clrw x + decw x + jra 00109$ +00106$: +; ../wcscmp.c: 38: if(*s1 > *s2) + ldw x, (0x07, sp) + cpw x, (0x03, sp) + ld a, (0x06, sp) + sbc a, (0x02, sp) + ld a, (0x05, sp) + sbc a, (0x01, sp) + jrnc 00108$ +; ../wcscmp.c: 39: return(1); + clrw x + incw x +; ../wcscmp.c: 40: return(0); + .byte 0x21 +00108$: + clrw x +00109$: +; ../wcscmp.c: 41: } + addw sp, #10 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/wcscmp.lst b/device/lib/stm8/wcscmp.lst new file mode 100644 index 0000000..2de3e98 --- /dev/null +++ b/device/lib/stm8/wcscmp.lst @@ -0,0 +1,127 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module wcscmp + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _wcscmp + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../wcscmp.c: 31: int wcscmp(const wchar_t *s1, const wchar_t *s2) + 50 ; ----------------------------------------- + 51 ; function wcscmp + 52 ; ----------------------------------------- + 000000 53 _wcscmp: + 000000 52 0A [ 2] 54 sub sp, #10 + 55 ; ../wcscmp.c: 33: while(*s1 == *s2 && *s1) + 000002 16 0D [ 2] 56 ldw y, (0x0d, sp) + 000004 1E 0F [ 2] 57 ldw x, (0x0f, sp) + 000006 1F 09 [ 2] 58 ldw (0x09, sp), x + 000008 59 00102$: + 000008 93 [ 1] 60 ldw x, y + 000009 E6 03 [ 1] 61 ld a, (0x3, x) + 00000B 6B 04 [ 1] 62 ld (0x04, sp), a + 00000D E6 02 [ 1] 63 ld a, (0x2, x) + 00000F 6B 03 [ 1] 64 ld (0x03, sp), a + 000011 FE [ 2] 65 ldw x, (x) + 000012 1F 01 [ 2] 66 ldw (0x01, sp), x + 000014 1E 09 [ 2] 67 ldw x, (0x09, sp) + 000016 E6 03 [ 1] 68 ld a, (0x3, x) + 000018 6B 08 [ 1] 69 ld (0x08, sp), a + 00001A E6 02 [ 1] 70 ld a, (0x2, x) + 00001C 6B 07 [ 1] 71 ld (0x07, sp), a + 00001E FE [ 2] 72 ldw x, (x) + 00001F 1F 05 [ 2] 73 ldw (0x05, sp), x + 000021 1E 03 [ 2] 74 ldw x, (0x03, sp) + 000023 13 07 [ 2] 75 cpw x, (0x07, sp) + 000025 26 1B [ 1] 76 jrne 00104$ + 000027 1E 01 [ 2] 77 ldw x, (0x01, sp) + 000029 13 05 [ 2] 78 cpw x, (0x05, sp) + 00002B 26 15 [ 1] 79 jrne 00104$ + 00002D 1E 03 [ 2] 80 ldw x, (0x03, sp) + 00002F 26 04 [ 1] 81 jrne 00140$ + 000031 1E 01 [ 2] 82 ldw x, (0x01, sp) + 000033 27 0D [ 1] 83 jreq 00104$ + 000035 84 00140$: + 85 ; ../wcscmp.c: 34: s1++, s2++; + 000035 72 A9 00 04 [ 2] 86 addw y, #0x0004 + 000039 1E 09 [ 2] 87 ldw x, (0x09, sp) + 00003B 1C 00 04 [ 2] 88 addw x, #0x0004 + 00003E 1F 09 [ 2] 89 ldw (0x09, sp), x + 000040 20 C6 [ 2] 90 jra 00102$ + 000042 91 00104$: + 92 ; ../wcscmp.c: 36: if(*s1 < *s2) + 000042 1E 03 [ 2] 93 ldw x, (0x03, sp) + 000044 13 07 [ 2] 94 cpw x, (0x07, sp) + 000046 7B 02 [ 1] 95 ld a, (0x02, sp) + 000048 12 06 [ 1] 96 sbc a, (0x06, sp) + 00004A 7B 01 [ 1] 97 ld a, (0x01, sp) + 00004C 12 05 [ 1] 98 sbc a, (0x05, sp) + 00004E 24 04 [ 1] 99 jrnc 00106$ + 100 ; ../wcscmp.c: 37: return(-1); + 000050 5F [ 1] 101 clrw x + 000051 5A [ 2] 102 decw x + 000052 20 12 [ 2] 103 jra 00109$ + 000054 104 00106$: + 105 ; ../wcscmp.c: 38: if(*s1 > *s2) + 000054 1E 07 [ 2] 106 ldw x, (0x07, sp) + 000056 13 03 [ 2] 107 cpw x, (0x03, sp) + 000058 7B 06 [ 1] 108 ld a, (0x06, sp) + 00005A 12 02 [ 1] 109 sbc a, (0x02, sp) + 00005C 7B 05 [ 1] 110 ld a, (0x05, sp) + 00005E 12 01 [ 1] 111 sbc a, (0x01, sp) + 000060 24 03 [ 1] 112 jrnc 00108$ + 113 ; ../wcscmp.c: 39: return(1); + 000062 5F [ 1] 114 clrw x + 000063 5C [ 1] 115 incw x + 116 ; ../wcscmp.c: 40: return(0); + 000064 21 117 .byte 0x21 + 000065 118 00108$: + 000065 5F [ 1] 119 clrw x + 000066 120 00109$: + 121 ; ../wcscmp.c: 41: } + 000066 5B 0A [ 2] 122 addw sp, #10 + 000068 81 [ 4] 123 ret + 124 .area CODE + 125 .area CONST + 126 .area INITIALIZER + 127 .area CABS (ABS) diff --git a/device/lib/stm8/wcscmp.rel b/device/lib/stm8/wcscmp.rel new file mode 100644 index 0000000..baf655b --- /dev/null +++ b/device/lib/stm8/wcscmp.rel @@ -0,0 +1,55 @@ +XH3 +H B areas 2 global symbols +M wcscmp +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 69 flags 0 addr 0 +S _wcscmp Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 16 0D 1E 0F 1F 09 +R 00 00 00 09 +T 00 00 08 +R 00 00 00 09 +T 00 00 08 93 E6 03 6B 04 E6 02 6B 03 FE 1F 01 1E +R 00 00 00 09 +T 00 00 15 09 E6 03 6B 08 E6 02 6B 07 FE 1F 05 1E +R 00 00 00 09 +T 00 00 22 03 13 07 26 1B 1E 01 13 05 26 15 1E 03 +R 00 00 00 09 +T 00 00 2F 26 04 1E 01 27 0D +R 00 00 00 09 +T 00 00 35 +R 00 00 00 09 +T 00 00 35 72 A9 00 04 1E 09 1C 00 04 1F 09 20 C6 +R 00 00 00 09 +T 00 00 42 +R 00 00 00 09 +T 00 00 42 1E 03 13 07 7B 02 12 06 7B 01 12 05 24 +R 00 00 00 09 +T 00 00 4F 04 5F 5A 20 12 +R 00 00 00 09 +T 00 00 54 +R 00 00 00 09 +T 00 00 54 1E 07 13 03 7B 06 12 02 7B 05 12 01 24 +R 00 00 00 09 +T 00 00 61 03 5F 5C 21 +R 00 00 00 09 +T 00 00 65 +R 00 00 00 09 +T 00 00 65 5F +R 00 00 00 09 +T 00 00 66 +R 00 00 00 09 +T 00 00 66 5B 0A 81 +R 00 00 00 09 diff --git a/device/lib/stm8/wcscmp.sym b/device/lib/stm8/wcscmp.sym new file mode 100644 index 0000000..78e2207 --- /dev/null +++ b/device/lib/stm8/wcscmp.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _wcscmp 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 69 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/wcslen.asm b/device/lib/stm8/wcslen.asm new file mode 100644 index 0000000..11fb9b5 --- /dev/null +++ b/device/lib/stm8/wcslen.asm @@ -0,0 +1,88 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module wcslen + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _wcslen +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../wcslen.c: 31: size_t wcslen(const wchar_t *s) +; ----------------------------------------- +; function wcslen +; ----------------------------------------- +_wcslen: + sub sp, #6 +; ../wcslen.c: 34: while (*s) + clrw x + ldw (0x05, sp), x + ldw y, (0x09, sp) +00101$: + ldw x, y + ld a, (0x3, x) + ld (0x04, sp), a + ld a, (0x2, x) + ld (0x03, sp), a + ldw x, (x) + ldw (0x01, sp), x + ldw x, (0x03, sp) + jrne 00117$ + ldw x, (0x01, sp) + jreq 00103$ +00117$: +; ../wcslen.c: 36: n++; + ldw x, (0x05, sp) + incw x + ldw (0x05, sp), x +; ../wcslen.c: 37: s++; + addw y, #0x0004 + jra 00101$ +00103$: +; ../wcslen.c: 40: return n; + ldw x, (0x05, sp) +; ../wcslen.c: 41: } + addw sp, #6 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/wcslen.lst b/device/lib/stm8/wcslen.lst new file mode 100644 index 0000000..3e7a7b9 --- /dev/null +++ b/device/lib/stm8/wcslen.lst @@ -0,0 +1,88 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module wcslen + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _wcslen + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../wcslen.c: 31: size_t wcslen(const wchar_t *s) + 50 ; ----------------------------------------- + 51 ; function wcslen + 52 ; ----------------------------------------- + 000000 53 _wcslen: + 000000 52 06 [ 2] 54 sub sp, #6 + 55 ; ../wcslen.c: 34: while (*s) + 000002 5F [ 1] 56 clrw x + 000003 1F 05 [ 2] 57 ldw (0x05, sp), x + 000005 16 09 [ 2] 58 ldw y, (0x09, sp) + 000007 59 00101$: + 000007 93 [ 1] 60 ldw x, y + 000008 E6 03 [ 1] 61 ld a, (0x3, x) + 00000A 6B 04 [ 1] 62 ld (0x04, sp), a + 00000C E6 02 [ 1] 63 ld a, (0x2, x) + 00000E 6B 03 [ 1] 64 ld (0x03, sp), a + 000010 FE [ 2] 65 ldw x, (x) + 000011 1F 01 [ 2] 66 ldw (0x01, sp), x + 000013 1E 03 [ 2] 67 ldw x, (0x03, sp) + 000015 26 04 [ 1] 68 jrne 00117$ + 000017 1E 01 [ 2] 69 ldw x, (0x01, sp) + 000019 27 0B [ 1] 70 jreq 00103$ + 00001B 71 00117$: + 72 ; ../wcslen.c: 36: n++; + 00001B 1E 05 [ 2] 73 ldw x, (0x05, sp) + 00001D 5C [ 1] 74 incw x + 00001E 1F 05 [ 2] 75 ldw (0x05, sp), x + 76 ; ../wcslen.c: 37: s++; + 000020 72 A9 00 04 [ 2] 77 addw y, #0x0004 + 000024 20 E1 [ 2] 78 jra 00101$ + 000026 79 00103$: + 80 ; ../wcslen.c: 40: return n; + 000026 1E 05 [ 2] 81 ldw x, (0x05, sp) + 82 ; ../wcslen.c: 41: } + 000028 5B 06 [ 2] 83 addw sp, #6 + 00002A 81 [ 4] 84 ret + 85 .area CODE + 86 .area CONST + 87 .area INITIALIZER + 88 .area CABS (ABS) diff --git a/device/lib/stm8/wcslen.rel b/device/lib/stm8/wcslen.rel new file mode 100644 index 0000000..f9143ed --- /dev/null +++ b/device/lib/stm8/wcslen.rel @@ -0,0 +1,35 @@ +XH3 +H B areas 2 global symbols +M wcslen +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 2B flags 0 addr 0 +S _wcslen Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 06 5F 1F 05 16 09 +R 00 00 00 09 +T 00 00 07 +R 00 00 00 09 +T 00 00 07 93 E6 03 6B 04 E6 02 6B 03 FE 1F 01 1E +R 00 00 00 09 +T 00 00 14 03 26 04 1E 01 27 0B +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 1E 05 5C 1F 05 72 A9 00 04 20 E1 +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 1E 05 5B 06 81 +R 00 00 00 09 diff --git a/device/lib/stm8/wcslen.sym b/device/lib/stm8/wcslen.sym new file mode 100644 index 0000000..0a2c7d3 --- /dev/null +++ b/device/lib/stm8/wcslen.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _wcslen 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 2B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/wcstombs.asm b/device/lib/stm8/wcstombs.asm new file mode 100644 index 0000000..0cb4796 --- /dev/null +++ b/device/lib/stm8/wcstombs.asm @@ -0,0 +1,142 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module wcstombs + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _wctomb + .globl _wcstombs +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../wcstombs.c: 33: size_t wcstombs(char *restrict s, const wchar_t *restrict pwcs, size_t n) +; ----------------------------------------- +; function wcstombs +; ----------------------------------------- +_wcstombs: + sub sp, #16 +; ../wcstombs.c: 35: size_t m = 0; + clrw x + ldw (0x09, sp), x +; ../wcstombs.c: 38: while(n > MB_LEN_MAX || n >= wctomb(buffer, *pwcs)) + ldw x, sp + addw x, #5 + ldw (0x0b, sp), x + ldw y, (0x15, sp) + ldw (0x0f, sp), y +00107$: + ldw x, (0x17, sp) + cpw x, #0x0004 + jrugt 00108$ + ldw x, (0x0f, sp) + ldw y, x + ldw y, (0x2, y) + ldw (0x03, sp), y + ldw x, (x) + ldw (0x01, sp), x + ldw x, (0x0b, sp) + ldw y, (0x03, sp) + pushw y + ldw y, (0x03, sp) + pushw y + pushw x + call _wctomb + addw sp, #6 + ldw (0x0d, sp), x + ldw x, (0x17, sp) + cpw x, (0x0d, sp) + jrc 00109$ +00108$: +; ../wcstombs.c: 40: int b = wctomb(s, *pwcs); + ldw x, (0x0f, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + pushw y + pushw x + ldw x, (0x17, sp) + pushw x + call _wctomb + addw sp, #6 +; ../wcstombs.c: 42: if(b == 1 && !*s) + cpw x, #0x0001 + jrne 00102$ + ldw y, (0x13, sp) + ld a, (y) + jreq 00109$ +; ../wcstombs.c: 43: break; +00102$: +; ../wcstombs.c: 44: if(b < 0) + tnzw x + jrpl 00105$ +; ../wcstombs.c: 45: return(-1); + clrw x + decw x + jra 00110$ +00105$: +; ../wcstombs.c: 47: n -= b; + ldw (0x0d, sp), x + ldw y, (0x17, sp) + subw y, (0x0d, sp) + ldw (0x17, sp), y +; ../wcstombs.c: 48: m += b; + ldw y, (0x09, sp) + addw y, (0x0d, sp) + ldw (0x09, sp), y +; ../wcstombs.c: 49: s += b; + addw x, (0x13, sp) + ldw (0x13, sp), x +; ../wcstombs.c: 50: pwcs++; + ldw x, (0x0f, sp) + addw x, #0x0004 + ldw (0x0f, sp), x + jra 00107$ +00109$: +; ../wcstombs.c: 53: return(m); + ldw x, (0x09, sp) +00110$: +; ../wcstombs.c: 54: } + addw sp, #16 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/wcstombs.lst b/device/lib/stm8/wcstombs.lst new file mode 100644 index 0000000..387b8f6 --- /dev/null +++ b/device/lib/stm8/wcstombs.lst @@ -0,0 +1,142 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module wcstombs + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _wctomb + 12 .globl _wcstombs + 13 ;-------------------------------------------------------- + 14 ; ram data + 15 ;-------------------------------------------------------- + 16 .area DATA + 17 ;-------------------------------------------------------- + 18 ; ram data + 19 ;-------------------------------------------------------- + 20 .area INITIALIZED + 21 ;-------------------------------------------------------- + 22 ; absolute external ram data + 23 ;-------------------------------------------------------- + 24 .area DABS (ABS) + 25 + 26 ; default segment ordering for linker + 27 .area HOME + 28 .area GSINIT + 29 .area GSFINAL + 30 .area CONST + 31 .area INITIALIZER + 32 .area CODE + 33 + 34 ;-------------------------------------------------------- + 35 ; global & static initialisations + 36 ;-------------------------------------------------------- + 37 .area HOME + 38 .area GSINIT + 39 .area GSFINAL + 40 .area GSINIT + 41 ;-------------------------------------------------------- + 42 ; Home + 43 ;-------------------------------------------------------- + 44 .area HOME + 45 .area HOME + 46 ;-------------------------------------------------------- + 47 ; code + 48 ;-------------------------------------------------------- + 49 .area CODE + 50 ; ../wcstombs.c: 33: size_t wcstombs(char *restrict s, const wchar_t *restrict pwcs, size_t n) + 51 ; ----------------------------------------- + 52 ; function wcstombs + 53 ; ----------------------------------------- + 000000 54 _wcstombs: + 000000 52 10 [ 2] 55 sub sp, #16 + 56 ; ../wcstombs.c: 35: size_t m = 0; + 000002 5F [ 1] 57 clrw x + 000003 1F 09 [ 2] 58 ldw (0x09, sp), x + 59 ; ../wcstombs.c: 38: while(n > MB_LEN_MAX || n >= wctomb(buffer, *pwcs)) + 000005 96 [ 1] 60 ldw x, sp + 000006 1C 00 05 [ 2] 61 addw x, #5 + 000009 1F 0B [ 2] 62 ldw (0x0b, sp), x + 00000B 16 15 [ 2] 63 ldw y, (0x15, sp) + 00000D 17 0F [ 2] 64 ldw (0x0f, sp), y + 00000F 65 00107$: + 00000F 1E 17 [ 2] 66 ldw x, (0x17, sp) + 000011 A3 00 04 [ 2] 67 cpw x, #0x0004 + 000014 22 24 [ 1] 68 jrugt 00108$ + 000016 1E 0F [ 2] 69 ldw x, (0x0f, sp) + 000018 90 93 [ 1] 70 ldw y, x + 00001A 90 EE 02 [ 2] 71 ldw y, (0x2, y) + 00001D 17 03 [ 2] 72 ldw (0x03, sp), y + 00001F FE [ 2] 73 ldw x, (x) + 000020 1F 01 [ 2] 74 ldw (0x01, sp), x + 000022 1E 0B [ 2] 75 ldw x, (0x0b, sp) + 000024 16 03 [ 2] 76 ldw y, (0x03, sp) + 000026 90 89 [ 2] 77 pushw y + 000028 16 03 [ 2] 78 ldw y, (0x03, sp) + 00002A 90 89 [ 2] 79 pushw y + 00002C 89 [ 2] 80 pushw x + 00002D CDr00r00 [ 4] 81 call _wctomb + 000030 5B 06 [ 2] 82 addw sp, #6 + 000032 1F 0D [ 2] 83 ldw (0x0d, sp), x + 000034 1E 17 [ 2] 84 ldw x, (0x17, sp) + 000036 13 0D [ 2] 85 cpw x, (0x0d, sp) + 000038 25 43 [ 1] 86 jrc 00109$ + 00003A 87 00108$: + 88 ; ../wcstombs.c: 40: int b = wctomb(s, *pwcs); + 00003A 1E 0F [ 2] 89 ldw x, (0x0f, sp) + 00003C 90 93 [ 1] 90 ldw y, x + 00003E 90 EE 02 [ 2] 91 ldw y, (0x2, y) + 000041 FE [ 2] 92 ldw x, (x) + 000042 90 89 [ 2] 93 pushw y + 000044 89 [ 2] 94 pushw x + 000045 1E 17 [ 2] 95 ldw x, (0x17, sp) + 000047 89 [ 2] 96 pushw x + 000048 CDr00r00 [ 4] 97 call _wctomb + 00004B 5B 06 [ 2] 98 addw sp, #6 + 99 ; ../wcstombs.c: 42: if(b == 1 && !*s) + 00004D A3 00 01 [ 2] 100 cpw x, #0x0001 + 000050 26 06 [ 1] 101 jrne 00102$ + 000052 16 13 [ 2] 102 ldw y, (0x13, sp) + 000054 90 F6 [ 1] 103 ld a, (y) + 000056 27 25 [ 1] 104 jreq 00109$ + 105 ; ../wcstombs.c: 43: break; + 000058 106 00102$: + 107 ; ../wcstombs.c: 44: if(b < 0) + 000058 5D [ 2] 108 tnzw x + 000059 2A 04 [ 1] 109 jrpl 00105$ + 110 ; ../wcstombs.c: 45: return(-1); + 00005B 5F [ 1] 111 clrw x + 00005C 5A [ 2] 112 decw x + 00005D 20 20 [ 2] 113 jra 00110$ + 00005F 114 00105$: + 115 ; ../wcstombs.c: 47: n -= b; + 00005F 1F 0D [ 2] 116 ldw (0x0d, sp), x + 000061 16 17 [ 2] 117 ldw y, (0x17, sp) + 000063 72 F2 0D [ 2] 118 subw y, (0x0d, sp) + 000066 17 17 [ 2] 119 ldw (0x17, sp), y + 120 ; ../wcstombs.c: 48: m += b; + 000068 16 09 [ 2] 121 ldw y, (0x09, sp) + 00006A 72 F9 0D [ 2] 122 addw y, (0x0d, sp) + 00006D 17 09 [ 2] 123 ldw (0x09, sp), y + 124 ; ../wcstombs.c: 49: s += b; + 00006F 72 FB 13 [ 2] 125 addw x, (0x13, sp) + 000072 1F 13 [ 2] 126 ldw (0x13, sp), x + 127 ; ../wcstombs.c: 50: pwcs++; + 000074 1E 0F [ 2] 128 ldw x, (0x0f, sp) + 000076 1C 00 04 [ 2] 129 addw x, #0x0004 + 000079 1F 0F [ 2] 130 ldw (0x0f, sp), x + 00007B 20 92 [ 2] 131 jra 00107$ + 00007D 132 00109$: + 133 ; ../wcstombs.c: 53: return(m); + 00007D 1E 09 [ 2] 134 ldw x, (0x09, sp) + 00007F 135 00110$: + 136 ; ../wcstombs.c: 54: } + 00007F 5B 10 [ 2] 137 addw sp, #16 + 000081 81 [ 4] 138 ret + 139 .area CODE + 140 .area CONST + 141 .area INITIALIZER + 142 .area CABS (ABS) diff --git a/device/lib/stm8/wcstombs.rel b/device/lib/stm8/wcstombs.rel new file mode 100644 index 0000000..7780144 --- /dev/null +++ b/device/lib/stm8/wcstombs.rel @@ -0,0 +1,62 @@ +XH3 +H B areas 3 global symbols +M wcstombs +O -mstm8 +S .__.ABS. Def000000 +S _wctomb Ref000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 82 flags 0 addr 0 +S _wcstombs Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 10 5F 1F 09 96 1C 00 05 1F 0B 16 15 +R 00 00 00 09 +T 00 00 0D 17 0F +R 00 00 00 09 +T 00 00 0F +R 00 00 00 09 +T 00 00 0F 1E 17 A3 00 04 22 24 1E 0F 90 93 90 EE +R 00 00 00 09 +T 00 00 1C 02 17 03 FE 1F 01 1E 0B 16 03 90 89 16 +R 00 00 00 09 +T 00 00 29 03 90 89 89 CD 00 00 5B 06 1F 0D 1E 17 +R 00 00 00 09 02 08 00 01 +T 00 00 36 13 0D 25 43 +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 1E 0F 90 93 90 EE 02 FE 90 89 89 1E 17 +R 00 00 00 09 +T 00 00 47 89 CD 00 00 5B 06 A3 00 01 26 06 16 13 +R 00 00 00 09 02 05 00 01 +T 00 00 54 90 F6 27 25 +R 00 00 00 09 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 5D 2A 04 5F 5A 20 20 +R 00 00 00 09 +T 00 00 5F +R 00 00 00 09 +T 00 00 5F 1F 0D 16 17 72 F2 0D 17 17 16 09 72 F9 +R 00 00 00 09 +T 00 00 6C 0D 17 09 72 FB 13 1F 13 1E 0F 1C 00 04 +R 00 00 00 09 +T 00 00 79 1F 0F 20 92 +R 00 00 00 09 +T 00 00 7D +R 00 00 00 09 +T 00 00 7D 1E 09 +R 00 00 00 09 +T 00 00 7F +R 00 00 00 09 +T 00 00 7F 5B 10 81 +R 00 00 00 09 diff --git a/device/lib/stm8/wcstombs.sym b/device/lib/stm8/wcstombs.sym new file mode 100644 index 0000000..e2ddbf3 --- /dev/null +++ b/device/lib/stm8/wcstombs.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _wcstombs 000000 GR + _wctomb ****** GX + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 82 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/wctob.asm b/device/lib/stm8/wctob.asm new file mode 100644 index 0000000..c9b3b61 --- /dev/null +++ b/device/lib/stm8/wctob.asm @@ -0,0 +1,81 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module wctob + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _wctob +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../wctob.c: 35: int wctob(wint_t c) +; ----------------------------------------- +; function wctob +; ----------------------------------------- +_wctob: + sub sp, #4 +; ../wctob.c: 37: if(c & 0xffffff80) + ld a, (0x0a, sp) + and a, #0x80 + ld (0x04, sp), a + ldw x, (0x07, sp) + ld a, (0x09, sp) + ld (0x03, sp), a + ldw y, (0x03, sp) + jrne 00110$ + tnzw x + jreq 00102$ +00110$: +; ../wctob.c: 38: return WEOF; + clrw x + decw x +; ../wctob.c: 39: return c; + .byte 0xc5 +00102$: + ldw x, (0x09, sp) +00103$: +; ../wctob.c: 40: } + addw sp, #4 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/wctob.lst b/device/lib/stm8/wctob.lst new file mode 100644 index 0000000..6cfa6cd --- /dev/null +++ b/device/lib/stm8/wctob.lst @@ -0,0 +1,81 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module wctob + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _wctob + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../wctob.c: 35: int wctob(wint_t c) + 50 ; ----------------------------------------- + 51 ; function wctob + 52 ; ----------------------------------------- + 000000 53 _wctob: + 000000 52 04 [ 2] 54 sub sp, #4 + 55 ; ../wctob.c: 37: if(c & 0xffffff80) + 000002 7B 0A [ 1] 56 ld a, (0x0a, sp) + 000004 A4 80 [ 1] 57 and a, #0x80 + 000006 6B 04 [ 1] 58 ld (0x04, sp), a + 000008 1E 07 [ 2] 59 ldw x, (0x07, sp) + 00000A 7B 09 [ 1] 60 ld a, (0x09, sp) + 00000C 6B 03 [ 1] 61 ld (0x03, sp), a + 00000E 16 03 [ 2] 62 ldw y, (0x03, sp) + 000010 26 03 [ 1] 63 jrne 00110$ + 000012 5D [ 2] 64 tnzw x + 000013 27 03 [ 1] 65 jreq 00102$ + 000015 66 00110$: + 67 ; ../wctob.c: 38: return WEOF; + 000015 5F [ 1] 68 clrw x + 000016 5A [ 2] 69 decw x + 70 ; ../wctob.c: 39: return c; + 000017 C5 71 .byte 0xc5 + 000018 72 00102$: + 000018 1E 09 [ 2] 73 ldw x, (0x09, sp) + 00001A 74 00103$: + 75 ; ../wctob.c: 40: } + 00001A 5B 04 [ 2] 76 addw sp, #4 + 00001C 81 [ 4] 77 ret + 78 .area CODE + 79 .area CONST + 80 .area INITIALIZER + 81 .area CABS (ABS) diff --git a/device/lib/stm8/wctob.rel b/device/lib/stm8/wctob.rel new file mode 100644 index 0000000..4887c90 --- /dev/null +++ b/device/lib/stm8/wctob.rel @@ -0,0 +1,35 @@ +XH3 +H B areas 2 global symbols +M wctob +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 1D flags 0 addr 0 +S _wctob Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 04 7B 0A A4 80 6B 04 1E 07 7B 09 6B +R 00 00 00 09 +T 00 00 0D 03 16 03 26 03 5D 27 03 +R 00 00 00 09 +T 00 00 15 +R 00 00 00 09 +T 00 00 15 5F 5A C5 +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 1E 09 +R 00 00 00 09 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 5B 04 81 +R 00 00 00 09 diff --git a/device/lib/stm8/wctob.sym b/device/lib/stm8/wctob.sym new file mode 100644 index 0000000..13c8a43 --- /dev/null +++ b/device/lib/stm8/wctob.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _wctob 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 1D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8/wctomb.asm b/device/lib/stm8/wctomb.asm new file mode 100644 index 0000000..0a62bc1 --- /dev/null +++ b/device/lib/stm8/wctomb.asm @@ -0,0 +1,235 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module wctomb + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _wctomb +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area DATA +;-------------------------------------------------------- +; ram data +;-------------------------------------------------------- + .area INITIALIZED +;-------------------------------------------------------- +; absolute external ram data +;-------------------------------------------------------- + .area DABS (ABS) + +; default segment ordering for linker + .area HOME + .area GSINIT + .area GSFINAL + .area CONST + .area INITIALIZER + .area CODE + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- + .area HOME + .area GSINIT + .area GSFINAL + .area GSINIT +;-------------------------------------------------------- +; Home +;-------------------------------------------------------- + .area HOME + .area HOME +;-------------------------------------------------------- +; code +;-------------------------------------------------------- + .area CODE +; ../wctomb.c: 31: int wctomb(char *s, wchar_t wc) +; ----------------------------------------- +; function wctomb +; ----------------------------------------- +_wctomb: + sub sp, #12 +; ../wctomb.c: 33: if(!s) +; ../wctomb.c: 34: return(0); + ldw x, (0x0f, sp) + jrne 00102$ + jp 00119$ +00102$: +; ../wctomb.c: 38: s[0] = wc; + ldw y, (0x0f, sp) + ldw (0x01, sp), y + ld a, (0x14, sp) +; ../wctomb.c: 36: if(wc < 0x80) + ldw x, (0x13, sp) + cpw x, #0x0080 + push a + ld a, (0x13, sp) + sbc a, #0x00 + ld a, (0x12, sp) + sbc a, #0x00 + pop a + jrnc 00117$ +; ../wctomb.c: 38: s[0] = wc; + ldw x, (0x01, sp) + ld (x), a +; ../wctomb.c: 39: return(1); + clrw x + incw x + jp 00119$ +00117$: +; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + ldw x, (0x13, sp) + push a + ld a, #0x40 + div x, a + pop a +; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + ldw y, (0x01, sp) + incw y + ldw (0x03, sp), y + and a, #0x3f +; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + exg a, xl + ld (0x08, sp), a + exg a, xl +; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + or a, #0x80 + ld (0x05, sp), a +; ../wctomb.c: 41: else if(wc < 0x800) + ldw x, (0x13, sp) + cpw x, #0x0800 + ld a, (0x12, sp) + sbc a, #0x00 + ld a, (0x11, sp) + sbc a, #0x00 + jrnc 00114$ +; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + ld a, (0x08, sp) + and a, #0x1f + or a, #0xc0 + ldw x, (0x01, sp) + ld (x), a +; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + ldw x, (0x03, sp) + ld a, (0x05, sp) + ld (x), a +; ../wctomb.c: 45: return(2); + ldw x, #0x0002 + jp 00119$ +00114$: +; ../wctomb.c: 47: else if(wc >= 0xd800 && wc < 0xe000) // Unpaired surrogate + ldw x, (0x13, sp) + cpw x, #0xd800 + ld a, (0x12, sp) + sbc a, #0x00 + ld a, (0x11, sp) + sbc a, #0x00 + jrc 00110$ + ldw x, (0x13, sp) + cpw x, #0xe000 + ld a, (0x12, sp) + sbc a, #0x00 + ld a, (0x11, sp) + sbc a, #0x00 + jrnc 00110$ +; ../wctomb.c: 48: return(-1); + clrw x + decw x + jra 00119$ +00110$: +; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + ldw y, (0x11, sp) + ldw (0x09, sp), y + ldw x, (0x13, sp) + ld a, #0x0c +00161$: + srl (0x09, sp) + rrc (0x0a, sp) + rrcw x + dec a + jrne 00161$ + ldw (0x0b, sp), x +; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80; + ldw x, (0x01, sp) + incw x + incw x + ldw (0x06, sp), x +; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + ld a, (0x0c, sp) + ld yl, a +; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80; + ld a, (0x08, sp) + and a, #0x3f + or a, #0x80 + ld (0x08, sp), a +; ../wctomb.c: 49: else if(wc < 0x10000) + ldw x, (0x11, sp) + cpw x, #0x0001 + jrnc 00107$ +; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + ld a, yl + and a, #0x0f + or a, #0xe0 + ldw x, (0x01, sp) + ld (x), a +; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80; + ldw x, (0x03, sp) + ld a, (0x08, sp) + ld (x), a +; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80; + ldw x, (0x06, sp) + ld a, (0x05, sp) + ld (x), a +; ../wctomb.c: 54: return(3); + ldw x, #0x0003 + jra 00119$ +00107$: +; ../wctomb.c: 56: else if(wc < 0x110000) +; ../wctomb.c: 58: s[0] = (wc >> 18) & 0x07 | 0xf0; + ldw x, (0x11, sp) + cpw x, #0x0011 + jrnc 00104$ + ldw (0x0b, sp), x + clr (0x0a, sp) + clr (0x09, sp) + srl (0x0b, sp) + rrc (0x0c, sp) + srl (0x0b, sp) + rrc (0x0c, sp) + ld a, (0x0c, sp) + and a, #0x07 + or a, #0xf0 + ldw x, (0x01, sp) + ld (x), a +; ../wctomb.c: 59: s[1] = (wc >> 12) & 0x3f | 0x80; + ld a, yl + and a, #0x3f + or a, #0x80 + ldw x, (0x03, sp) + ld (x), a +; ../wctomb.c: 60: s[2] = (wc >> 6) & 0x3f | 0x80; + ldw x, (0x06, sp) + ld a, (0x08, sp) + ld (x), a +; ../wctomb.c: 61: s[3] = (wc >> 0) & 0x3f | 0x80; + ldw x, (0x01, sp) + ld a, (0x05, sp) + ld (0x0003, x), a +; ../wctomb.c: 62: return(4); + ldw x, #0x0004 + jra 00119$ +00104$: +; ../wctomb.c: 65: return(-1); + clrw x + decw x +00119$: +; ../wctomb.c: 66: } + addw sp, #12 + ret + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8/wctomb.lst b/device/lib/stm8/wctomb.lst new file mode 100644 index 0000000..19c4285 --- /dev/null +++ b/device/lib/stm8/wctomb.lst @@ -0,0 +1,235 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module wctomb + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _wctomb + 12 ;-------------------------------------------------------- + 13 ; ram data + 14 ;-------------------------------------------------------- + 15 .area DATA + 16 ;-------------------------------------------------------- + 17 ; ram data + 18 ;-------------------------------------------------------- + 19 .area INITIALIZED + 20 ;-------------------------------------------------------- + 21 ; absolute external ram data + 22 ;-------------------------------------------------------- + 23 .area DABS (ABS) + 24 + 25 ; default segment ordering for linker + 26 .area HOME + 27 .area GSINIT + 28 .area GSFINAL + 29 .area CONST + 30 .area INITIALIZER + 31 .area CODE + 32 + 33 ;-------------------------------------------------------- + 34 ; global & static initialisations + 35 ;-------------------------------------------------------- + 36 .area HOME + 37 .area GSINIT + 38 .area GSFINAL + 39 .area GSINIT + 40 ;-------------------------------------------------------- + 41 ; Home + 42 ;-------------------------------------------------------- + 43 .area HOME + 44 .area HOME + 45 ;-------------------------------------------------------- + 46 ; code + 47 ;-------------------------------------------------------- + 48 .area CODE + 49 ; ../wctomb.c: 31: int wctomb(char *s, wchar_t wc) + 50 ; ----------------------------------------- + 51 ; function wctomb + 52 ; ----------------------------------------- + 000000 53 _wctomb: + 000000 52 0C [ 2] 54 sub sp, #12 + 55 ; ../wctomb.c: 33: if(!s) + 56 ; ../wctomb.c: 34: return(0); + 000002 1E 0F [ 2] 57 ldw x, (0x0f, sp) + 000004 26 03 [ 1] 58 jrne 00102$ + 000006 CCr01r00 [ 2] 59 jp 00119$ + 000009 60 00102$: + 61 ; ../wctomb.c: 38: s[0] = wc; + 000009 16 0F [ 2] 62 ldw y, (0x0f, sp) + 00000B 17 01 [ 2] 63 ldw (0x01, sp), y + 00000D 7B 14 [ 1] 64 ld a, (0x14, sp) + 65 ; ../wctomb.c: 36: if(wc < 0x80) + 00000F 1E 13 [ 2] 66 ldw x, (0x13, sp) + 000011 A3 00 80 [ 2] 67 cpw x, #0x0080 + 000014 88 [ 1] 68 push a + 000015 7B 13 [ 1] 69 ld a, (0x13, sp) + 000017 A2 00 [ 1] 70 sbc a, #0x00 + 000019 7B 12 [ 1] 71 ld a, (0x12, sp) + 00001B A2 00 [ 1] 72 sbc a, #0x00 + 00001D 84 [ 1] 73 pop a + 00001E 24 08 [ 1] 74 jrnc 00117$ + 75 ; ../wctomb.c: 38: s[0] = wc; + 000020 1E 01 [ 2] 76 ldw x, (0x01, sp) + 000022 F7 [ 1] 77 ld (x), a + 78 ; ../wctomb.c: 39: return(1); + 000023 5F [ 1] 79 clrw x + 000024 5C [ 1] 80 incw x + 000025 CCr01r00 [ 2] 81 jp 00119$ + 000028 82 00117$: + 83 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + 000028 1E 13 [ 2] 84 ldw x, (0x13, sp) + 00002A 88 [ 1] 85 push a + 00002B A6 40 [ 1] 86 ld a, #0x40 + 00002D 62 [ 2] 87 div x, a + 00002E 84 [ 1] 88 pop a + 89 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + 00002F 16 01 [ 2] 90 ldw y, (0x01, sp) + 000031 90 5C [ 1] 91 incw y + 000033 17 03 [ 2] 92 ldw (0x03, sp), y + 000035 A4 3F [ 1] 93 and a, #0x3f + 94 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + 000037 41 [ 1] 95 exg a, xl + 000038 6B 08 [ 1] 96 ld (0x08, sp), a + 00003A 41 [ 1] 97 exg a, xl + 98 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + 00003B AA 80 [ 1] 99 or a, #0x80 + 00003D 6B 05 [ 1] 100 ld (0x05, sp), a + 101 ; ../wctomb.c: 41: else if(wc < 0x800) + 00003F 1E 13 [ 2] 102 ldw x, (0x13, sp) + 000041 A3 08 00 [ 2] 103 cpw x, #0x0800 + 000044 7B 12 [ 1] 104 ld a, (0x12, sp) + 000046 A2 00 [ 1] 105 sbc a, #0x00 + 000048 7B 11 [ 1] 106 ld a, (0x11, sp) + 00004A A2 00 [ 1] 107 sbc a, #0x00 + 00004C 24 14 [ 1] 108 jrnc 00114$ + 109 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + 00004E 7B 08 [ 1] 110 ld a, (0x08, sp) + 000050 A4 1F [ 1] 111 and a, #0x1f + 000052 AA C0 [ 1] 112 or a, #0xc0 + 000054 1E 01 [ 2] 113 ldw x, (0x01, sp) + 000056 F7 [ 1] 114 ld (x), a + 115 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + 000057 1E 03 [ 2] 116 ldw x, (0x03, sp) + 000059 7B 05 [ 1] 117 ld a, (0x05, sp) + 00005B F7 [ 1] 118 ld (x), a + 119 ; ../wctomb.c: 45: return(2); + 00005C AE 00 02 [ 2] 120 ldw x, #0x0002 + 00005F CCr01r00 [ 2] 121 jp 00119$ + 000062 122 00114$: + 123 ; ../wctomb.c: 47: else if(wc >= 0xd800 && wc < 0xe000) // Unpaired surrogate + 000062 1E 13 [ 2] 124 ldw x, (0x13, sp) + 000064 A3 D8 00 [ 2] 125 cpw x, #0xd800 + 000067 7B 12 [ 1] 126 ld a, (0x12, sp) + 000069 A2 00 [ 1] 127 sbc a, #0x00 + 00006B 7B 11 [ 1] 128 ld a, (0x11, sp) + 00006D A2 00 [ 1] 129 sbc a, #0x00 + 00006F 25 13 [ 1] 130 jrc 00110$ + 000071 1E 13 [ 2] 131 ldw x, (0x13, sp) + 000073 A3 E0 00 [ 2] 132 cpw x, #0xe000 + 000076 7B 12 [ 1] 133 ld a, (0x12, sp) + 000078 A2 00 [ 1] 134 sbc a, #0x00 + 00007A 7B 11 [ 1] 135 ld a, (0x11, sp) + 00007C A2 00 [ 1] 136 sbc a, #0x00 + 00007E 24 04 [ 1] 137 jrnc 00110$ + 138 ; ../wctomb.c: 48: return(-1); + 000080 5F [ 1] 139 clrw x + 000081 5A [ 2] 140 decw x + 000082 20 7C [ 2] 141 jra 00119$ + 000084 142 00110$: + 143 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + 000084 16 11 [ 2] 144 ldw y, (0x11, sp) + 000086 17 09 [ 2] 145 ldw (0x09, sp), y + 000088 1E 13 [ 2] 146 ldw x, (0x13, sp) + 00008A A6 0C [ 1] 147 ld a, #0x0c + 00008C 148 00161$: + 00008C 04 09 [ 1] 149 srl (0x09, sp) + 00008E 06 0A [ 1] 150 rrc (0x0a, sp) + 000090 56 [ 2] 151 rrcw x + 000091 4A [ 1] 152 dec a + 000092 26 F8 [ 1] 153 jrne 00161$ + 000094 1F 0B [ 2] 154 ldw (0x0b, sp), x + 155 ; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80; + 000096 1E 01 [ 2] 156 ldw x, (0x01, sp) + 000098 5C [ 1] 157 incw x + 000099 5C [ 1] 158 incw x + 00009A 1F 06 [ 2] 159 ldw (0x06, sp), x + 160 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + 00009C 7B 0C [ 1] 161 ld a, (0x0c, sp) + 00009E 90 97 [ 1] 162 ld yl, a + 163 ; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80; + 0000A0 7B 08 [ 1] 164 ld a, (0x08, sp) + 0000A2 A4 3F [ 1] 165 and a, #0x3f + 0000A4 AA 80 [ 1] 166 or a, #0x80 + 0000A6 6B 08 [ 1] 167 ld (0x08, sp), a + 168 ; ../wctomb.c: 49: else if(wc < 0x10000) + 0000A8 1E 11 [ 2] 169 ldw x, (0x11, sp) + 0000AA A3 00 01 [ 2] 170 cpw x, #0x0001 + 0000AD 24 18 [ 1] 171 jrnc 00107$ + 172 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + 0000AF 90 9F [ 1] 173 ld a, yl + 0000B1 A4 0F [ 1] 174 and a, #0x0f + 0000B3 AA E0 [ 1] 175 or a, #0xe0 + 0000B5 1E 01 [ 2] 176 ldw x, (0x01, sp) + 0000B7 F7 [ 1] 177 ld (x), a + 178 ; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80; + 0000B8 1E 03 [ 2] 179 ldw x, (0x03, sp) + 0000BA 7B 08 [ 1] 180 ld a, (0x08, sp) + 0000BC F7 [ 1] 181 ld (x), a + 182 ; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80; + 0000BD 1E 06 [ 2] 183 ldw x, (0x06, sp) + 0000BF 7B 05 [ 1] 184 ld a, (0x05, sp) + 0000C1 F7 [ 1] 185 ld (x), a + 186 ; ../wctomb.c: 54: return(3); + 0000C2 AE 00 03 [ 2] 187 ldw x, #0x0003 + 0000C5 20 39 [ 2] 188 jra 00119$ + 0000C7 189 00107$: + 190 ; ../wctomb.c: 56: else if(wc < 0x110000) + 191 ; ../wctomb.c: 58: s[0] = (wc >> 18) & 0x07 | 0xf0; + 0000C7 1E 11 [ 2] 192 ldw x, (0x11, sp) + 0000C9 A3 00 11 [ 2] 193 cpw x, #0x0011 + 0000CC 24 30 [ 1] 194 jrnc 00104$ + 0000CE 1F 0B [ 2] 195 ldw (0x0b, sp), x + 0000D0 0F 0A [ 1] 196 clr (0x0a, sp) + 0000D2 0F 09 [ 1] 197 clr (0x09, sp) + 0000D4 04 0B [ 1] 198 srl (0x0b, sp) + 0000D6 06 0C [ 1] 199 rrc (0x0c, sp) + 0000D8 04 0B [ 1] 200 srl (0x0b, sp) + 0000DA 06 0C [ 1] 201 rrc (0x0c, sp) + 0000DC 7B 0C [ 1] 202 ld a, (0x0c, sp) + 0000DE A4 07 [ 1] 203 and a, #0x07 + 0000E0 AA F0 [ 1] 204 or a, #0xf0 + 0000E2 1E 01 [ 2] 205 ldw x, (0x01, sp) + 0000E4 F7 [ 1] 206 ld (x), a + 207 ; ../wctomb.c: 59: s[1] = (wc >> 12) & 0x3f | 0x80; + 0000E5 90 9F [ 1] 208 ld a, yl + 0000E7 A4 3F [ 1] 209 and a, #0x3f + 0000E9 AA 80 [ 1] 210 or a, #0x80 + 0000EB 1E 03 [ 2] 211 ldw x, (0x03, sp) + 0000ED F7 [ 1] 212 ld (x), a + 213 ; ../wctomb.c: 60: s[2] = (wc >> 6) & 0x3f | 0x80; + 0000EE 1E 06 [ 2] 214 ldw x, (0x06, sp) + 0000F0 7B 08 [ 1] 215 ld a, (0x08, sp) + 0000F2 F7 [ 1] 216 ld (x), a + 217 ; ../wctomb.c: 61: s[3] = (wc >> 0) & 0x3f | 0x80; + 0000F3 1E 01 [ 2] 218 ldw x, (0x01, sp) + 0000F5 7B 05 [ 1] 219 ld a, (0x05, sp) + 0000F7 E7 03 [ 1] 220 ld (0x0003, x), a + 221 ; ../wctomb.c: 62: return(4); + 0000F9 AE 00 04 [ 2] 222 ldw x, #0x0004 + 0000FC 20 02 [ 2] 223 jra 00119$ + 0000FE 224 00104$: + 225 ; ../wctomb.c: 65: return(-1); + 0000FE 5F [ 1] 226 clrw x + 0000FF 5A [ 2] 227 decw x + 000100 228 00119$: + 229 ; ../wctomb.c: 66: } + 000100 5B 0C [ 2] 230 addw sp, #12 + 000102 81 [ 4] 231 ret + 232 .area CODE + 233 .area CONST + 234 .area INITIALIZER + 235 .area CABS (ABS) diff --git a/device/lib/stm8/wctomb.rel b/device/lib/stm8/wctomb.rel new file mode 100644 index 0000000..ddd54a9 --- /dev/null +++ b/device/lib/stm8/wctomb.rel @@ -0,0 +1,85 @@ +XH3 +H B areas 2 global symbols +M wctomb +O -mstm8 +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A DATA size 0 flags 0 addr 0 +A INITIALIZED size 0 flags 0 addr 0 +A DABS size 0 flags 8 addr 0 +A HOME size 0 flags 0 addr 0 +A GSINIT size 0 flags 0 addr 0 +A GSFINAL size 0 flags 0 addr 0 +A CONST size 0 flags 0 addr 0 +A INITIALIZER size 0 flags 0 addr 0 +A CODE size 103 flags 0 addr 0 +S _wctomb Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0C 1E 0F 26 03 CC 01 00 +R 00 00 00 09 00 0A 00 09 +T 00 00 09 +R 00 00 00 09 +T 00 00 09 16 0F 17 01 7B 14 1E 13 A3 00 80 88 7B +R 00 00 00 09 +T 00 00 16 13 A2 00 7B 12 A2 00 84 24 08 1E 01 F7 +R 00 00 00 09 +T 00 00 23 5F 5C CC 01 00 +R 00 00 00 09 00 06 00 09 +T 00 00 28 +R 00 00 00 09 +T 00 00 28 1E 13 88 A6 40 62 84 16 01 90 5C 17 03 +R 00 00 00 09 +T 00 00 35 A4 3F 41 6B 08 41 AA 80 6B 05 1E 13 A3 +R 00 00 00 09 +T 00 00 42 08 00 7B 12 A2 00 7B 11 A2 00 24 14 7B +R 00 00 00 09 +T 00 00 4F 08 A4 1F AA C0 1E 01 F7 1E 03 7B 05 F7 +R 00 00 00 09 +T 00 00 5C AE 00 02 CC 01 00 +R 00 00 00 09 00 07 00 09 +T 00 00 62 +R 00 00 00 09 +T 00 00 62 1E 13 A3 D8 00 7B 12 A2 00 7B 11 A2 00 +R 00 00 00 09 +T 00 00 6F 25 13 1E 13 A3 E0 00 7B 12 A2 00 7B 11 +R 00 00 00 09 +T 00 00 7C A2 00 24 04 5F 5A 20 7C +R 00 00 00 09 +T 00 00 84 +R 00 00 00 09 +T 00 00 84 16 11 17 09 1E 13 A6 0C +R 00 00 00 09 +T 00 00 8C +R 00 00 00 09 +T 00 00 8C 04 09 06 0A 56 4A 26 F8 1F 0B 1E 01 5C +R 00 00 00 09 +T 00 00 99 5C 1F 06 7B 0C 90 97 7B 08 A4 3F AA 80 +R 00 00 00 09 +T 00 00 A6 6B 08 1E 11 A3 00 01 24 18 90 9F A4 0F +R 00 00 00 09 +T 00 00 B3 AA E0 1E 01 F7 1E 03 7B 08 F7 1E 06 7B +R 00 00 00 09 +T 00 00 C0 05 F7 AE 00 03 20 39 +R 00 00 00 09 +T 00 00 C7 +R 00 00 00 09 +T 00 00 C7 1E 11 A3 00 11 24 30 1F 0B 0F 0A 0F 09 +R 00 00 00 09 +T 00 00 D4 04 0B 06 0C 04 0B 06 0C 7B 0C A4 07 AA +R 00 00 00 09 +T 00 00 E1 F0 1E 01 F7 90 9F A4 3F AA 80 1E 03 F7 +R 00 00 00 09 +T 00 00 EE 1E 06 7B 08 F7 1E 01 7B 05 E7 03 AE +R 00 00 00 09 +T 00 00 FA 00 04 20 02 +R 00 00 00 09 +T 00 00 FE +R 00 00 00 09 +T 00 00 FE 5F 5A +R 00 00 00 09 +T 00 01 00 +R 00 00 00 09 +T 00 01 00 5B 0C 81 +R 00 00 00 09 diff --git a/device/lib/stm8/wctomb.sym b/device/lib/stm8/wctomb.sym new file mode 100644 index 0000000..16fcf4b --- /dev/null +++ b/device/lib/stm8/wctomb.sym @@ -0,0 +1,29 @@ +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 1. +Hexadecimal [24-Bits] + +Symbol Table + + .__.$$$. = 002710 L + .__.ABS. = 000000 G + .__.CPU. = 000000 L + .__.H$L. = 000001 L + 9 _wctomb 000000 GR + + +ASxxxx Assembler V02.00 + NoICE + SDCC mods (STMicroelectronics STM8), page 2. +Hexadecimal [24-Bits] + +Area Table + + 0 _CODE size 0 flags 0 + 1 DATA size 0 flags 0 + 2 INITIALIZED size 0 flags 0 + 3 DABS size 0 flags 8 + 4 HOME size 0 flags 0 + 5 GSINIT size 0 flags 0 + 6 GSFINAL size 0 flags 0 + 7 CONST size 0 flags 0 + 8 INITIALIZER size 0 flags 0 + 9 CODE size 103 flags 0 + A CABS size 0 flags 8 + |
