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-large | |
| 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-large')
614 files changed, 63155 insertions, 0 deletions
diff --git a/device/lib/stm8-large/Makefile b/device/lib/stm8-large/Makefile new file mode 100644 index 0000000..98a8c1a --- /dev/null +++ b/device/lib/stm8-large/Makefile @@ -0,0 +1,102 @@ +# libc/stm8-large Makefile + + +srcdir = . +top_builddir = ../../.. + +LIB_TYPE = RANLIB + +SCC = $(top_builddir)/bin/sdcc -mstm8 --model-large +SAS = $(top_builddir)/bin/sdasstm8 + +# override PORTDIR defined by super (parent) makefile +override PORTDIR = ../build/stm8-large + +include $(srcdir)/../incl.mk + +STM8_FLOAT = $(COMMON_FLOAT) + +STM8_INT = $(COMMON_INT) \ + _mulint.c \ + _divsint.c \ + _modsint.c \ + _mulschar.c \ + _divschar.c \ + _modschar.c + +STM8_LONG = $(COMMON_LONG) \ + _divulong.c \ + _mullong.c + +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 \ + _strcmp.c \ + _strcpy.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 __mulsint2slong.rel heap.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-large/Makefile.in b/device/lib/stm8-large/Makefile.in new file mode 100644 index 0000000..7699d37 --- /dev/null +++ b/device/lib/stm8-large/Makefile.in @@ -0,0 +1,102 @@ +# libc/stm8-large Makefile + +VPATH = @srcdir@ +srcdir = @srcdir@ +top_builddir = @top_builddir@ + +LIB_TYPE = @LIB_TYPE@ + +SCC = $(top_builddir)/bin/sdcc -mstm8 --model-large +SAS = $(top_builddir)/bin/sdasstm8 + +# override PORTDIR defined by super (parent) makefile +override PORTDIR = ../build/stm8-large + +include $(srcdir)/../incl.mk + +STM8_FLOAT = $(COMMON_FLOAT) + +STM8_INT = $(COMMON_INT) \ + _mulint.c \ + _divsint.c \ + _modsint.c \ + _mulschar.c \ + _divschar.c \ + _modschar.c + +STM8_LONG = $(COMMON_LONG) \ + _divulong.c \ + _mullong.c + +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 \ + _strcmp.c \ + _strcpy.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 __mulsint2slong.rel heap.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-large/__assert.asm b/device/lib/stm8-large/__assert.asm new file mode 100644 index 0000000..063e261 --- /dev/null +++ b/device/lib/stm8-large/__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, (0x08, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + callf _printf + addw sp, #10 +00103$: + jra 00103$ +; ../__assert.c: 37: } + retf + .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-large/__assert.lst b/device/lib/stm8-large/__assert.lst new file mode 100644 index 0000000..c16bbfe --- /dev/null +++ b/device/lib/stm8-large/__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 08 [ 2] 56 ldw x, (0x08, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 0C [ 2] 58 ldw x, (0x0c, sp) + 000005 89 [ 2] 59 pushw x + 000006 1E 0A [ 2] 60 ldw x, (0x0a, sp) + 000008 89 [ 2] 61 pushw x + 000009 1E 0A [ 2] 62 ldw x, (0x0a, 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 8Ds00r00r00 [ 5] 66 callf _printf + 000014 5B 0A [ 2] 67 addw sp, #10 + 000016 68 00103$: + 000016 20 FE [ 2] 69 jra 00103$ + 70 ; ../__assert.c: 37: } + 000018 87 [ 5] 71 retf + 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-large/__assert.rel b/device/lib/stm8-large/__assert.rel new file mode 100644 index 0000000..79822cc --- /dev/null +++ b/device/lib/stm8-large/__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 19 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 08 89 1E 0C 89 1E 0A 89 1E 0A 89 4B +R 00 00 00 09 +T 00 00 0D 00 00 00 4B 00 00 00 8D +R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07 +T 00 00 11 00 00 00 5B 0A +R 00 00 00 09 82 03 00 01 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 20 FE 87 +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-large/__assert.sym b/device/lib/stm8-large/__assert.sym new file mode 100644 index 0000000..87748f4 --- /dev/null +++ b/device/lib/stm8-large/__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 19 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/__mulsint2slong.lst b/device/lib/stm8-large/__mulsint2slong.lst new file mode 100644 index 0000000..b18c7bc --- /dev/null +++ b/device/lib/stm8-large/__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 06 [ 2] 36 ldw x, (6, 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 04 [ 2] 43 ldw x, (4, sp) + 000008 2A 04 [ 1] 44 jrpl left_nonneg + 00000A 43 [ 1] 45 cpl a + 00000B 50 [ 2] 46 negw x + 00000C 1F 04 [ 2] 47 ldw (4, sp), x + 00000E 48 left_nonneg: + 00000E 1E 06 [ 2] 49 ldw x, (6, sp) + 000010 2A 04 [ 1] 50 jrpl right_nonneg + 000012 43 [ 1] 51 cpl a + 000013 50 [ 2] 52 negw x + 000014 1F 06 [ 2] 53 ldw (6, 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 0A [ 1] 60 ld a, (5+5, sp) + 00001B 42 [ 4] 61 mul x, a + 00001C 1F 04 [ 2] 62 ldw (4, sp), x + 63 + 64 ; Multiply upper bytes + 00001E 1E 08 [ 2] 65 ldw x, (5+3, sp) + 000020 7B 0B [ 1] 66 ld a, (5+6, sp) + 000022 42 [ 4] 67 mul x, a + 000023 1F 02 [ 2] 68 ldw (2, sp), x + 69 + 70 ; Multiply middle bytes + 000025 7B 0B [ 1] 71 ld a, (5+6, sp) + 000027 27 0E [ 1] 72 jreq skip_m1 + 000029 1E 09 [ 2] 73 ldw x, (5+4, 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 09 [ 1] 82 ld a, (5+4, sp) + 000039 27 0E [ 1] 83 jreq skip_m2 + 00003B 1E 0B [ 2] 84 ldw x, (5+6, 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 87 [ 5] 105 retf + 106 diff --git a/device/lib/stm8-large/__mulsint2slong.rel b/device/lib/stm8-large/__mulsint2slong.rel new file mode 100644 index 0000000..36cdce5 --- /dev/null +++ b/device/lib/stm8-large/__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 06 20 11 +R 00 00 00 01 +T 00 00 05 +R 00 00 00 01 +T 00 00 05 4F 1E 04 2A 04 43 50 1F 04 +R 00 00 00 01 +T 00 00 0E +R 00 00 00 01 +T 00 00 0E 1E 06 2A 04 43 50 1F 06 +R 00 00 00 01 +T 00 00 16 +R 00 00 00 01 +T 00 00 16 52 04 88 7B 0A 42 1F 04 1E 08 7B 0B 42 +R 00 00 00 01 +T 00 00 23 1F 02 7B 0B 27 0E 1E 09 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 09 27 0E 1E 0B 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 87 +R 00 00 00 01 diff --git a/device/lib/stm8-large/__mulsint2slong.s b/device/lib/stm8-large/__mulsint2slong.s new file mode 100644 index 0000000..7ee9065 --- /dev/null +++ b/device/lib/stm8-large/__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, (6, sp) + jra right_nonneg + +___mulsint2slong: + + ; Handle signed operands + clr a + ldw x, (4, sp) + jrpl left_nonneg + cpl a + negw x + ldw (4, sp), x +left_nonneg: + ldw x, (6, sp) + jrpl right_nonneg + cpl a + negw x + ldw (6, sp), x +right_nonneg: + + sub sp, #4 + push a + + ; Multiply lower bytes + ld a, (5+5, sp) + mul x, a + ldw (4, sp), x + + ; Multiply upper bytes + ldw x, (5+3, sp) + ld a, (5+6, sp) + mul x, a + ldw (2, sp), x + + ; Multiply middle bytes + ld a, (5+6, sp) + jreq skip_m1 + ldw x, (5+4, 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+4, sp) + jreq skip_m2 + ldw x, (5+6, 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: + retf + diff --git a/device/lib/stm8-large/__mulsint2slong.sym b/device/lib/stm8-large/__mulsint2slong.sym new file mode 100644 index 0000000..b4a66ae --- /dev/null +++ b/device/lib/stm8-large/__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-large/_atof.asm b/device/lib/stm8-large/_atof.asm new file mode 100644 index 0000000..fc11219 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x15, sp) + ldw (0x10, sp), y +00101$: + ldw x, (0x10, sp) + ld a, (x) + clrw x + ld xl, a + pushw x + callf _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 (0x15, 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 (0x15, 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 (0x15, 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, (0x15, 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 + callf ___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 + callf ___sint2fs + addw sp, #2 + pushw x + pushw y + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + callf ___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 (0x15, 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 + callf ___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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + callf ___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 + callf ___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 (0x15, sp), y +00112$: +; ../_atof.c: 72: if (toupper(*s)=='E') + ldw y, (0x15, sp) + ldw (0x10, sp), y + ldw x, y + ld a, (x) + clrw x + ld xl, a + pushw x + callf _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 (0x15, sp), x + pushw x + callf _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 + callf ___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 + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_atof.lst b/device/lib/stm8-large/_atof.lst new file mode 100644 index 0000000..1168cf1 --- /dev/null +++ b/device/lib/stm8-large/_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 15 [ 2] 59 ldw y, (0x15, 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 8Ds00r00r00 [ 5] 67 callf _isspace + 000010 5B 02 [ 2] 68 addw sp, #2 + 000012 16 10 [ 2] 69 ldw y, (0x10, sp) + 000014 90 5C [ 1] 70 incw y + 000016 5D [ 2] 71 tnzw x + 000017 27 04 [ 1] 72 jreq 00155$ + 000019 17 10 [ 2] 73 ldw (0x10, sp), y + 00001B 20 E9 [ 2] 74 jra 00101$ + 00001D 75 00155$: + 00001D 1E 10 [ 2] 76 ldw x, (0x10, sp) + 00001F 1F 15 [ 2] 77 ldw (0x15, sp), x + 78 ; ../_atof.c: 43: if (*s == '-') + 000021 1E 10 [ 2] 79 ldw x, (0x10, sp) + 000023 F6 [ 1] 80 ld a, (x) + 000024 A1 2D [ 1] 81 cp a, #0x2d + 000026 26 08 [ 1] 82 jrne 00107$ + 83 ; ../_atof.c: 45: sign=1; + 000028 A6 01 [ 1] 84 ld a, #0x01 + 00002A 6B 05 [ 1] 85 ld (0x05, sp), a + 86 ; ../_atof.c: 46: s++; + 00002C 17 15 [ 2] 87 ldw (0x15, sp), y + 00002E 20 08 [ 2] 88 jra 00108$ + 000030 89 00107$: + 90 ; ../_atof.c: 50: sign=0; + 000030 0F 05 [ 1] 91 clr (0x05, sp) + 92 ; ../_atof.c: 51: if (*s == '+') s++; + 000032 A1 2B [ 1] 93 cp a, #0x2b + 000034 26 02 [ 1] 94 jrne 00108$ + 000036 17 15 [ 2] 95 ldw (0x15, sp), y + 000038 96 00108$: + 97 ; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++) + 000038 5F [ 1] 98 clrw x + 000039 1F 08 [ 2] 99 ldw (0x08, sp), x + 00003B 1F 06 [ 2] 100 ldw (0x06, sp), x + 00003D 16 15 [ 2] 101 ldw y, (0x15, sp) + 00003F 17 0C [ 2] 102 ldw (0x0c, sp), y + 000041 103 00126$: + 000041 1E 0C [ 2] 104 ldw x, (0x0c, sp) + 000043 F6 [ 1] 105 ld a, (x) + 000044 6B 0E [ 1] 106 ld (0x0e, sp), a + 000046 6B 0F [ 1] 107 ld (0x0f, sp), a + 000048 1E 0C [ 2] 108 ldw x, (0x0c, sp) + 00004A 5C [ 1] 109 incw x + 00004B 1F 10 [ 2] 110 ldw (0x10, sp), x + 111 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 00004D 7B 0F [ 1] 112 ld a, (0x0f, sp) + 00004F A1 30 [ 1] 113 cp a, #0x30 + 000051 25 41 [ 1] 114 jrc 00156$ + 000053 A1 39 [ 1] 115 cp a, #0x39 + 000055 22 3D [ 1] 116 jrugt 00156$ + 117 ; ../_atof.c: 57: value=10.0*value+(*s-'0'); + 000057 1E 08 [ 2] 118 ldw x, (0x08, sp) + 000059 89 [ 2] 119 pushw x + 00005A 1E 08 [ 2] 120 ldw x, (0x08, sp) + 00005C 89 [ 2] 121 pushw x + 00005D 5F [ 1] 122 clrw x + 00005E 89 [ 2] 123 pushw x + 00005F 4B 20 [ 1] 124 push #0x20 + 000061 4B 41 [ 1] 125 push #0x41 + 000063 8Ds00r00r00 [ 5] 126 callf ___fsmul + 000067 5B 08 [ 2] 127 addw sp, #8 + 000069 1F 0C [ 2] 128 ldw (0x0c, sp), x + 00006B 17 0A [ 2] 129 ldw (0x0a, sp), y + 00006D 5F [ 1] 130 clrw x + 00006E 7B 0E [ 1] 131 ld a, (0x0e, sp) + 000070 97 [ 1] 132 ld xl, a + 000071 1D 00 30 [ 2] 133 subw x, #0x0030 + 000074 89 [ 2] 134 pushw x + 000075 8Ds00r00r00 [ 5] 135 callf ___sint2fs + 000079 5B 02 [ 2] 136 addw sp, #2 + 00007B 89 [ 2] 137 pushw x + 00007C 90 89 [ 2] 138 pushw y + 00007E 1E 10 [ 2] 139 ldw x, (0x10, sp) + 000080 89 [ 2] 140 pushw x + 000081 1E 10 [ 2] 141 ldw x, (0x10, sp) + 000083 89 [ 2] 142 pushw x + 000084 8Ds00r00r00 [ 5] 143 callf ___fsadd + 000088 5B 08 [ 2] 144 addw sp, #8 + 00008A 1F 08 [ 2] 145 ldw (0x08, sp), x + 00008C 17 06 [ 2] 146 ldw (0x06, sp), y + 147 ; ../_atof.c: 55: for (value=0.0; isdigit(*s); s++) + 00008E 16 10 [ 2] 148 ldw y, (0x10, sp) + 000090 17 0C [ 2] 149 ldw (0x0c, sp), y + 000092 20 AD [ 2] 150 jra 00126$ + 000094 151 00156$: + 000094 16 0C [ 2] 152 ldw y, (0x0c, sp) + 000096 17 15 [ 2] 153 ldw (0x15, sp), y + 154 ; ../_atof.c: 61: if (*s == '.') + 000098 7B 0E [ 1] 155 ld a, (0x0e, sp) + 00009A A1 2E [ 1] 156 cp a, #0x2e + 00009C 26 72 [ 1] 157 jrne 00112$ + 158 ; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++) + 00009E AE CC CD [ 2] 159 ldw x, #0xcccd + 0000A1 1F 0C [ 2] 160 ldw (0x0c, sp), x + 0000A3 AE 3D CC [ 2] 161 ldw x, #0x3dcc + 0000A6 1F 0A [ 2] 162 ldw (0x0a, sp), x + 0000A8 163 00129$: + 0000A8 1E 10 [ 2] 164 ldw x, (0x10, sp) + 0000AA F6 [ 1] 165 ld a, (x) + 0000AB 6B 0E [ 1] 166 ld (0x0e, sp), a + 167 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 0000AD 6B 0F [ 1] 168 ld (0x0f, sp), a + 0000AF A1 30 [ 1] 169 cp a, #0x30 + 0000B1 25 59 [ 1] 170 jrc 00157$ + 0000B3 7B 0F [ 1] 171 ld a, (0x0f, sp) + 0000B5 A1 39 [ 1] 172 cp a, #0x39 + 0000B7 22 53 [ 1] 173 jrugt 00157$ + 174 ; ../_atof.c: 66: value+=(*s-'0')*fraction; + 0000B9 5F [ 1] 175 clrw x + 0000BA 7B 0E [ 1] 176 ld a, (0x0e, sp) + 0000BC 97 [ 1] 177 ld xl, a + 0000BD 1D 00 30 [ 2] 178 subw x, #0x0030 + 0000C0 89 [ 2] 179 pushw x + 0000C1 8Ds00r00r00 [ 5] 180 callf ___sint2fs + 0000C5 5B 02 [ 2] 181 addw sp, #2 + 0000C7 1F 03 [ 2] 182 ldw (0x03, sp), x + 0000C9 1E 0C [ 2] 183 ldw x, (0x0c, sp) + 0000CB 89 [ 2] 184 pushw x + 0000CC 1E 0C [ 2] 185 ldw x, (0x0c, sp) + 0000CE 89 [ 2] 186 pushw x + 0000CF 1E 07 [ 2] 187 ldw x, (0x07, sp) + 0000D1 89 [ 2] 188 pushw x + 0000D2 90 89 [ 2] 189 pushw y + 0000D4 8Ds00r00r00 [ 5] 190 callf ___fsmul + 0000D8 5B 08 [ 2] 191 addw sp, #8 + 0000DA 89 [ 2] 192 pushw x + 0000DB 90 89 [ 2] 193 pushw y + 0000DD 1E 0C [ 2] 194 ldw x, (0x0c, sp) + 0000DF 89 [ 2] 195 pushw x + 0000E0 1E 0C [ 2] 196 ldw x, (0x0c, sp) + 0000E2 89 [ 2] 197 pushw x + 0000E3 8Ds00r00r00 [ 5] 198 callf ___fsadd + 0000E7 5B 08 [ 2] 199 addw sp, #8 + 0000E9 1F 08 [ 2] 200 ldw (0x08, sp), x + 0000EB 17 06 [ 2] 201 ldw (0x06, sp), y + 202 ; ../_atof.c: 67: fraction*=0.1; + 0000ED 1E 0C [ 2] 203 ldw x, (0x0c, sp) + 0000EF 89 [ 2] 204 pushw x + 0000F0 1E 0C [ 2] 205 ldw x, (0x0c, sp) + 0000F2 89 [ 2] 206 pushw x + 0000F3 4B CD [ 1] 207 push #0xcd + 0000F5 4B CC [ 1] 208 push #0xcc + 0000F7 4B CC [ 1] 209 push #0xcc + 0000F9 4B 3D [ 1] 210 push #0x3d + 0000FB 8Ds00r00r00 [ 5] 211 callf ___fsmul + 0000FF 5B 08 [ 2] 212 addw sp, #8 + 000101 1F 0C [ 2] 213 ldw (0x0c, sp), x + 000103 17 0A [ 2] 214 ldw (0x0a, sp), y + 215 ; ../_atof.c: 64: for (fraction=0.1; isdigit(*s); s++) + 000105 1E 10 [ 2] 216 ldw x, (0x10, sp) + 000107 5C [ 1] 217 incw x + 000108 1F 10 [ 2] 218 ldw (0x10, sp), x + 00010A 20 9C [ 2] 219 jra 00129$ + 00010C 220 00157$: + 00010C 16 10 [ 2] 221 ldw y, (0x10, sp) + 00010E 17 15 [ 2] 222 ldw (0x15, sp), y + 000110 223 00112$: + 224 ; ../_atof.c: 72: if (toupper(*s)=='E') + 000110 16 15 [ 2] 225 ldw y, (0x15, sp) + 000112 17 10 [ 2] 226 ldw (0x10, sp), y + 000114 93 [ 1] 227 ldw x, y + 000115 F6 [ 1] 228 ld a, (x) + 000116 5F [ 1] 229 clrw x + 000117 97 [ 1] 230 ld xl, a + 000118 89 [ 2] 231 pushw x + 000119 8Ds00r00r00 [ 5] 232 callf _toupper + 00011D 5B 02 [ 2] 233 addw sp, #2 + 00011F A3 00 45 [ 2] 234 cpw x, #0x0045 + 000122 26 4B [ 1] 235 jrne 00120$ + 236 ; ../_atof.c: 74: s++; + 000124 1E 10 [ 2] 237 ldw x, (0x10, sp) + 000126 5C [ 1] 238 incw x + 239 ; ../_atof.c: 75: iexp=(signed char)atoi(s); + 000127 1F 15 [ 2] 240 ldw (0x15, sp), x + 000129 89 [ 2] 241 pushw x + 00012A 8Ds00r00r00 [ 5] 242 callf _atoi + 00012E 5B 02 [ 2] 243 addw sp, #2 + 000130 9F [ 1] 244 ld a, xl + 245 ; ../_atof.c: 77: while(iexp!=0) + 000131 246 00116$: + 000131 4D [ 1] 247 tnz a + 000132 27 3B [ 1] 248 jreq 00120$ + 249 ; ../_atof.c: 79: if(iexp<0) + 000134 4D [ 1] 250 tnz a + 000135 2A 1D [ 1] 251 jrpl 00114$ + 252 ; ../_atof.c: 81: value*=0.1; + 000137 88 [ 1] 253 push a + 000138 1E 09 [ 2] 254 ldw x, (0x09, sp) + 00013A 89 [ 2] 255 pushw x + 00013B 1E 09 [ 2] 256 ldw x, (0x09, sp) + 00013D 89 [ 2] 257 pushw x + 00013E 4B CD [ 1] 258 push #0xcd + 000140 4B CC [ 1] 259 push #0xcc + 000142 4B CC [ 1] 260 push #0xcc + 000144 4B 3D [ 1] 261 push #0x3d + 000146 8Ds00r00r00 [ 5] 262 callf ___fsmul + 00014A 5B 08 [ 2] 263 addw sp, #8 + 00014C 84 [ 1] 264 pop a + 00014D 1F 08 [ 2] 265 ldw (0x08, sp), x + 00014F 17 06 [ 2] 266 ldw (0x06, sp), y + 267 ; ../_atof.c: 82: iexp++; + 000151 4C [ 1] 268 inc a + 000152 20 DD [ 2] 269 jra 00116$ + 000154 270 00114$: + 271 ; ../_atof.c: 86: value*=10.0; + 000154 88 [ 1] 272 push a + 000155 1E 09 [ 2] 273 ldw x, (0x09, sp) + 000157 89 [ 2] 274 pushw x + 000158 1E 09 [ 2] 275 ldw x, (0x09, sp) + 00015A 89 [ 2] 276 pushw x + 00015B 5F [ 1] 277 clrw x + 00015C 89 [ 2] 278 pushw x + 00015D 4B 20 [ 1] 279 push #0x20 + 00015F 4B 41 [ 1] 280 push #0x41 + 000161 8Ds00r00r00 [ 5] 281 callf ___fsmul + 000165 5B 08 [ 2] 282 addw sp, #8 + 000167 84 [ 1] 283 pop a + 000168 1F 08 [ 2] 284 ldw (0x08, sp), x + 00016A 17 06 [ 2] 285 ldw (0x06, sp), y + 286 ; ../_atof.c: 87: iexp--; + 00016C 4A [ 1] 287 dec a + 00016D 20 C2 [ 2] 288 jra 00116$ + 00016F 289 00120$: + 290 ; ../_atof.c: 93: if(sign) value*=-1.0; + 00016F 0D 05 [ 1] 291 tnz (0x05, sp) + 000171 27 0B [ 1] 292 jreq 00122$ + 000173 16 08 [ 2] 293 ldw y, (0x08, sp) + 000175 1E 06 [ 2] 294 ldw x, (0x06, sp) + 000177 58 [ 2] 295 sllw x + 000178 8C [ 1] 296 ccf + 000179 56 [ 2] 297 rrcw x + 00017A 17 08 [ 2] 298 ldw (0x08, sp), y + 00017C 1F 06 [ 2] 299 ldw (0x06, sp), x + 00017E 300 00122$: + 301 ; ../_atof.c: 94: return (value); + 00017E 1E 08 [ 2] 302 ldw x, (0x08, sp) + 000180 16 06 [ 2] 303 ldw y, (0x06, sp) + 304 ; ../_atof.c: 95: } + 000182 5B 11 [ 2] 305 addw sp, #17 + 000184 87 [ 5] 306 retf + 307 .area CODE + 308 .area CONST + 309 .area INITIALIZER + 310 .area CABS (ABS) diff --git a/device/lib/stm8-large/_atof.rel b/device/lib/stm8-large/_atof.rel new file mode 100644 index 0000000..7648469 --- /dev/null +++ b/device/lib/stm8-large/_atof.rel @@ -0,0 +1,127 @@ +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 185 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 15 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 8D 00 00 00 5B 02 16 +R 00 00 00 09 82 0A 00 01 +T 00 00 13 10 90 5C 5D 27 04 17 10 20 E9 +R 00 00 00 09 +T 00 00 1D +R 00 00 00 09 +T 00 00 1D 1E 10 1F 15 1E 10 F6 A1 2D 26 08 A6 01 +R 00 00 00 09 +T 00 00 2A 6B 05 17 15 20 08 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 0F 05 A1 2B 26 02 17 15 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 5F 1F 08 1F 06 16 15 17 0C +R 00 00 00 09 +T 00 00 41 +R 00 00 00 09 +T 00 00 41 1E 0C F6 6B 0E 6B 0F 1E 0C 5C 1F 10 7B +R 00 00 00 09 +T 00 00 4E 0F A1 30 25 41 A1 39 22 3D 1E 08 89 1E +R 00 00 00 09 +T 00 00 5B 08 89 5F 89 4B 20 4B 41 8D +R 00 00 00 09 +T 00 00 64 00 00 00 5B 08 1F 0C 17 0A 5F 7B 0E 97 +R 00 00 00 09 82 03 00 00 +T 00 00 71 1D 00 30 89 8D 00 00 00 5B 02 89 90 89 +R 00 00 00 09 82 08 00 05 +T 00 00 7E 1E 10 89 1E 10 89 8D 00 00 00 5B 08 1F +R 00 00 00 09 82 0A 00 04 +T 00 00 8B 08 17 06 16 10 17 0C 20 AD +R 00 00 00 09 +T 00 00 94 +R 00 00 00 09 +T 00 00 94 16 0C 17 15 7B 0E A1 2E 26 72 AE CC CD +R 00 00 00 09 +T 00 00 A1 1F 0C AE 3D CC 1F 0A +R 00 00 00 09 +T 00 00 A8 +R 00 00 00 09 +T 00 00 A8 1E 10 F6 6B 0E 6B 0F A1 30 25 59 7B 0F +R 00 00 00 09 +T 00 00 B5 A1 39 22 53 5F 7B 0E 97 1D 00 30 89 8D +R 00 00 00 09 +T 00 00 C2 00 00 00 5B 02 1F 03 1E 0C 89 1E 0C 89 +R 00 00 00 09 82 03 00 05 +T 00 00 CF 1E 07 89 90 89 8D 00 00 00 5B 08 89 90 +R 00 00 00 09 82 09 00 00 +T 00 00 DC 89 1E 0C 89 1E 0C 89 8D +R 00 00 00 09 +T 00 00 E4 00 00 00 5B 08 1F 08 17 06 1E 0C 89 1E +R 00 00 00 09 82 03 00 04 +T 00 00 F1 0C 89 4B CD 4B CC 4B CC 4B 3D 8D +R 00 00 00 09 +T 00 00 FC 00 00 00 5B 08 1F 0C 17 0A 1E 10 5C 1F +R 00 00 00 09 82 03 00 00 +T 00 01 09 10 20 9C +R 00 00 00 09 +T 00 01 0C +R 00 00 00 09 +T 00 01 0C 16 10 17 15 +R 00 00 00 09 +T 00 01 10 +R 00 00 00 09 +T 00 01 10 16 15 17 10 93 F6 5F 97 89 8D +R 00 00 00 09 +T 00 01 1A 00 00 00 5B 02 A3 00 45 26 4B 1E 10 5C +R 00 00 00 09 82 03 00 06 +T 00 01 27 1F 15 89 8D 00 00 00 5B 02 9F +R 00 00 00 09 82 07 00 02 +T 00 01 31 +R 00 00 00 09 +T 00 01 31 4D 27 3B 4D 2A 1D 88 1E 09 89 1E 09 89 +R 00 00 00 09 +T 00 01 3E 4B CD 4B CC 4B CC 4B 3D 8D +R 00 00 00 09 +T 00 01 47 00 00 00 5B 08 84 1F 08 17 06 4C 20 DD +R 00 00 00 09 82 03 00 00 +T 00 01 54 +R 00 00 00 09 +T 00 01 54 88 1E 09 89 1E 09 89 5F 89 4B 20 4B 41 +R 00 00 00 09 +T 00 01 61 8D 00 00 00 5B 08 84 1F 08 17 06 4A 20 +R 00 00 00 09 82 04 00 00 +T 00 01 6E C2 +R 00 00 00 09 +T 00 01 6F +R 00 00 00 09 +T 00 01 6F 0D 05 27 0B 16 08 1E 06 58 8C 56 17 08 +R 00 00 00 09 +T 00 01 7C 1F 06 +R 00 00 00 09 +T 00 01 7E +R 00 00 00 09 +T 00 01 7E 1E 08 16 06 5B 11 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_atof.sym b/device/lib/stm8-large/_atof.sym new file mode 100644 index 0000000..66f34fd --- /dev/null +++ b/device/lib/stm8-large/_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 185 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_divschar.asm b/device/lib/stm8-large/_divschar.asm new file mode 100644 index 0000000..b3e877d --- /dev/null +++ b/device/lib/stm8-large/_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, (0x04, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x05, sp) + ld yl, a + rlc a + clr a + sbc a, #0x00 + ld yh, a + pushw y + pushw x + callf __divsint + addw sp, #4 +; ../_divschar.c: 34: } + retf +; ../_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, (0x06, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x07, sp) + ld (0x02, sp), a + clr (0x01, sp) + ldw y, (0x01, sp) + pushw y + pushw x + callf __divsint +; ../_divschar.c: 40: } + addw sp, #6 + retf +; ../_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, (0x04, sp) + clrw y + ld yl, a + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + pushw x + pushw y + callf __divsint + addw sp, #4 +; ../_divschar.c: 46: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_divschar.lst b/device/lib/stm8-large/_divschar.lst new file mode 100644 index 0000000..ac12991 --- /dev/null +++ b/device/lib/stm8-large/_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 04 [ 1] 57 ld a, (0x04, 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 05 [ 1] 63 ld a, (0x05, 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 8Ds00r00r00 [ 5] 71 callf __divsint + 000019 5B 04 [ 2] 72 addw sp, #4 + 73 ; ../_divschar.c: 34: } + 00001B 87 [ 5] 74 retf + 75 ; ../_divschar.c: 37: _divuschar (unsigned char x, unsigned char y) + 76 ; ----------------------------------------- + 77 ; function _divuschar + 78 ; ----------------------------------------- + 00001C 79 __divuschar: + 00001C 52 02 [ 2] 80 sub sp, #2 + 81 ; ../_divschar.c: 39: return ((int)((signed char)x) / (int)y); + 00001E 7B 06 [ 1] 82 ld a, (0x06, sp) + 000020 97 [ 1] 83 ld xl, a + 000021 49 [ 1] 84 rlc a + 000022 4F [ 1] 85 clr a + 000023 A2 00 [ 1] 86 sbc a, #0x00 + 000025 95 [ 1] 87 ld xh, a + 000026 7B 07 [ 1] 88 ld a, (0x07, sp) + 000028 6B 02 [ 1] 89 ld (0x02, sp), a + 00002A 0F 01 [ 1] 90 clr (0x01, sp) + 00002C 16 01 [ 2] 91 ldw y, (0x01, sp) + 00002E 90 89 [ 2] 92 pushw y + 000030 89 [ 2] 93 pushw x + 000031 8Ds00r00r00 [ 5] 94 callf __divsint + 95 ; ../_divschar.c: 40: } + 000035 5B 06 [ 2] 96 addw sp, #6 + 000037 87 [ 5] 97 retf + 98 ; ../_divschar.c: 43: _divsuchar (signed char x, signed char y) + 99 ; ----------------------------------------- + 100 ; function _divsuchar + 101 ; ----------------------------------------- + 000038 102 __divsuchar: + 103 ; ../_divschar.c: 45: return ((int)((unsigned char)x) / (int)y); + 000038 7B 04 [ 1] 104 ld a, (0x04, sp) + 00003A 90 5F [ 1] 105 clrw y + 00003C 90 97 [ 1] 106 ld yl, a + 00003E 7B 05 [ 1] 107 ld a, (0x05, sp) + 000040 97 [ 1] 108 ld xl, a + 000041 49 [ 1] 109 rlc a + 000042 4F [ 1] 110 clr a + 000043 A2 00 [ 1] 111 sbc a, #0x00 + 000045 95 [ 1] 112 ld xh, a + 000046 89 [ 2] 113 pushw x + 000047 90 89 [ 2] 114 pushw y + 000049 8Ds00r00r00 [ 5] 115 callf __divsint + 00004D 5B 04 [ 2] 116 addw sp, #4 + 117 ; ../_divschar.c: 46: } + 00004F 87 [ 5] 118 retf + 119 .area CODE + 120 .area CONST + 121 .area INITIALIZER + 122 .area CABS (ABS) diff --git a/device/lib/stm8-large/_divschar.rel b/device/lib/stm8-large/_divschar.rel new file mode 100644 index 0000000..f0658c3 --- /dev/null +++ b/device/lib/stm8-large/_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 50 flags 0 addr 0 +S __divsuchar Def000038 +S __divuschar Def00001C +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 04 97 49 4F A2 00 95 7B 05 90 97 49 +R 00 00 00 09 +T 00 00 0D 4F A2 00 90 95 90 89 89 8D +R 00 00 00 09 +T 00 00 16 00 00 00 5B 04 87 +R 00 00 00 09 82 03 00 01 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 52 02 7B 06 97 49 4F A2 00 95 7B 07 6B +R 00 00 00 09 +T 00 00 29 02 0F 01 16 01 90 89 89 8D +R 00 00 00 09 +T 00 00 32 00 00 00 5B 06 87 +R 00 00 00 09 82 03 00 01 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 7B 04 90 5F 90 97 7B 05 97 49 4F A2 00 +R 00 00 00 09 +T 00 00 45 95 89 90 89 8D 00 00 00 5B 04 87 +R 00 00 00 09 82 08 00 01 diff --git a/device/lib/stm8-large/_divschar.sym b/device/lib/stm8-large/_divschar.sym new file mode 100644 index 0000000..4e9489b --- /dev/null +++ b/device/lib/stm8-large/_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 000038 GR + 9 __divuschar 00001C 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 50 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_divsint.asm b/device/lib/stm8-large/_divsint.asm new file mode 100644 index 0000000..7794c1d --- /dev/null +++ b/device/lib/stm8-large/_divsint.asm @@ -0,0 +1,111 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _divsint + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __divsint +;-------------------------------------------------------- +; 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 +; ../_divsint.c: 207: _divsint (int x, int y) +; ----------------------------------------- +; function _divsint +; ----------------------------------------- +__divsint: + sub sp, #6 +; ../_divsint.c: 211: r = (unsigned int)(x < 0 ? -x : x) / (unsigned int)(y < 0 ? -y : y); + tnz (0x0a, sp) + jrmi 00125$ + clr (0x01, sp) + jra 00126$ +00125$: + ld a, #0x01 + ld (0x01, sp), a +00126$: + tnz (0x01, sp) + jreq 00106$ + ldw x, (0x0a, sp) + negw x + .byte 0xc5 +00106$: + ldw x, (0x0a, sp) +00107$: + ldw (0x02, sp), x + tnz (0x0c, sp) + jrmi 00128$ + clr (0x04, sp) + jra 00129$ +00128$: + ld a, #0x01 + ld (0x04, sp), a +00129$: + tnz (0x04, sp) + jreq 00108$ + ld a, (0x0d, sp) + neg a + ld (0x06, sp), a + clr a + sbc a, (0x0c, sp) + ld (0x05, sp), a + jra 00109$ +00108$: + ldw y, (0x0c, sp) + ldw (0x05, sp), y +00109$: + ldw y, (0x05, sp) + ldw x, (0x02, sp) + divw x, y +; ../_divsint.c: 212: if ((x < 0) ^ (y < 0)) + ld a, (0x01, sp) + xor a, (0x04, sp) + jreq 00102$ +; ../_divsint.c: 213: return -r; + negw x +; ../_divsint.c: 215: return r; +00102$: +; ../_divsint.c: 216: } + addw sp, #6 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_divsint.lst b/device/lib/stm8-large/_divsint.lst new file mode 100644 index 0000000..617a233 --- /dev/null +++ b/device/lib/stm8-large/_divsint.lst @@ -0,0 +1,111 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _divsint + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __divsint + 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 ; ../_divsint.c: 207: _divsint (int x, int y) + 50 ; ----------------------------------------- + 51 ; function _divsint + 52 ; ----------------------------------------- + 000000 53 __divsint: + 000000 52 06 [ 2] 54 sub sp, #6 + 55 ; ../_divsint.c: 211: r = (unsigned int)(x < 0 ? -x : x) / (unsigned int)(y < 0 ? -y : y); + 000002 0D 0A [ 1] 56 tnz (0x0a, sp) + 000004 2B 04 [ 1] 57 jrmi 00125$ + 000006 0F 01 [ 1] 58 clr (0x01, sp) + 000008 20 04 [ 2] 59 jra 00126$ + 00000A 60 00125$: + 00000A A6 01 [ 1] 61 ld a, #0x01 + 00000C 6B 01 [ 1] 62 ld (0x01, sp), a + 00000E 63 00126$: + 00000E 0D 01 [ 1] 64 tnz (0x01, sp) + 000010 27 04 [ 1] 65 jreq 00106$ + 000012 1E 0A [ 2] 66 ldw x, (0x0a, sp) + 000014 50 [ 2] 67 negw x + 000015 C5 68 .byte 0xc5 + 000016 69 00106$: + 000016 1E 0A [ 2] 70 ldw x, (0x0a, sp) + 000018 71 00107$: + 000018 1F 02 [ 2] 72 ldw (0x02, sp), x + 00001A 0D 0C [ 1] 73 tnz (0x0c, sp) + 00001C 2B 04 [ 1] 74 jrmi 00128$ + 00001E 0F 04 [ 1] 75 clr (0x04, sp) + 000020 20 04 [ 2] 76 jra 00129$ + 000022 77 00128$: + 000022 A6 01 [ 1] 78 ld a, #0x01 + 000024 6B 04 [ 1] 79 ld (0x04, sp), a + 000026 80 00129$: + 000026 0D 04 [ 1] 81 tnz (0x04, sp) + 000028 27 0C [ 1] 82 jreq 00108$ + 00002A 7B 0D [ 1] 83 ld a, (0x0d, sp) + 00002C 40 [ 1] 84 neg a + 00002D 6B 06 [ 1] 85 ld (0x06, sp), a + 00002F 4F [ 1] 86 clr a + 000030 12 0C [ 1] 87 sbc a, (0x0c, sp) + 000032 6B 05 [ 1] 88 ld (0x05, sp), a + 000034 20 04 [ 2] 89 jra 00109$ + 000036 90 00108$: + 000036 16 0C [ 2] 91 ldw y, (0x0c, sp) + 000038 17 05 [ 2] 92 ldw (0x05, sp), y + 00003A 93 00109$: + 00003A 16 05 [ 2] 94 ldw y, (0x05, sp) + 00003C 1E 02 [ 2] 95 ldw x, (0x02, sp) + 00003E 65 [ 2] 96 divw x, y + 97 ; ../_divsint.c: 212: if ((x < 0) ^ (y < 0)) + 00003F 7B 01 [ 1] 98 ld a, (0x01, sp) + 000041 18 04 [ 1] 99 xor a, (0x04, sp) + 000043 27 01 [ 1] 100 jreq 00102$ + 101 ; ../_divsint.c: 213: return -r; + 000045 50 [ 2] 102 negw x + 103 ; ../_divsint.c: 215: return r; + 000046 104 00102$: + 105 ; ../_divsint.c: 216: } + 000046 5B 06 [ 2] 106 addw sp, #6 + 000048 87 [ 5] 107 retf + 108 .area CODE + 109 .area CONST + 110 .area INITIALIZER + 111 .area CABS (ABS) diff --git a/device/lib/stm8-large/_divsint.rel b/device/lib/stm8-large/_divsint.rel new file mode 100644 index 0000000..a585798 --- /dev/null +++ b/device/lib/stm8-large/_divsint.rel @@ -0,0 +1,59 @@ +XH3 +H B areas 2 global symbols +M _divsint +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 49 flags 0 addr 0 +S __divsint Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 06 0D 0A 2B 04 0F 01 20 04 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A A6 01 6B 01 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 0D 01 27 04 1E 0A 50 C5 +R 00 00 00 09 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 1E 0A +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 1F 02 0D 0C 2B 04 0F 04 20 04 +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 A6 01 6B 04 +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 0D 04 27 0C 7B 0D 40 6B 06 4F 12 0C 6B +R 00 00 00 09 +T 00 00 33 05 20 04 +R 00 00 00 09 +T 00 00 36 +R 00 00 00 09 +T 00 00 36 16 0C 17 05 +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 16 05 1E 02 65 7B 01 18 04 27 01 50 +R 00 00 00 09 +T 00 00 46 +R 00 00 00 09 +T 00 00 46 5B 06 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_divsint.sym b/device/lib/stm8-large/_divsint.sym new file mode 100644 index 0000000..8ca74f5 --- /dev/null +++ b/device/lib/stm8-large/_divsint.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 __divsint 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 49 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_divslong.asm b/device/lib/stm8-large/_divslong.asm new file mode 100644 index 0000000..2b52a47 --- /dev/null +++ b/device/lib/stm8-large/_divslong.asm @@ -0,0 +1,151 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _divslong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __divslong +;-------------------------------------------------------- +; 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 +; ../_divslong.c: 259: _divslong (long x, long y) +; ----------------------------------------- +; function _divslong +; ----------------------------------------- +__divslong: + sub sp, #10 +; ../_divslong.c: 263: r = (unsigned long)(x < 0 ? -x : x) / (unsigned long)(y < 0 ? -y : y); + tnz (0x0e, sp) + jrmi 00125$ + clr (0x01, sp) + jra 00126$ +00125$: + ld a, #0x01 + ld (0x01, sp), a +00126$: + tnz (0x01, sp) + jreq 00106$ + ldw y, (0x10, sp) + negw y + ldw x, (0x0e, sp) + jrnc 00128$ + incw x +00128$: + negw x + ldw (0x09, sp), y + ldw (0x07, sp), x + jra 00107$ +00106$: + ldw y, (0x10, sp) + ldw (0x09, sp), y + ldw y, (0x0e, sp) + ldw (0x07, sp), y +00107$: + ldw y, (0x09, sp) + ldw (0x04, sp), y + ldw y, (0x07, sp) + ldw (0x02, sp), y + tnz (0x12, sp) + jrmi 00129$ + clr (0x06, sp) + jra 00130$ +00129$: + ld a, #0x01 + ld (0x06, sp), a +00130$: + tnz (0x06, sp) + jreq 00108$ + ld a, (0x15, sp) + neg a + ld (0x0a, sp), a + clr a + sbc a, (0x14, sp) + ld (0x09, sp), a + clr a + sbc a, (0x13, sp) + ld (0x08, sp), a + clr a + sbc a, (0x12, sp) + ld (0x07, sp), a + jra 00109$ +00108$: + ldw y, (0x14, sp) + ldw (0x09, sp), y + ldw y, (0x12, sp) + ldw (0x07, sp), y +00109$: + ldw x, (0x09, sp) + ldw y, (0x07, sp) + pushw x + pushw y + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + callf __divulong + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y +; ../_divslong.c: 264: if ((x < 0) ^ (y < 0)) + ld a, (0x01, sp) + xor a, (0x06, sp) + jreq 00102$ +; ../_divslong.c: 265: return -r; + ldw x, (0x09, sp) + negw x + ldw y, (0x07, sp) + jrnc 00133$ + incw y +00133$: + negw y + jra 00104$ +00102$: +; ../_divslong.c: 267: return r; + ldw x, (0x09, sp) + ldw y, (0x07, sp) +00104$: +; ../_divslong.c: 268: } + addw sp, #10 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_divslong.lst b/device/lib/stm8-large/_divslong.lst new file mode 100644 index 0000000..6bf3fd5 --- /dev/null +++ b/device/lib/stm8-large/_divslong.lst @@ -0,0 +1,151 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _divslong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __divslong + 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 ; ../_divslong.c: 259: _divslong (long x, long y) + 50 ; ----------------------------------------- + 51 ; function _divslong + 52 ; ----------------------------------------- + 000000 53 __divslong: + 000000 52 0A [ 2] 54 sub sp, #10 + 55 ; ../_divslong.c: 263: r = (unsigned long)(x < 0 ? -x : x) / (unsigned long)(y < 0 ? -y : y); + 000002 0D 0E [ 1] 56 tnz (0x0e, sp) + 000004 2B 04 [ 1] 57 jrmi 00125$ + 000006 0F 01 [ 1] 58 clr (0x01, sp) + 000008 20 04 [ 2] 59 jra 00126$ + 00000A 60 00125$: + 00000A A6 01 [ 1] 61 ld a, #0x01 + 00000C 6B 01 [ 1] 62 ld (0x01, sp), a + 00000E 63 00126$: + 00000E 0D 01 [ 1] 64 tnz (0x01, sp) + 000010 27 10 [ 1] 65 jreq 00106$ + 000012 16 10 [ 2] 66 ldw y, (0x10, sp) + 000014 90 50 [ 2] 67 negw y + 000016 1E 0E [ 2] 68 ldw x, (0x0e, sp) + 000018 24 01 [ 1] 69 jrnc 00128$ + 00001A 5C [ 1] 70 incw x + 00001B 71 00128$: + 00001B 50 [ 2] 72 negw x + 00001C 17 09 [ 2] 73 ldw (0x09, sp), y + 00001E 1F 07 [ 2] 74 ldw (0x07, sp), x + 000020 20 08 [ 2] 75 jra 00107$ + 000022 76 00106$: + 000022 16 10 [ 2] 77 ldw y, (0x10, sp) + 000024 17 09 [ 2] 78 ldw (0x09, sp), y + 000026 16 0E [ 2] 79 ldw y, (0x0e, sp) + 000028 17 07 [ 2] 80 ldw (0x07, sp), y + 00002A 81 00107$: + 00002A 16 09 [ 2] 82 ldw y, (0x09, sp) + 00002C 17 04 [ 2] 83 ldw (0x04, sp), y + 00002E 16 07 [ 2] 84 ldw y, (0x07, sp) + 000030 17 02 [ 2] 85 ldw (0x02, sp), y + 000032 0D 12 [ 1] 86 tnz (0x12, sp) + 000034 2B 04 [ 1] 87 jrmi 00129$ + 000036 0F 06 [ 1] 88 clr (0x06, sp) + 000038 20 04 [ 2] 89 jra 00130$ + 00003A 90 00129$: + 00003A A6 01 [ 1] 91 ld a, #0x01 + 00003C 6B 06 [ 1] 92 ld (0x06, sp), a + 00003E 93 00130$: + 00003E 0D 06 [ 1] 94 tnz (0x06, sp) + 000040 27 16 [ 1] 95 jreq 00108$ + 000042 7B 15 [ 1] 96 ld a, (0x15, sp) + 000044 40 [ 1] 97 neg a + 000045 6B 0A [ 1] 98 ld (0x0a, sp), a + 000047 4F [ 1] 99 clr a + 000048 12 14 [ 1] 100 sbc a, (0x14, sp) + 00004A 6B 09 [ 1] 101 ld (0x09, sp), a + 00004C 4F [ 1] 102 clr a + 00004D 12 13 [ 1] 103 sbc a, (0x13, sp) + 00004F 6B 08 [ 1] 104 ld (0x08, sp), a + 000051 4F [ 1] 105 clr a + 000052 12 12 [ 1] 106 sbc a, (0x12, sp) + 000054 6B 07 [ 1] 107 ld (0x07, sp), a + 000056 20 08 [ 2] 108 jra 00109$ + 000058 109 00108$: + 000058 16 14 [ 2] 110 ldw y, (0x14, sp) + 00005A 17 09 [ 2] 111 ldw (0x09, sp), y + 00005C 16 12 [ 2] 112 ldw y, (0x12, sp) + 00005E 17 07 [ 2] 113 ldw (0x07, sp), y + 000060 114 00109$: + 000060 1E 09 [ 2] 115 ldw x, (0x09, sp) + 000062 16 07 [ 2] 116 ldw y, (0x07, sp) + 000064 89 [ 2] 117 pushw x + 000065 90 89 [ 2] 118 pushw y + 000067 1E 08 [ 2] 119 ldw x, (0x08, sp) + 000069 89 [ 2] 120 pushw x + 00006A 1E 08 [ 2] 121 ldw x, (0x08, sp) + 00006C 89 [ 2] 122 pushw x + 00006D 8Ds00r00r00 [ 5] 123 callf __divulong + 000071 5B 08 [ 2] 124 addw sp, #8 + 000073 1F 09 [ 2] 125 ldw (0x09, sp), x + 000075 17 07 [ 2] 126 ldw (0x07, sp), y + 127 ; ../_divslong.c: 264: if ((x < 0) ^ (y < 0)) + 000077 7B 01 [ 1] 128 ld a, (0x01, sp) + 000079 18 06 [ 1] 129 xor a, (0x06, sp) + 00007B 27 0D [ 1] 130 jreq 00102$ + 131 ; ../_divslong.c: 265: return -r; + 00007D 1E 09 [ 2] 132 ldw x, (0x09, sp) + 00007F 50 [ 2] 133 negw x + 000080 16 07 [ 2] 134 ldw y, (0x07, sp) + 000082 24 02 [ 1] 135 jrnc 00133$ + 000084 90 5C [ 1] 136 incw y + 000086 137 00133$: + 000086 90 50 [ 2] 138 negw y + 000088 20 04 [ 2] 139 jra 00104$ + 00008A 140 00102$: + 141 ; ../_divslong.c: 267: return r; + 00008A 1E 09 [ 2] 142 ldw x, (0x09, sp) + 00008C 16 07 [ 2] 143 ldw y, (0x07, sp) + 00008E 144 00104$: + 145 ; ../_divslong.c: 268: } + 00008E 5B 0A [ 2] 146 addw sp, #10 + 000090 87 [ 5] 147 retf + 148 .area CODE + 149 .area CONST + 150 .area INITIALIZER + 151 .area CABS (ABS) diff --git a/device/lib/stm8-large/_divslong.rel b/device/lib/stm8-large/_divslong.rel new file mode 100644 index 0000000..e637b14 --- /dev/null +++ b/device/lib/stm8-large/_divslong.rel @@ -0,0 +1,78 @@ +XH3 +H B areas 3 global symbols +M _divslong +O -mstm8 +S .__.ABS. Def000000 +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 91 flags 0 addr 0 +S __divslong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 0A 0D 0E 2B 04 0F 01 20 04 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A A6 01 6B 01 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 0D 01 27 10 16 10 90 50 1E 0E 24 01 5C +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 50 17 09 1F 07 20 08 +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 16 10 17 09 16 0E 17 07 +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 16 09 17 04 16 07 17 02 0D 12 2B 04 0F +R 00 00 00 09 +T 00 00 37 06 20 04 +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A A6 01 6B 06 +R 00 00 00 09 +T 00 00 3E +R 00 00 00 09 +T 00 00 3E 0D 06 27 16 7B 15 40 6B 0A 4F 12 14 6B +R 00 00 00 09 +T 00 00 4B 09 4F 12 13 6B 08 4F 12 12 6B 07 20 08 +R 00 00 00 09 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 16 14 17 09 16 12 17 07 +R 00 00 00 09 +T 00 00 60 +R 00 00 00 09 +T 00 00 60 1E 09 16 07 89 90 89 1E 08 89 1E 08 89 +R 00 00 00 09 +T 00 00 6D 8D 00 00 00 5B 08 1F 09 17 07 7B 01 18 +R 00 00 00 09 82 04 00 01 +T 00 00 7A 06 27 0D 1E 09 50 16 07 24 02 90 5C +R 00 00 00 09 +T 00 00 86 +R 00 00 00 09 +T 00 00 86 90 50 20 04 +R 00 00 00 09 +T 00 00 8A +R 00 00 00 09 +T 00 00 8A 1E 09 16 07 +R 00 00 00 09 +T 00 00 8E +R 00 00 00 09 +T 00 00 8E 5B 0A 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_divslong.sym b/device/lib/stm8-large/_divslong.sym new file mode 100644 index 0000000..9f64b7c --- /dev/null +++ b/device/lib/stm8-large/_divslong.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 __divslong 000000 GR + __divulong ****** 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 91 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_divslonglong.asm b/device/lib/stm8-large/_divslonglong.asm new file mode 100644 index 0000000..ce626c6 --- /dev/null +++ b/device/lib/stm8-large/_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 (0x17, 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 (0x1f, 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, (0x1f, sp) + neg a + ld (0x11, sp), a + clr a + sbc a, (0x1e, sp) + ld (0x10, sp), a + clr a + sbc a, (0x1d, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x1c, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x1b, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x1a, sp) + ld (0x0c, sp), a + ldw x, (0x18, sp) + jrnc 00129$ + incw x +00129$: + negw x + pop a + ldw (0x17, sp), x + ldw y, (0x0f, sp) + ldw (0x1d, sp), y + ldw y, (0x0d, sp) + ldw (0x1b, sp), y + ldw y, (0x0b, sp) + ldw (0x19, sp), y +00102$: +; ../_divslonglong.c: 44: if (denominatorneg) + tnz a + jreq 00104$ +; ../_divslonglong.c: 45: denominator = -denominator; + push a + ld a, (0x27, sp) + neg a + ld (0x11, sp), a + clr a + sbc a, (0x26, sp) + ld (0x10, sp), a + clr a + sbc a, (0x25, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x24, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x23, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x22, sp) + ld (0x0c, sp), a + ldw x, (0x20, sp) + jrnc 00131$ + incw x +00131$: + negw x + pop a + ldw (0x1f, sp), x + ldw y, (0x0f, sp) + ldw (0x25, sp), y + ldw y, (0x0d, sp) + ldw (0x23, sp), y + ldw y, (0x0b, sp) + ldw (0x21, sp), y +00104$: +; ../_divslonglong.c: 47: d = (unsigned long long)numerator / (unsigned long long)denominator; + ldw y, (0x1d, sp) + ldw (0x07, sp), y + ldw y, (0x1b, sp) + ldw (0x05, sp), y + ldw y, (0x19, sp) + ldw (0x03, sp), y + ldw y, (0x17, sp) + ldw (0x01, sp), y + ldw y, (0x25, sp) + ldw (0x0f, sp), y + ldw y, (0x23, sp) + ldw (0x0d, sp), y + ldw y, (0x21, sp) + ldw (0x0b, sp), y + ldw y, (0x1f, 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 + callf __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, (0x15, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_divslonglong.lst b/device/lib/stm8-large/_divslonglong.lst new file mode 100644 index 0000000..b9a3211 --- /dev/null +++ b/device/lib/stm8-large/_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 17 [ 1] 56 tnz (0x17, 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 1F [ 1] 65 tnz (0x1f, 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 1F [ 1] 77 ld a, (0x1f, sp) + 00001D 40 [ 1] 78 neg a + 00001E 6B 11 [ 1] 79 ld (0x11, sp), a + 000020 4F [ 1] 80 clr a + 000021 12 1E [ 1] 81 sbc a, (0x1e, sp) + 000023 6B 10 [ 1] 82 ld (0x10, sp), a + 000025 4F [ 1] 83 clr a + 000026 12 1D [ 1] 84 sbc a, (0x1d, sp) + 000028 6B 0F [ 1] 85 ld (0x0f, sp), a + 00002A 4F [ 1] 86 clr a + 00002B 12 1C [ 1] 87 sbc a, (0x1c, sp) + 00002D 6B 0E [ 1] 88 ld (0x0e, sp), a + 00002F 4F [ 1] 89 clr a + 000030 12 1B [ 1] 90 sbc a, (0x1b, sp) + 000032 6B 0D [ 1] 91 ld (0x0d, sp), a + 000034 4F [ 1] 92 clr a + 000035 12 1A [ 1] 93 sbc a, (0x1a, sp) + 000037 6B 0C [ 1] 94 ld (0x0c, sp), a + 000039 1E 18 [ 2] 95 ldw x, (0x18, 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 17 [ 2] 101 ldw (0x17, sp), x + 000042 16 0F [ 2] 102 ldw y, (0x0f, sp) + 000044 17 1D [ 2] 103 ldw (0x1d, sp), y + 000046 16 0D [ 2] 104 ldw y, (0x0d, sp) + 000048 17 1B [ 2] 105 ldw (0x1b, sp), y + 00004A 16 0B [ 2] 106 ldw y, (0x0b, sp) + 00004C 17 19 [ 2] 107 ldw (0x19, 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 27 [ 1] 114 ld a, (0x27, sp) + 000054 40 [ 1] 115 neg a + 000055 6B 11 [ 1] 116 ld (0x11, sp), a + 000057 4F [ 1] 117 clr a + 000058 12 26 [ 1] 118 sbc a, (0x26, sp) + 00005A 6B 10 [ 1] 119 ld (0x10, sp), a + 00005C 4F [ 1] 120 clr a + 00005D 12 25 [ 1] 121 sbc a, (0x25, sp) + 00005F 6B 0F [ 1] 122 ld (0x0f, sp), a + 000061 4F [ 1] 123 clr a + 000062 12 24 [ 1] 124 sbc a, (0x24, sp) + 000064 6B 0E [ 1] 125 ld (0x0e, sp), a + 000066 4F [ 1] 126 clr a + 000067 12 23 [ 1] 127 sbc a, (0x23, sp) + 000069 6B 0D [ 1] 128 ld (0x0d, sp), a + 00006B 4F [ 1] 129 clr a + 00006C 12 22 [ 1] 130 sbc a, (0x22, sp) + 00006E 6B 0C [ 1] 131 ld (0x0c, sp), a + 000070 1E 20 [ 2] 132 ldw x, (0x20, 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 1F [ 2] 138 ldw (0x1f, sp), x + 000079 16 0F [ 2] 139 ldw y, (0x0f, sp) + 00007B 17 25 [ 2] 140 ldw (0x25, sp), y + 00007D 16 0D [ 2] 141 ldw y, (0x0d, sp) + 00007F 17 23 [ 2] 142 ldw (0x23, sp), y + 000081 16 0B [ 2] 143 ldw y, (0x0b, sp) + 000083 17 21 [ 2] 144 ldw (0x21, sp), y + 000085 145 00104$: + 146 ; ../_divslonglong.c: 47: d = (unsigned long long)numerator / (unsigned long long)denominator; + 000085 16 1D [ 2] 147 ldw y, (0x1d, sp) + 000087 17 07 [ 2] 148 ldw (0x07, sp), y + 000089 16 1B [ 2] 149 ldw y, (0x1b, sp) + 00008B 17 05 [ 2] 150 ldw (0x05, sp), y + 00008D 16 19 [ 2] 151 ldw y, (0x19, sp) + 00008F 17 03 [ 2] 152 ldw (0x03, sp), y + 000091 16 17 [ 2] 153 ldw y, (0x17, sp) + 000093 17 01 [ 2] 154 ldw (0x01, sp), y + 000095 16 25 [ 2] 155 ldw y, (0x25, sp) + 000097 17 0F [ 2] 156 ldw (0x0f, sp), y + 000099 16 23 [ 2] 157 ldw y, (0x23, sp) + 00009B 17 0D [ 2] 158 ldw (0x0d, sp), y + 00009D 16 21 [ 2] 159 ldw y, (0x21, sp) + 00009F 17 0B [ 2] 160 ldw (0x0b, sp), y + 0000A1 16 1F [ 2] 161 ldw y, (0x1f, 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 8Ds00r00r00 [ 5] 181 callf __divulonglong + 0000C4 5B 12 [ 2] 182 addw sp, #18 + 0000C6 84 [ 1] 183 pop a + 0000C7 16 0F [ 2] 184 ldw y, (0x0f, sp) + 0000C9 17 07 [ 2] 185 ldw (0x07, sp), y + 0000CB 16 0D [ 2] 186 ldw y, (0x0d, sp) + 0000CD 17 05 [ 2] 187 ldw (0x05, sp), y + 0000CF 16 0B [ 2] 188 ldw y, (0x0b, sp) + 0000D1 17 03 [ 2] 189 ldw (0x03, sp), y + 0000D3 16 09 [ 2] 190 ldw y, (0x09, sp) + 0000D5 17 01 [ 2] 191 ldw (0x01, sp), y + 192 ; ../_divslonglong.c: 49: return ((numeratorneg ^ denominatorneg) ? -d : d); + 0000D7 18 11 [ 1] 193 xor a, (0x11, sp) + 0000D9 6B 11 [ 1] 194 ld (0x11, sp), a + 0000DB 27 2A [ 1] 195 jreq 00107$ + 0000DD 7B 08 [ 1] 196 ld a, (0x08, sp) + 0000DF 40 [ 1] 197 neg a + 0000E0 6B 11 [ 1] 198 ld (0x11, sp), a + 0000E2 4F [ 1] 199 clr a + 0000E3 12 07 [ 1] 200 sbc a, (0x07, sp) + 0000E5 6B 10 [ 1] 201 ld (0x10, sp), a + 0000E7 4F [ 1] 202 clr a + 0000E8 12 06 [ 1] 203 sbc a, (0x06, sp) + 0000EA 6B 0F [ 1] 204 ld (0x0f, sp), a + 0000EC 4F [ 1] 205 clr a + 0000ED 12 05 [ 1] 206 sbc a, (0x05, sp) + 0000EF 6B 0E [ 1] 207 ld (0x0e, sp), a + 0000F1 4F [ 1] 208 clr a + 0000F2 12 04 [ 1] 209 sbc a, (0x04, sp) + 0000F4 6B 0D [ 1] 210 ld (0x0d, sp), a + 0000F6 4F [ 1] 211 clr a + 0000F7 12 03 [ 1] 212 sbc a, (0x03, sp) + 0000F9 6B 0C [ 1] 213 ld (0x0c, sp), a + 0000FB 4F [ 1] 214 clr a + 0000FC 12 02 [ 1] 215 sbc a, (0x02, sp) + 0000FE 6B 0B [ 1] 216 ld (0x0b, sp), a + 000100 4F [ 1] 217 clr a + 000101 12 01 [ 1] 218 sbc a, (0x01, sp) + 000103 6B 0A [ 1] 219 ld (0x0a, sp), a + 000105 20 10 [ 2] 220 jra 00108$ + 000107 221 00107$: + 000107 16 07 [ 2] 222 ldw y, (0x07, sp) + 000109 17 10 [ 2] 223 ldw (0x10, sp), y + 00010B 16 05 [ 2] 224 ldw y, (0x05, sp) + 00010D 17 0E [ 2] 225 ldw (0x0e, sp), y + 00010F 16 03 [ 2] 226 ldw y, (0x03, sp) + 000111 17 0C [ 2] 227 ldw (0x0c, sp), y + 000113 16 01 [ 2] 228 ldw y, (0x01, sp) + 000115 17 0A [ 2] 229 ldw (0x0a, sp), y + 000117 230 00108$: + 000117 1E 15 [ 2] 231 ldw x, (0x15, sp) + 000119 16 10 [ 2] 232 ldw y, (0x10, sp) + 00011B EF 06 [ 2] 233 ldw (#6, x), y + 00011D 16 0E [ 2] 234 ldw y, (0x0e, sp) + 00011F EF 04 [ 2] 235 ldw (#4, x), y + 000121 16 0C [ 2] 236 ldw y, (0x0c, sp) + 000123 EF 02 [ 2] 237 ldw (#2, x), y + 000125 16 0A [ 2] 238 ldw y, (0x0a, sp) + 000127 FF [ 2] 239 ldw (x), y + 240 ; ../_divslonglong.c: 50: } + 000128 5B 11 [ 2] 241 addw sp, #17 + 00012A 87 [ 5] 242 retf + 243 .area CODE + 244 .area CONST + 245 .area INITIALIZER + 246 .area CABS (ABS) diff --git a/device/lib/stm8-large/_divslonglong.rel b/device/lib/stm8-large/_divslonglong.rel new file mode 100644 index 0000000..fd75b5e --- /dev/null +++ b/device/lib/stm8-large/_divslonglong.rel @@ -0,0 +1,100 @@ +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 12B 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 17 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 1F 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 1F 40 6B 11 4F 12 1E +R 00 00 00 09 +T 00 00 23 6B 10 4F 12 1D 6B 0F 4F 12 1C 6B 0E 4F +R 00 00 00 09 +T 00 00 30 12 1B 6B 0D 4F 12 1A 6B 0C 1E 18 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 17 16 0F 17 1D 16 0D 17 1B 16 +R 00 00 00 09 +T 00 00 4B 0B 17 19 +R 00 00 00 09 +T 00 00 4E +R 00 00 00 09 +T 00 00 4E 4D 27 34 88 7B 27 40 6B 11 4F 12 26 6B +R 00 00 00 09 +T 00 00 5B 10 4F 12 25 6B 0F 4F 12 24 6B 0E 4F 12 +R 00 00 00 09 +T 00 00 68 23 6B 0D 4F 12 22 6B 0C 1E 20 24 01 5C +R 00 00 00 09 +T 00 00 75 +R 00 00 00 09 +T 00 00 75 50 84 1F 1F 16 0F 17 25 16 0D 17 23 16 +R 00 00 00 09 +T 00 00 82 0B 17 21 +R 00 00 00 09 +T 00 00 85 +R 00 00 00 09 +T 00 00 85 16 1D 17 07 16 1B 17 05 16 19 17 03 16 +R 00 00 00 09 +T 00 00 92 17 17 01 16 25 17 0F 16 23 17 0D 16 21 +R 00 00 00 09 +T 00 00 9F 17 0B 16 1F 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 8D +R 00 00 00 09 +T 00 00 C1 00 00 00 5B 12 84 16 0F 17 07 16 0D 17 +R 00 00 00 09 82 03 00 00 +T 00 00 CE 05 16 0B 17 03 16 09 17 01 18 11 6B 11 +R 00 00 00 09 +T 00 00 DB 27 2A 7B 08 40 6B 11 4F 12 07 6B 10 4F +R 00 00 00 09 +T 00 00 E8 12 06 6B 0F 4F 12 05 6B 0E 4F 12 04 6B +R 00 00 00 09 +T 00 00 F5 0D 4F 12 03 6B 0C 4F 12 02 6B 0B 4F 12 +R 00 00 00 09 +T 00 01 02 01 6B 0A 20 10 +R 00 00 00 09 +T 00 01 07 +R 00 00 00 09 +T 00 01 07 16 07 17 10 16 05 17 0E 16 03 17 0C 16 +R 00 00 00 09 +T 00 01 14 01 17 0A +R 00 00 00 09 +T 00 01 17 +R 00 00 00 09 +T 00 01 17 1E 15 16 10 EF 06 16 0E EF 04 16 0C EF +R 00 00 00 09 +T 00 01 24 02 16 0A FF 5B 11 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_divslonglong.sym b/device/lib/stm8-large/_divslonglong.sym new file mode 100644 index 0000000..afd02f1 --- /dev/null +++ b/device/lib/stm8-large/_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 12B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_divulong.asm b/device/lib/stm8-large/_divulong.asm new file mode 100644 index 0000000..777c970 --- /dev/null +++ b/device/lib/stm8-large/_divulong.asm @@ -0,0 +1,145 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _divulong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __divulong +;-------------------------------------------------------- +; 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 +; ../_divulong.c: 331: _divulong (unsigned long x, unsigned long y) +; ----------------------------------------- +; function _divulong +; ----------------------------------------- +__divulong: + sub sp, #8 +; ../_divulong.c: 333: unsigned long reste = 0L; + clrw x + ldw (0x07, sp), x + clrw y +; ../_divulong.c: 334: unsigned char count = 32; + ld a, #0x20 +; ../_divulong.c: 337: do +00105$: +; ../_divulong.c: 340: c = MSB_SET(x); + push a + ld a, (0x0d, sp) + sll a + clr a + rlc a + ld (0x05, sp), a + pop a +; ../_divulong.c: 341: x <<= 1; + sll (0x0f, sp) + rlc (0x0e, sp) + rlc (0x0d, sp) + rlc (0x0c, sp) +; ../_divulong.c: 342: reste <<= 1; + sll (0x08, sp) + rlc (0x07, sp) + rlcw y +; ../_divulong.c: 343: if (c) + tnz (0x04, sp) + jreq 00102$ +; ../_divulong.c: 344: reste |= 1L; + push a + ldw x, (0x08, sp) + srlw x + scf + rlcw x + pop a + ldw (0x07, sp), x +00102$: +; ../_divulong.c: 346: if (reste >= y) + ldw x, (0x07, sp) + cpw x, (0x12, sp) + push a + ld a, yl + sbc a, (0x12, sp) + ld a, yh + sbc a, (0x11, sp) + pop a + jrc 00106$ +; ../_divulong.c: 348: reste -= y; + ldw x, (0x07, sp) + subw x, (0x12, sp) + push a + ld a, yl + sbc a, (0x12, sp) + rlwa y + sbc a, (0x11, sp) + ld yh, a + pop a + ldw (0x07, sp), x +; ../_divulong.c: 350: x |= 1L; + push a + ld a, (0x10, sp) + or a, #0x01 + ld (0x05, sp), a + ld a, (0x0f, sp) + ld (0x04, sp), a + ld a, (0x0e, sp) + ld (0x03, sp), a + ld a, (0x0d, sp) + ld (0x02, sp), a + pop a + ldw x, (0x03, sp) + ldw (0x0e, sp), x + ldw x, (0x01, sp) + ldw (0x0c, sp), x +00106$: +; ../_divulong.c: 353: while (--count); + dec a + ld xl, a + tnz a + exg a, xl + jrne 00105$ +; ../_divulong.c: 354: return x; + ldw x, (0x0e, sp) + ldw y, (0x0c, sp) +; ../_divulong.c: 355: } + addw sp, #8 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_divulong.lst b/device/lib/stm8-large/_divulong.lst new file mode 100644 index 0000000..5fe1f9f --- /dev/null +++ b/device/lib/stm8-large/_divulong.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 _divulong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __divulong + 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 ; ../_divulong.c: 331: _divulong (unsigned long x, unsigned long y) + 50 ; ----------------------------------------- + 51 ; function _divulong + 52 ; ----------------------------------------- + 000000 53 __divulong: + 000000 52 08 [ 2] 54 sub sp, #8 + 55 ; ../_divulong.c: 333: unsigned long reste = 0L; + 000002 5F [ 1] 56 clrw x + 000003 1F 07 [ 2] 57 ldw (0x07, sp), x + 000005 90 5F [ 1] 58 clrw y + 59 ; ../_divulong.c: 334: unsigned char count = 32; + 000007 A6 20 [ 1] 60 ld a, #0x20 + 61 ; ../_divulong.c: 337: do + 000009 62 00105$: + 63 ; ../_divulong.c: 340: c = MSB_SET(x); + 000009 88 [ 1] 64 push a + 00000A 7B 0D [ 1] 65 ld a, (0x0d, sp) + 00000C 48 [ 1] 66 sll a + 00000D 4F [ 1] 67 clr a + 00000E 49 [ 1] 68 rlc a + 00000F 6B 05 [ 1] 69 ld (0x05, sp), a + 000011 84 [ 1] 70 pop a + 71 ; ../_divulong.c: 341: x <<= 1; + 000012 08 0F [ 1] 72 sll (0x0f, sp) + 000014 09 0E [ 1] 73 rlc (0x0e, sp) + 000016 09 0D [ 1] 74 rlc (0x0d, sp) + 000018 09 0C [ 1] 75 rlc (0x0c, sp) + 76 ; ../_divulong.c: 342: reste <<= 1; + 00001A 08 08 [ 1] 77 sll (0x08, sp) + 00001C 09 07 [ 1] 78 rlc (0x07, sp) + 00001E 90 59 [ 2] 79 rlcw y + 80 ; ../_divulong.c: 343: if (c) + 000020 0D 04 [ 1] 81 tnz (0x04, sp) + 000022 27 09 [ 1] 82 jreq 00102$ + 83 ; ../_divulong.c: 344: reste |= 1L; + 000024 88 [ 1] 84 push a + 000025 1E 08 [ 2] 85 ldw x, (0x08, sp) + 000027 54 [ 2] 86 srlw x + 000028 99 [ 1] 87 scf + 000029 59 [ 2] 88 rlcw x + 00002A 84 [ 1] 89 pop a + 00002B 1F 07 [ 2] 90 ldw (0x07, sp), x + 00002D 91 00102$: + 92 ; ../_divulong.c: 346: if (reste >= y) + 00002D 1E 07 [ 2] 93 ldw x, (0x07, sp) + 00002F 13 12 [ 2] 94 cpw x, (0x12, sp) + 000031 88 [ 1] 95 push a + 000032 90 9F [ 1] 96 ld a, yl + 000034 12 12 [ 1] 97 sbc a, (0x12, sp) + 000036 90 9E [ 1] 98 ld a, yh + 000038 12 11 [ 1] 99 sbc a, (0x11, sp) + 00003A 84 [ 1] 100 pop a + 00003B 25 2F [ 1] 101 jrc 00106$ + 102 ; ../_divulong.c: 348: reste -= y; + 00003D 1E 07 [ 2] 103 ldw x, (0x07, sp) + 00003F 72 F0 12 [ 2] 104 subw x, (0x12, sp) + 000042 88 [ 1] 105 push a + 000043 90 9F [ 1] 106 ld a, yl + 000045 12 12 [ 1] 107 sbc a, (0x12, sp) + 000047 90 02 [ 1] 108 rlwa y + 000049 12 11 [ 1] 109 sbc a, (0x11, sp) + 00004B 90 95 [ 1] 110 ld yh, a + 00004D 84 [ 1] 111 pop a + 00004E 1F 07 [ 2] 112 ldw (0x07, sp), x + 113 ; ../_divulong.c: 350: x |= 1L; + 000050 88 [ 1] 114 push a + 000051 7B 10 [ 1] 115 ld a, (0x10, sp) + 000053 AA 01 [ 1] 116 or a, #0x01 + 000055 6B 05 [ 1] 117 ld (0x05, sp), a + 000057 7B 0F [ 1] 118 ld a, (0x0f, sp) + 000059 6B 04 [ 1] 119 ld (0x04, sp), a + 00005B 7B 0E [ 1] 120 ld a, (0x0e, sp) + 00005D 6B 03 [ 1] 121 ld (0x03, sp), a + 00005F 7B 0D [ 1] 122 ld a, (0x0d, sp) + 000061 6B 02 [ 1] 123 ld (0x02, sp), a + 000063 84 [ 1] 124 pop a + 000064 1E 03 [ 2] 125 ldw x, (0x03, sp) + 000066 1F 0E [ 2] 126 ldw (0x0e, sp), x + 000068 1E 01 [ 2] 127 ldw x, (0x01, sp) + 00006A 1F 0C [ 2] 128 ldw (0x0c, sp), x + 00006C 129 00106$: + 130 ; ../_divulong.c: 353: while (--count); + 00006C 4A [ 1] 131 dec a + 00006D 97 [ 1] 132 ld xl, a + 00006E 4D [ 1] 133 tnz a + 00006F 41 [ 1] 134 exg a, xl + 000070 26 97 [ 1] 135 jrne 00105$ + 136 ; ../_divulong.c: 354: return x; + 000072 1E 0E [ 2] 137 ldw x, (0x0e, sp) + 000074 16 0C [ 2] 138 ldw y, (0x0c, sp) + 139 ; ../_divulong.c: 355: } + 000076 5B 08 [ 2] 140 addw sp, #8 + 000078 87 [ 5] 141 retf + 142 .area CODE + 143 .area CONST + 144 .area INITIALIZER + 145 .area CABS (ABS) diff --git a/device/lib/stm8-large/_divulong.rel b/device/lib/stm8-large/_divulong.rel new file mode 100644 index 0000000..1de606d --- /dev/null +++ b/device/lib/stm8-large/_divulong.rel @@ -0,0 +1,45 @@ +XH3 +H B areas 2 global symbols +M _divulong +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 79 flags 0 addr 0 +S __divulong 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 07 90 5F A6 20 +R 00 00 00 09 +T 00 00 09 +R 00 00 00 09 +T 00 00 09 88 7B 0D 48 4F 49 6B 05 84 08 0F 09 0E +R 00 00 00 09 +T 00 00 16 09 0D 09 0C 08 08 09 07 90 59 0D 04 27 +R 00 00 00 09 +T 00 00 23 09 88 1E 08 54 99 59 84 1F 07 +R 00 00 00 09 +T 00 00 2D +R 00 00 00 09 +T 00 00 2D 1E 07 13 12 88 90 9F 12 12 90 9E 12 11 +R 00 00 00 09 +T 00 00 3A 84 25 2F 1E 07 72 F0 12 88 90 9F 12 12 +R 00 00 00 09 +T 00 00 47 90 02 12 11 90 95 84 1F 07 88 7B 10 AA +R 00 00 00 09 +T 00 00 54 01 6B 05 7B 0F 6B 04 7B 0E 6B 03 7B 0D +R 00 00 00 09 +T 00 00 61 6B 02 84 1E 03 1F 0E 1E 01 1F 0C +R 00 00 00 09 +T 00 00 6C +R 00 00 00 09 +T 00 00 6C 4A 97 4D 41 26 97 1E 0E 16 0C 5B 08 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_divulong.sym b/device/lib/stm8-large/_divulong.sym new file mode 100644 index 0000000..c596c87 --- /dev/null +++ b/device/lib/stm8-large/_divulong.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 __divulong 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 79 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_divulonglong.asm b/device/lib/stm8-large/_divulonglong.asm new file mode 100644 index 0000000..2eb7fff --- /dev/null +++ b/device/lib/stm8-large/_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, (0x17, sp) + sll a + clr a + rlc a +; ../_divulonglong.c: 49: x <<= 1; + sll (0x1e, sp) + rlc (0x1d, sp) + rlc (0x1c, sp) + rlc (0x1b, sp) + rlc (0x1a, sp) + rlc (0x19, sp) + rlc (0x18, sp) + rlc (0x17, 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, (0x25, sp) + ld a, (0x0f, sp) + sbc a, (0x24, sp) + ld a, (0x0e, sp) + sbc a, (0x23, sp) + ld a, (0x0d, sp) + sbc a, (0x22, sp) + ld a, (0x0c, sp) + sbc a, (0x21, sp) + ld a, (0x0b, sp) + sbc a, (0x20, sp) + ld a, (0x0a, sp) + sbc a, (0x1f, sp) + jrc 00106$ +; ../_divulonglong.c: 56: reste -= y; + ldw x, (0x10, sp) + subw x, (0x25, sp) + ldw (0x08, sp), x + ld a, (0x0f, sp) + sbc a, (0x24, sp) + ld (0x07, sp), a + ld a, (0x0e, sp) + sbc a, (0x23, sp) + ld (0x06, sp), a + ld a, (0x0d, sp) + sbc a, (0x22, sp) + ld (0x05, sp), a + ld a, (0x0c, sp) + sbc a, (0x21, sp) + ld (0x04, sp), a + ld a, (0x0b, sp) + sbc a, (0x20, sp) + ld (0x03, sp), a + ld a, (0x0a, sp) + sbc a, (0x1f, 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, (0x1e, sp) + or a, #0x01 + ld (0x09, sp), a + ld a, (0x1d, sp) + ld (0x08, sp), a + ld a, (0x1c, sp) + ld (0x07, sp), a + ld a, (0x1b, sp) + ld (0x06, sp), a + ld a, (0x1a, sp) + ld (0x05, sp), a + ld a, (0x19, sp) + ld (0x04, sp), a + ld a, (0x18, sp) + ld (0x03, sp), a + ld a, (0x17, sp) + ld (0x02, sp), a + ldw y, (0x08, sp) + ldw (0x1d, sp), y + ldw y, (0x06, sp) + ldw (0x1b, sp), y + ldw y, (0x04, sp) + ldw (0x19, sp), y + ldw y, (0x02, sp) + ldw (0x17, sp), y +00106$: +; ../_divulonglong.c: 61: while (--count); + dec (0x01, sp) + jreq 00132$ + jpf 00105$ +00132$: +; ../_divulonglong.c: 62: return x; + ldw x, (0x15, sp) + ldw y, (0x1d, sp) + ldw (#6, x), y + ldw y, (0x1b, sp) + ldw (#4, x), y + ldw y, (0x19, sp) + ldw (#2, x), y + ldw y, (0x17, sp) + ldw (x), y +; ../_divulonglong.c: 63: } + addw sp, #17 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_divulonglong.lst b/device/lib/stm8-large/_divulonglong.lst new file mode 100644 index 0000000..8fc2da8 --- /dev/null +++ b/device/lib/stm8-large/_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 17 [ 1] 67 ld a, (0x17, 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 1E [ 1] 72 sll (0x1e, sp) + 000016 09 1D [ 1] 73 rlc (0x1d, sp) + 000018 09 1C [ 1] 74 rlc (0x1c, sp) + 00001A 09 1B [ 1] 75 rlc (0x1b, sp) + 00001C 09 1A [ 1] 76 rlc (0x1a, sp) + 00001E 09 19 [ 1] 77 rlc (0x19, sp) + 000020 09 18 [ 1] 78 rlc (0x18, sp) + 000022 09 17 [ 1] 79 rlc (0x17, 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 25 [ 2] 123 cpw x, (0x25, sp) + 00006B 7B 0F [ 1] 124 ld a, (0x0f, sp) + 00006D 12 24 [ 1] 125 sbc a, (0x24, sp) + 00006F 7B 0E [ 1] 126 ld a, (0x0e, sp) + 000071 12 23 [ 1] 127 sbc a, (0x23, sp) + 000073 7B 0D [ 1] 128 ld a, (0x0d, sp) + 000075 12 22 [ 1] 129 sbc a, (0x22, sp) + 000077 7B 0C [ 1] 130 ld a, (0x0c, sp) + 000079 12 21 [ 1] 131 sbc a, (0x21, sp) + 00007B 7B 0B [ 1] 132 ld a, (0x0b, sp) + 00007D 12 20 [ 1] 133 sbc a, (0x20, sp) + 00007F 7B 0A [ 1] 134 ld a, (0x0a, sp) + 000081 12 1F [ 1] 135 sbc a, (0x1f, 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 25 [ 2] 139 subw x, (0x25, sp) + 00008A 1F 08 [ 2] 140 ldw (0x08, sp), x + 00008C 7B 0F [ 1] 141 ld a, (0x0f, sp) + 00008E 12 24 [ 1] 142 sbc a, (0x24, sp) + 000090 6B 07 [ 1] 143 ld (0x07, sp), a + 000092 7B 0E [ 1] 144 ld a, (0x0e, sp) + 000094 12 23 [ 1] 145 sbc a, (0x23, sp) + 000096 6B 06 [ 1] 146 ld (0x06, sp), a + 000098 7B 0D [ 1] 147 ld a, (0x0d, sp) + 00009A 12 22 [ 1] 148 sbc a, (0x22, sp) + 00009C 6B 05 [ 1] 149 ld (0x05, sp), a + 00009E 7B 0C [ 1] 150 ld a, (0x0c, sp) + 0000A0 12 21 [ 1] 151 sbc a, (0x21, sp) + 0000A2 6B 04 [ 1] 152 ld (0x04, sp), a + 0000A4 7B 0B [ 1] 153 ld a, (0x0b, sp) + 0000A6 12 20 [ 1] 154 sbc a, (0x20, sp) + 0000A8 6B 03 [ 1] 155 ld (0x03, sp), a + 0000AA 7B 0A [ 1] 156 ld a, (0x0a, sp) + 0000AC 12 1F [ 1] 157 sbc a, (0x1f, 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 1E [ 1] 168 ld a, (0x1e, sp) + 0000C2 AA 01 [ 1] 169 or a, #0x01 + 0000C4 6B 09 [ 1] 170 ld (0x09, sp), a + 0000C6 7B 1D [ 1] 171 ld a, (0x1d, sp) + 0000C8 6B 08 [ 1] 172 ld (0x08, sp), a + 0000CA 7B 1C [ 1] 173 ld a, (0x1c, sp) + 0000CC 6B 07 [ 1] 174 ld (0x07, sp), a + 0000CE 7B 1B [ 1] 175 ld a, (0x1b, sp) + 0000D0 6B 06 [ 1] 176 ld (0x06, sp), a + 0000D2 7B 1A [ 1] 177 ld a, (0x1a, sp) + 0000D4 6B 05 [ 1] 178 ld (0x05, sp), a + 0000D6 7B 19 [ 1] 179 ld a, (0x19, sp) + 0000D8 6B 04 [ 1] 180 ld (0x04, sp), a + 0000DA 7B 18 [ 1] 181 ld a, (0x18, sp) + 0000DC 6B 03 [ 1] 182 ld (0x03, sp), a + 0000DE 7B 17 [ 1] 183 ld a, (0x17, sp) + 0000E0 6B 02 [ 1] 184 ld (0x02, sp), a + 0000E2 16 08 [ 2] 185 ldw y, (0x08, sp) + 0000E4 17 1D [ 2] 186 ldw (0x1d, sp), y + 0000E6 16 06 [ 2] 187 ldw y, (0x06, sp) + 0000E8 17 1B [ 2] 188 ldw (0x1b, sp), y + 0000EA 16 04 [ 2] 189 ldw y, (0x04, sp) + 0000EC 17 19 [ 2] 190 ldw (0x19, sp), y + 0000EE 16 02 [ 2] 191 ldw y, (0x02, sp) + 0000F0 17 17 [ 2] 192 ldw (0x17, sp), y + 0000F2 193 00106$: + 194 ; ../_divulonglong.c: 61: while (--count); + 0000F2 0A 01 [ 1] 195 dec (0x01, sp) + 0000F4 27 04 [ 1] 196 jreq 00132$ + 0000F6 ACs00r00r0F [ 2] 197 jpf 00105$ + 0000FA 198 00132$: + 199 ; ../_divulonglong.c: 62: return x; + 0000FA 1E 15 [ 2] 200 ldw x, (0x15, sp) + 0000FC 16 1D [ 2] 201 ldw y, (0x1d, sp) + 0000FE EF 06 [ 2] 202 ldw (#6, x), y + 000100 16 1B [ 2] 203 ldw y, (0x1b, sp) + 000102 EF 04 [ 2] 204 ldw (#4, x), y + 000104 16 19 [ 2] 205 ldw y, (0x19, sp) + 000106 EF 02 [ 2] 206 ldw (#2, x), y + 000108 16 17 [ 2] 207 ldw y, (0x17, sp) + 00010A FF [ 2] 208 ldw (x), y + 209 ; ../_divulonglong.c: 63: } + 00010B 5B 11 [ 2] 210 addw sp, #17 + 00010D 87 [ 5] 211 retf + 212 .area CODE + 213 .area CONST + 214 .area INITIALIZER + 215 .area CABS (ABS) diff --git a/device/lib/stm8-large/_divulonglong.rel b/device/lib/stm8-large/_divulonglong.rel new file mode 100644 index 0000000..cc72625 --- /dev/null +++ b/device/lib/stm8-large/_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 10E 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 17 48 4F 49 08 1E 09 1D 09 1C 09 1B +R 00 00 00 09 +T 00 00 1C 09 1A 09 19 09 18 09 17 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 25 7B 0F 12 24 7B 0E 12 23 7B +R 00 00 00 09 +T 00 00 74 0D 12 22 7B 0C 12 21 7B 0B 12 20 7B 0A +R 00 00 00 09 +T 00 00 81 12 1F 25 6D 1E 10 72 F0 25 1F 08 7B 0F +R 00 00 00 09 +T 00 00 8E 12 24 6B 07 7B 0E 12 23 6B 06 7B 0D 12 +R 00 00 00 09 +T 00 00 9B 22 6B 05 7B 0C 12 21 6B 04 7B 0B 12 20 +R 00 00 00 09 +T 00 00 A8 6B 03 7B 0A 12 1F 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 1E +R 00 00 00 09 +T 00 00 C2 AA 01 6B 09 7B 1D 6B 08 7B 1C 6B 07 7B +R 00 00 00 09 +T 00 00 CF 1B 6B 06 7B 1A 6B 05 7B 19 6B 04 7B 18 +R 00 00 00 09 +T 00 00 DC 6B 03 7B 17 6B 02 16 08 17 1D 16 06 17 +R 00 00 00 09 +T 00 00 E9 1B 16 04 17 19 16 02 17 17 +R 00 00 00 09 +T 00 00 F2 +R 00 00 00 09 +T 00 00 F2 0A 01 27 04 AC 00 00 0F +R 00 00 00 09 80 08 00 09 +T 00 00 FA +R 00 00 00 09 +T 00 00 FA 1E 15 16 1D EF 06 16 1B EF 04 16 19 EF +R 00 00 00 09 +T 00 01 07 02 16 17 FF 5B 11 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_divulonglong.sym b/device/lib/stm8-large/_divulonglong.sym new file mode 100644 index 0000000..2663dfe --- /dev/null +++ b/device/lib/stm8-large/_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 10E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fs2schar.asm b/device/lib/stm8-large/_fs2schar.asm new file mode 100644 index 0000000..1e1086c --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2schar.lst b/device/lib/stm8-large/_fs2schar.lst new file mode 100644 index 0000000..389d29a --- /dev/null +++ b/device/lib/stm8-large/_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 0A [ 2] 57 ldw x, (0x0a, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 0A [ 2] 59 ldw x, (0x0a, sp) + 000007 89 [ 2] 60 pushw x + 000008 8Ds00r00r00 [ 5] 61 callf ___fs2slong + 00000C 5B 04 [ 2] 62 addw sp, #4 + 00000E 1F 03 [ 2] 63 ldw (0x03, sp), x + 000010 17 01 [ 2] 64 ldw (0x01, sp), y + 65 ; ../_fs2schar.c: 90: if (sl>=SCHAR_MAX) + 000012 1E 03 [ 2] 66 ldw x, (0x03, sp) + 000014 A3 00 7F [ 2] 67 cpw x, #0x007f + 000017 7B 02 [ 1] 68 ld a, (0x02, sp) + 000019 A2 00 [ 1] 69 sbc a, #0x00 + 00001B 7B 01 [ 1] 70 ld a, (0x01, sp) + 00001D A2 00 [ 1] 71 sbc a, #0x00 + 00001F 2F 04 [ 1] 72 jrslt 00102$ + 73 ; ../_fs2schar.c: 91: return SCHAR_MAX; + 000021 A6 7F [ 1] 74 ld a, #0x7f + 000023 20 15 [ 2] 75 jra 00105$ + 000025 76 00102$: + 77 ; ../_fs2schar.c: 92: if (sl<=SCHAR_MIN) + 000025 AE FF 80 [ 2] 78 ldw x, #0xff80 + 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 ; ../_fs2schar.c: 93: return -SCHAR_MIN; + 000034 A6 80 [ 1] 86 ld a, #0x80 + 000036 20 02 [ 2] 87 jra 00105$ + 000038 88 00104$: + 89 ; ../_fs2schar.c: 94: return sl; + 000038 7B 04 [ 1] 90 ld a, (0x04, sp) + 00003A 91 00105$: + 92 ; ../_fs2schar.c: 95: } + 00003A 5B 04 [ 2] 93 addw sp, #4 + 00003C 87 [ 5] 94 retf + 95 .area CODE + 96 .area CONST + 97 .area INITIALIZER + 98 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2schar.rel b/device/lib/stm8-large/_fs2schar.rel new file mode 100644 index 0000000..fa61413 --- /dev/null +++ b/device/lib/stm8-large/_fs2schar.rel @@ -0,0 +1,42 @@ +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 3D 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 0A 89 1E 0A 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 A3 +R 00 00 00 09 82 03 00 00 +T 00 00 15 00 7F 7B 02 A2 00 7B 01 A2 00 2F 04 A6 +R 00 00 00 09 +T 00 00 22 7F 20 15 +R 00 00 00 09 +T 00 00 25 +R 00 00 00 09 +T 00 00 25 AE FF 80 13 03 A6 FF 12 02 A6 FF 12 01 +R 00 00 00 09 +T 00 00 32 2F 04 A6 80 20 02 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 7B 04 +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 5B 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fs2schar.sym b/device/lib/stm8-large/_fs2schar.sym new file mode 100644 index 0000000..c6e56f4 --- /dev/null +++ b/device/lib/stm8-large/_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 3D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fs2sint.asm b/device/lib/stm8-large/_fs2sint.asm new file mode 100644 index 0000000..d913eab --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2sint.lst b/device/lib/stm8-large/_fs2sint.lst new file mode 100644 index 0000000..7bc52a0 --- /dev/null +++ b/device/lib/stm8-large/_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 0A [ 2] 57 ldw x, (0x0a, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 0A [ 2] 59 ldw x, (0x0a, sp) + 000007 89 [ 2] 60 pushw x + 000008 8Ds00r00r00 [ 5] 61 callf ___fs2slong + 00000C 5B 04 [ 2] 62 addw sp, #4 + 00000E 1F 03 [ 2] 63 ldw (0x03, sp), x + 000010 17 01 [ 2] 64 ldw (0x01, sp), y + 65 ; ../_fs2sint.c: 84: if (sl>=INT_MAX) + 000012 1E 03 [ 2] 66 ldw x, (0x03, sp) + 000014 A3 7F FF [ 2] 67 cpw x, #0x7fff + 000017 7B 02 [ 1] 68 ld a, (0x02, sp) + 000019 A2 00 [ 1] 69 sbc a, #0x00 + 00001B 7B 01 [ 1] 70 ld a, (0x01, sp) + 00001D A2 00 [ 1] 71 sbc a, #0x00 + 00001F 2F 05 [ 1] 72 jrslt 00102$ + 73 ; ../_fs2sint.c: 85: return INT_MAX; + 000021 AE 7F FF [ 2] 74 ldw x, #0x7fff + 000024 20 15 [ 2] 75 jra 00105$ + 000026 76 00102$: + 77 ; ../_fs2sint.c: 86: if (sl<=INT_MIN) + 000026 AE 80 00 [ 2] 78 ldw x, #0x8000 + 000029 13 03 [ 2] 79 cpw x, (0x03, sp) + 00002B A6 FF [ 1] 80 ld a, #0xff + 00002D 12 02 [ 1] 81 sbc a, (0x02, sp) + 00002F A6 FF [ 1] 82 ld a, #0xff + 000031 12 01 [ 1] 83 sbc a, (0x01, sp) + 000033 2F 04 [ 1] 84 jrslt 00104$ + 85 ; ../_fs2sint.c: 87: return -INT_MIN; + 000035 AE 80 00 [ 2] 86 ldw x, #0x8000 + 87 ; ../_fs2sint.c: 88: return sl; + 000038 C5 88 .byte 0xc5 + 000039 89 00104$: + 000039 1E 03 [ 2] 90 ldw x, (0x03, sp) + 00003B 91 00105$: + 92 ; ../_fs2sint.c: 89: } + 00003B 5B 04 [ 2] 93 addw sp, #4 + 00003D 87 [ 5] 94 retf + 95 .area CODE + 96 .area CONST + 97 .area INITIALIZER + 98 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2sint.rel b/device/lib/stm8-large/_fs2sint.rel new file mode 100644 index 0000000..f8d6b3d --- /dev/null +++ b/device/lib/stm8-large/_fs2sint.rel @@ -0,0 +1,42 @@ +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 3E 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 0A 89 1E 0A 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 A3 +R 00 00 00 09 82 03 00 00 +T 00 00 15 7F FF 7B 02 A2 00 7B 01 A2 00 2F 05 AE +R 00 00 00 09 +T 00 00 22 7F FF 20 15 +R 00 00 00 09 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 AE 80 00 13 03 A6 FF 12 02 A6 FF 12 01 +R 00 00 00 09 +T 00 00 33 2F 04 AE 80 00 C5 +R 00 00 00 09 +T 00 00 39 +R 00 00 00 09 +T 00 00 39 1E 03 +R 00 00 00 09 +T 00 00 3B +R 00 00 00 09 +T 00 00 3B 5B 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fs2sint.sym b/device/lib/stm8-large/_fs2sint.sym new file mode 100644 index 0000000..e02a249 --- /dev/null +++ b/device/lib/stm8-large/_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 3E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fs2slong.asm b/device/lib/stm8-large/_fs2slong.asm new file mode 100644 index 0000000..700094a --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0a, sp) + jrne 00102$ + ldw x, (0x08, 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, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + callf ___fslt + addw sp, #8 + tnz a + jreq 00104$ +; ../_fs2slong.c: 115: return -__fs2ulong(-f); + ldw y, (0x0a, sp) + ldw x, (0x08, sp) + sllw x + ccf + rrcw x + pushw y + pushw x + callf ___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, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___fs2ulong + addw sp, #4 +00106$: +; ../_fs2slong.c: 119: } + addw sp, #4 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2slong.lst b/device/lib/stm8-large/_fs2slong.lst new file mode 100644 index 0000000..6429a35 --- /dev/null +++ b/device/lib/stm8-large/_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 0A [ 2] 57 ldw x, (0x0a, sp) + 000004 26 0A [ 1] 58 jrne 00102$ + 000006 1E 08 [ 2] 59 ldw x, (0x08, 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 40 [ 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 0E [ 2] 72 ldw x, (0x0e, sp) + 000016 89 [ 2] 73 pushw x + 000017 1E 0E [ 2] 74 ldw x, (0x0e, sp) + 000019 89 [ 2] 75 pushw x + 00001A 8Ds00r00r00 [ 5] 76 callf ___fslt + 00001E 5B 08 [ 2] 77 addw sp, #8 + 000020 4D [ 1] 78 tnz a + 000021 27 21 [ 1] 79 jreq 00104$ + 80 ; ../_fs2slong.c: 115: return -__fs2ulong(-f); + 000023 16 0A [ 2] 81 ldw y, (0x0a, sp) + 000025 1E 08 [ 2] 82 ldw x, (0x08, sp) + 000027 58 [ 2] 83 sllw x + 000028 8C [ 1] 84 ccf + 000029 56 [ 2] 85 rrcw x + 00002A 90 89 [ 2] 86 pushw y + 00002C 89 [ 2] 87 pushw x + 00002D 8Ds00r00r00 [ 5] 88 callf ___fs2ulong + 000031 5B 04 [ 2] 89 addw sp, #4 + 000033 1F 03 [ 2] 90 ldw (0x03, sp), x + 000035 17 01 [ 2] 91 ldw (0x01, sp), y + 000037 1E 03 [ 2] 92 ldw x, (0x03, sp) + 000039 50 [ 2] 93 negw x + 00003A 16 01 [ 2] 94 ldw y, (0x01, sp) + 00003C 24 02 [ 1] 95 jrnc 00121$ + 00003E 90 5C [ 1] 96 incw y + 000040 97 00121$: + 000040 90 50 [ 2] 98 negw y + 000042 20 0C [ 2] 99 jra 00106$ + 000044 100 00104$: + 101 ; ../_fs2slong.c: 117: return __fs2ulong(f); + 000044 1E 0A [ 2] 102 ldw x, (0x0a, sp) + 000046 89 [ 2] 103 pushw x + 000047 1E 0A [ 2] 104 ldw x, (0x0a, sp) + 000049 89 [ 2] 105 pushw x + 00004A 8Ds00r00r00 [ 5] 106 callf ___fs2ulong + 00004E 5B 04 [ 2] 107 addw sp, #4 + 000050 108 00106$: + 109 ; ../_fs2slong.c: 119: } + 000050 5B 04 [ 2] 110 addw sp, #4 + 000052 87 [ 5] 111 retf + 112 .area CODE + 113 .area CONST + 114 .area INITIALIZER + 115 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2slong.rel b/device/lib/stm8-large/_fs2slong.rel new file mode 100644 index 0000000..e712949 --- /dev/null +++ b/device/lib/stm8-large/_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 53 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 0A 26 0A 1E 08 58 26 05 5F 90 +R 00 00 00 09 +T 00 00 0D 5F 20 40 +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 5F 89 5F 89 1E 0E 89 1E 0E 89 8D +R 00 00 00 09 +T 00 00 1B 00 00 00 5B 08 4D 27 21 16 0A 1E 08 58 +R 00 00 00 09 82 03 00 01 +T 00 00 28 8C 56 90 89 89 8D 00 00 00 5B 04 1F 03 +R 00 00 00 09 82 09 00 00 +T 00 00 35 17 01 1E 03 50 16 01 24 02 90 5C +R 00 00 00 09 +T 00 00 40 +R 00 00 00 09 +T 00 00 40 90 50 20 0C +R 00 00 00 09 +T 00 00 44 +R 00 00 00 09 +T 00 00 44 1E 0A 89 1E 0A 89 8D 00 00 00 5B 04 +R 00 00 00 09 82 0A 00 00 +T 00 00 50 +R 00 00 00 09 +T 00 00 50 5B 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fs2slong.sym b/device/lib/stm8-large/_fs2slong.sym new file mode 100644 index 0000000..748a8f6 --- /dev/null +++ b/device/lib/stm8-large/_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 53 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fs2uchar.asm b/device/lib/stm8-large/_fs2uchar.asm new file mode 100644 index 0000000..0f02ef4 --- /dev/null +++ b/device/lib/stm8-large/_fs2uchar.asm @@ -0,0 +1,80 @@ +;-------------------------------------------------------- +; 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, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + callf ___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 +; ../_fs2uchar.c: 55: return ul; + .byte 0x21 +00102$: + ld a, xl +00103$: +; ../_fs2uchar.c: 56: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2uchar.lst b/device/lib/stm8-large/_fs2uchar.lst new file mode 100644 index 0000000..617fa25 --- /dev/null +++ b/device/lib/stm8-large/_fs2uchar.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 _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 06 [ 2] 56 ldw x, (0x06, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 06 [ 2] 58 ldw x, (0x06, sp) + 000005 89 [ 2] 59 pushw x + 000006 8Ds00r00r00 [ 5] 60 callf ___fs2ulong + 00000A 5B 04 [ 2] 61 addw sp, #4 + 62 ; ../_fs2uchar.c: 54: if (ul>=UCHAR_MAX) return UCHAR_MAX; + 00000C A3 00 FF [ 2] 63 cpw x, #0x00ff + 00000F 90 9F [ 1] 64 ld a, yl + 000011 A2 00 [ 1] 65 sbc a, #0x00 + 000013 90 9E [ 1] 66 ld a, yh + 000015 A2 00 [ 1] 67 sbc a, #0x00 + 000017 25 03 [ 1] 68 jrc 00102$ + 000019 A6 FF [ 1] 69 ld a, #0xff + 70 ; ../_fs2uchar.c: 55: return ul; + 00001B 21 71 .byte 0x21 + 00001C 72 00102$: + 00001C 9F [ 1] 73 ld a, xl + 00001D 74 00103$: + 75 ; ../_fs2uchar.c: 56: } + 00001D 87 [ 5] 76 retf + 77 .area CODE + 78 .area CONST + 79 .area INITIALIZER + 80 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2uchar.rel b/device/lib/stm8-large/_fs2uchar.rel new file mode 100644 index 0000000..8bd5d7e --- /dev/null +++ b/device/lib/stm8-large/_fs2uchar.rel @@ -0,0 +1,34 @@ +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 1E 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 06 89 1E 06 89 8D 00 00 00 5B 04 A3 +R 00 00 00 09 82 0A 00 00 +T 00 00 0D 00 FF 90 9F A2 00 90 9E A2 00 25 03 A6 +R 00 00 00 09 +T 00 00 1A FF 21 +R 00 00 00 09 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 9F +R 00 00 00 09 +T 00 00 1D +R 00 00 00 09 +T 00 00 1D 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fs2uchar.sym b/device/lib/stm8-large/_fs2uchar.sym new file mode 100644 index 0000000..049af41 --- /dev/null +++ b/device/lib/stm8-large/_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 1E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fs2uint.asm b/device/lib/stm8-large/_fs2uint.asm new file mode 100644 index 0000000..9c52df8 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2uint.lst b/device/lib/stm8-large/_fs2uint.lst new file mode 100644 index 0000000..5e52511 --- /dev/null +++ b/device/lib/stm8-large/_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 0A [ 2] 57 ldw x, (0x0a, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 0A [ 2] 59 ldw x, (0x0a, sp) + 000007 89 [ 2] 60 pushw x + 000008 8Ds00r00r00 [ 5] 61 callf ___fs2ulong + 00000C 5B 04 [ 2] 62 addw sp, #4 + 00000E 1F 03 [ 2] 63 ldw (0x03, sp), x + 000010 17 01 [ 2] 64 ldw (0x01, sp), y + 65 ; ../_fs2uint.c: 57: if (ul>=UINT_MAX) return UINT_MAX; + 000012 7B 04 [ 1] 66 ld a, (0x04, sp) + 000014 A1 FF [ 1] 67 cp a, #0xff + 000016 7B 03 [ 1] 68 ld a, (0x03, sp) + 000018 A2 FF [ 1] 69 sbc a, #0xff + 00001A 7B 02 [ 1] 70 ld a, (0x02, sp) + 00001C A2 00 [ 1] 71 sbc a, #0x00 + 00001E 7B 01 [ 1] 72 ld a, (0x01, sp) + 000020 A2 00 [ 1] 73 sbc a, #0x00 + 000022 25 03 [ 1] 74 jrc 00102$ + 000024 5F [ 1] 75 clrw x + 000025 5A [ 2] 76 decw x + 77 ; ../_fs2uint.c: 58: return ul; + 000026 C5 78 .byte 0xc5 + 000027 79 00102$: + 000027 1E 03 [ 2] 80 ldw x, (0x03, sp) + 000029 81 00103$: + 82 ; ../_fs2uint.c: 59: } + 000029 5B 04 [ 2] 83 addw sp, #4 + 00002B 87 [ 5] 84 retf + 85 .area CODE + 86 .area CONST + 87 .area INITIALIZER + 88 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2uint.rel b/device/lib/stm8-large/_fs2uint.rel new file mode 100644 index 0000000..33e00ad --- /dev/null +++ b/device/lib/stm8-large/_fs2uint.rel @@ -0,0 +1,36 @@ +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 2C 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 0A 89 1E 0A 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 04 1F 03 17 01 7B 04 A1 FF +R 00 00 00 09 82 03 00 00 +T 00 00 16 7B 03 A2 FF 7B 02 A2 00 7B 01 A2 00 25 +R 00 00 00 09 +T 00 00 23 03 5F 5A C5 +R 00 00 00 09 +T 00 00 27 +R 00 00 00 09 +T 00 00 27 1E 03 +R 00 00 00 09 +T 00 00 29 +R 00 00 00 09 +T 00 00 29 5B 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fs2uint.sym b/device/lib/stm8-large/_fs2uint.sym new file mode 100644 index 0000000..637797a --- /dev/null +++ b/device/lib/stm8-large/_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 2C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fs2ulong.asm b/device/lib/stm8-large/_fs2ulong.asm new file mode 100644 index 0000000..ea59dfe --- /dev/null +++ b/device/lib/stm8-large/_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, (0x14, sp) + ldw (0x03, sp), y + ldw y, (0x12, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2ulong.lst b/device/lib/stm8-large/_fs2ulong.lst new file mode 100644 index 0000000..744266f --- /dev/null +++ b/device/lib/stm8-large/_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 14 [ 2] 56 ldw y, (0x14, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 12 [ 2] 58 ldw y, (0x12, 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 87 [ 5] 122 retf + 123 .area CODE + 124 .area CONST + 125 .area INITIALIZER + 126 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fs2ulong.rel b/device/lib/stm8-large/_fs2ulong.rel new file mode 100644 index 0000000..6b726b3 --- /dev/null +++ b/device/lib/stm8-large/_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 14 17 03 16 12 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fs2ulong.sym b/device/lib/stm8-large/_fs2ulong.sym new file mode 100644 index 0000000..a19a514 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_fsadd.asm b/device/lib/stm8-large/_fsadd.asm new file mode 100644 index 0000000..fc1f1fa --- /dev/null +++ b/device/lib/stm8-large/_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, #30 +; ../_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, (0x1c, sp) + ldw y, (0x1a, sp) + jpf 00137$ +00104$: +; ../_fsadd.c: 187: pfl1 = (long _AUTOMEM *)&a1; + ldw x, sp + addw x, #26 +; ../_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, (0x20, sp) + ldw y, (0x1e, sp) + jpf 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, (0x1c, sp) + ldw y, (0x1a, sp) + jpf 00137$ +00112$: +; ../_fsadd.c: 200: if (expd < -25) + ldw x, (0x15, sp) + cpw x, #0xffe7 + jrsge 00114$ +; ../_fsadd.c: 201: return (a2); + ldw x, (0x20, sp) + ldw y, (0x1e, sp) + jpf 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 + jpf 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 + jpf 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) + jpf 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, (0x1c, sp) + ldw y, (0x1a, sp) +00137$: +; ../_fsadd.c: 250: } + addw sp, #22 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fsadd.lst b/device/lib/stm8-large/_fsadd.lst new file mode 100644 index 0000000..ea9557c --- /dev/null +++ b/device/lib/stm8-large/_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 1E [ 2] 57 addw x, #30 + 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 0C [ 1] 109 jrne 00104$ + 00004F 1E 0F [ 2] 110 ldw x, (0x0f, sp) + 000051 26 08 [ 1] 111 jrne 00104$ + 112 ; ../_fsadd.c: 185: return (a1); + 000053 1E 1C [ 2] 113 ldw x, (0x1c, sp) + 000055 16 1A [ 2] 114 ldw y, (0x1a, sp) + 000057 ACs00r02r80 [ 2] 115 jpf 00137$ + 00005B 116 00104$: + 117 ; ../_fsadd.c: 187: pfl1 = (long _AUTOMEM *)&a1; + 00005B 96 [ 1] 118 ldw x, sp + 00005C 1C 00 1A [ 2] 119 addw x, #26 + 120 ; ../_fsadd.c: 188: exp1 = EXP (*pfl1); + 00005F 1F 07 [ 2] 121 ldw (0x07, sp), x + 000061 90 93 [ 1] 122 ldw y, x + 000063 90 EE 02 [ 2] 123 ldw y, (0x2, y) + 000066 17 0B [ 2] 124 ldw (0x0b, sp), y + 000068 FE [ 2] 125 ldw x, (x) + 000069 1F 09 [ 2] 126 ldw (0x09, sp), x + 00006B 16 0B [ 2] 127 ldw y, (0x0b, sp) + 00006D 17 15 [ 2] 128 ldw (0x15, sp), y + 00006F 16 09 [ 2] 129 ldw y, (0x09, sp) + 000071 17 13 [ 2] 130 ldw (0x13, sp), y + 000073 93 [ 1] 131 ldw x, y + 000074 A6 80 [ 1] 132 ld a, #0x80 + 000076 62 [ 2] 133 div x, a + 000077 4F [ 1] 134 clr a + 000078 95 [ 1] 135 ld xh, a + 000079 1F 0D [ 2] 136 ldw (0x0d, sp), x + 137 ; ../_fsadd.c: 189: mant1 = MANT (*pfl1) << 4; + 00007B 16 0B [ 2] 138 ldw y, (0x0b, sp) + 00007D 7B 0A [ 1] 139 ld a, (0x0a, sp) + 00007F A4 7F [ 1] 140 and a, #0x7f + 000081 95 [ 1] 141 ld xh, a + 000082 4F [ 1] 142 clr a + 000083 97 [ 1] 143 ld xl, a + 000084 58 [ 2] 144 sllw x + 000085 99 [ 1] 145 scf + 000086 56 [ 2] 146 rrcw x + 000087 5E [ 1] 147 swapw x + 000088 A6 04 [ 1] 148 ld a, #0x04 + 00008A 149 00246$: + 00008A 90 58 [ 2] 150 sllw y + 00008C 59 [ 2] 151 rlcw x + 00008D 4A [ 1] 152 dec a + 00008E 26 FA [ 1] 153 jrne 00246$ + 000090 17 11 [ 2] 154 ldw (0x11, sp), y + 000092 1F 0F [ 2] 155 ldw (0x0f, sp), x + 156 ; ../_fsadd.c: 190: if (SIGN(*pfl1)) + 000094 0D 13 [ 1] 157 tnz (0x13, sp) + 000096 2A 20 [ 1] 158 jrpl 00108$ + 159 ; ../_fsadd.c: 191: if (*pfl1 & 0x80000000) + 000098 0D 09 [ 1] 160 tnz (0x09, sp) + 00009A 2A 1C [ 1] 161 jrpl 00108$ + 162 ; ../_fsadd.c: 192: mant1 = -mant1; + 00009C 7B 12 [ 1] 163 ld a, (0x12, sp) + 00009E 40 [ 1] 164 neg a + 00009F 6B 16 [ 1] 165 ld (0x16, sp), a + 0000A1 4F [ 1] 166 clr a + 0000A2 12 11 [ 1] 167 sbc a, (0x11, sp) + 0000A4 6B 15 [ 1] 168 ld (0x15, sp), a + 0000A6 4F [ 1] 169 clr a + 0000A7 12 10 [ 1] 170 sbc a, (0x10, sp) + 0000A9 6B 14 [ 1] 171 ld (0x14, sp), a + 0000AB 4F [ 1] 172 clr a + 0000AC 12 0F [ 1] 173 sbc a, (0x0f, sp) + 0000AE 6B 0F [ 1] 174 ld (0x0f, sp), a + 0000B0 16 15 [ 2] 175 ldw y, (0x15, sp) + 0000B2 17 11 [ 2] 176 ldw (0x11, sp), y + 0000B4 7B 14 [ 1] 177 ld a, (0x14, sp) + 0000B6 6B 10 [ 1] 178 ld (0x10, sp), a + 0000B8 179 00108$: + 180 ; ../_fsadd.c: 194: if (!*pfl1) + 0000B8 1E 0B [ 2] 181 ldw x, (0x0b, sp) + 0000BA 26 0C [ 1] 182 jrne 00110$ + 0000BC 1E 09 [ 2] 183 ldw x, (0x09, sp) + 0000BE 26 08 [ 1] 184 jrne 00110$ + 185 ; ../_fsadd.c: 195: return (a2); + 0000C0 1E 20 [ 2] 186 ldw x, (0x20, sp) + 0000C2 16 1E [ 2] 187 ldw y, (0x1e, sp) + 0000C4 ACs00r02r80 [ 2] 188 jpf 00137$ + 0000C8 189 00110$: + 190 ; ../_fsadd.c: 197: expd = exp1 - exp2; + 0000C8 1E 0D [ 2] 191 ldw x, (0x0d, sp) + 0000CA 72 F0 01 [ 2] 192 subw x, (0x01, sp) + 193 ; ../_fsadd.c: 198: if (expd > 25) + 0000CD 1F 15 [ 2] 194 ldw (0x15, sp), x + 0000CF A3 00 19 [ 2] 195 cpw x, #0x0019 + 0000D2 2D 08 [ 1] 196 jrsle 00112$ + 197 ; ../_fsadd.c: 199: return (a1); + 0000D4 1E 1C [ 2] 198 ldw x, (0x1c, sp) + 0000D6 16 1A [ 2] 199 ldw y, (0x1a, sp) + 0000D8 ACs00r02r80 [ 2] 200 jpf 00137$ + 0000DC 201 00112$: + 202 ; ../_fsadd.c: 200: if (expd < -25) + 0000DC 1E 15 [ 2] 203 ldw x, (0x15, sp) + 0000DE A3 FF E7 [ 2] 204 cpw x, #0xffe7 + 0000E1 2E 08 [ 1] 205 jrsge 00114$ + 206 ; ../_fsadd.c: 201: return (a2); + 0000E3 1E 20 [ 2] 207 ldw x, (0x20, sp) + 0000E5 16 1E [ 2] 208 ldw y, (0x1e, sp) + 0000E7 ACs00r02r80 [ 2] 209 jpf 00137$ + 0000EB 210 00114$: + 211 ; ../_fsadd.c: 203: if (expd < 0) + 0000EB 0D 15 [ 1] 212 tnz (0x15, sp) + 0000ED 2A 1E [ 1] 213 jrpl 00116$ + 214 ; ../_fsadd.c: 205: expd = -expd; + 0000EF 1E 15 [ 2] 215 ldw x, (0x15, sp) + 0000F1 50 [ 2] 216 negw x + 217 ; ../_fsadd.c: 206: exp1 += expd; + 0000F2 1F 15 [ 2] 218 ldw (0x15, sp), x + 0000F4 72 FB 0D [ 2] 219 addw x, (0x0d, sp) + 0000F7 1F 0D [ 2] 220 ldw (0x0d, sp), x + 221 ; ../_fsadd.c: 207: mant1 >>= expd; + 0000F9 1E 11 [ 2] 222 ldw x, (0x11, sp) + 0000FB 16 0F [ 2] 223 ldw y, (0x0f, sp) + 0000FD 7B 16 [ 1] 224 ld a, (0x16, sp) + 0000FF 27 06 [ 1] 225 jreq 00256$ + 000101 226 00255$: + 000101 90 57 [ 2] 227 sraw y + 000103 56 [ 2] 228 rrcw x + 000104 4A [ 1] 229 dec a + 000105 26 FA [ 1] 230 jrne 00255$ + 000107 231 00256$: + 000107 1F 11 [ 2] 232 ldw (0x11, sp), x + 000109 17 0F [ 2] 233 ldw (0x0f, sp), y + 00010B 20 12 [ 2] 234 jra 00117$ + 00010D 235 00116$: + 236 ; ../_fsadd.c: 211: mant2 >>= expd; + 00010D 1E 05 [ 2] 237 ldw x, (0x05, sp) + 00010F 16 03 [ 2] 238 ldw y, (0x03, sp) + 000111 7B 16 [ 1] 239 ld a, (0x16, sp) + 000113 27 06 [ 1] 240 jreq 00258$ + 000115 241 00257$: + 000115 90 57 [ 2] 242 sraw y + 000117 56 [ 2] 243 rrcw x + 000118 4A [ 1] 244 dec a + 000119 26 FA [ 1] 245 jrne 00257$ + 00011B 246 00258$: + 00011B 1F 05 [ 2] 247 ldw (0x05, sp), x + 00011D 17 03 [ 2] 248 ldw (0x03, sp), y + 00011F 249 00117$: + 250 ; ../_fsadd.c: 213: mant1 += mant2; + 00011F 16 11 [ 2] 251 ldw y, (0x11, sp) + 000121 72 F9 05 [ 2] 252 addw y, (0x05, sp) + 000124 1E 0F [ 2] 253 ldw x, (0x0f, sp) + 000126 24 01 [ 1] 254 jrnc 00259$ + 000128 5C [ 1] 255 incw x + 000129 256 00259$: + 000129 72 FB 03 [ 2] 257 addw x, (0x03, sp) + 00012C 17 13 [ 2] 258 ldw (0x13, sp), y + 00012E 1F 11 [ 2] 259 ldw (0x11, sp), x + 260 ; ../_fsadd.c: 215: sign = false; + 000130 0F 10 [ 1] 261 clr (0x10, sp) + 262 ; ../_fsadd.c: 217: if (mant1 < 0) + 000132 0D 11 [ 1] 263 tnz (0x11, sp) + 000134 2A 14 [ 1] 264 jrpl 00121$ + 265 ; ../_fsadd.c: 219: mant1 = -mant1; + 000136 16 13 [ 2] 266 ldw y, (0x13, sp) + 000138 90 50 [ 2] 267 negw y + 00013A 1E 11 [ 2] 268 ldw x, (0x11, sp) + 00013C 24 01 [ 1] 269 jrnc 00261$ + 00013E 5C [ 1] 270 incw x + 00013F 271 00261$: + 00013F 50 [ 2] 272 negw x + 000140 17 13 [ 2] 273 ldw (0x13, sp), y + 000142 1F 11 [ 2] 274 ldw (0x11, sp), x + 275 ; ../_fsadd.c: 220: sign = true; + 000144 A6 01 [ 1] 276 ld a, #0x01 + 000146 6B 10 [ 1] 277 ld (0x10, sp), a + 000148 20 0E [ 2] 278 jra 00154$ + 00014A 279 00121$: + 280 ; ../_fsadd.c: 222: else if (!mant1) + 00014A 1E 13 [ 2] 281 ldw x, (0x13, sp) + 00014C 26 0A [ 1] 282 jrne 00154$ + 283 ; ../_fsadd.c: 223: return (0); + 00014E 1E 11 [ 2] 284 ldw x, (0x11, sp) + 000150 26 06 [ 1] 285 jrne 00154$ + 000152 90 5F [ 1] 286 clrw y + 000154 ACs00r02r80 [ 2] 287 jpf 00137$ + 288 ; ../_fsadd.c: 226: while (mant1 < (HIDDEN<<4)) { + 000158 289 00154$: + 000158 16 0D [ 2] 290 ldw y, (0x0d, sp) + 00015A 17 15 [ 2] 291 ldw (0x15, sp), y + 00015C 292 00123$: + 00015C 1E 11 [ 2] 293 ldw x, (0x11, sp) + 00015E A3 08 00 [ 2] 294 cpw x, #0x0800 + 000161 24 0F [ 1] 295 jrnc 00157$ + 296 ; ../_fsadd.c: 227: mant1 <<= 1; + 000163 08 14 [ 1] 297 sll (0x14, sp) + 000165 09 13 [ 1] 298 rlc (0x13, sp) + 000167 09 12 [ 1] 299 rlc (0x12, sp) + 000169 09 11 [ 1] 300 rlc (0x11, sp) + 301 ; ../_fsadd.c: 228: exp1--; + 00016B 1E 15 [ 2] 302 ldw x, (0x15, sp) + 00016D 5A [ 2] 303 decw x + 00016E 1F 15 [ 2] 304 ldw (0x15, sp), x + 000170 20 EA [ 2] 305 jra 00123$ + 306 ; ../_fsadd.c: 232: while (mant1 & 0xf0000000) { + 000172 307 00157$: + 000172 308 00128$: + 000172 7B 11 [ 1] 309 ld a, (0x11, sp) + 000174 A5 F0 [ 1] 310 bcp a, #0xf0 + 000176 27 23 [ 1] 311 jreq 00163$ + 312 ; ../_fsadd.c: 233: if (mant1&1) + 000178 7B 14 [ 1] 313 ld a, (0x14, sp) + 00017A 44 [ 1] 314 srl a + 00017B 24 0F [ 1] 315 jrnc 00127$ + 316 ; ../_fsadd.c: 234: mant1 += 2; + 00017D 1E 13 [ 2] 317 ldw x, (0x13, sp) + 00017F 1C 00 02 [ 2] 318 addw x, #0x0002 + 000182 16 11 [ 2] 319 ldw y, (0x11, sp) + 000184 24 02 [ 1] 320 jrnc 00267$ + 000186 90 5C [ 1] 321 incw y + 000188 322 00267$: + 000188 1F 13 [ 2] 323 ldw (0x13, sp), x + 00018A 17 11 [ 2] 324 ldw (0x11, sp), y + 00018C 325 00127$: + 326 ; ../_fsadd.c: 235: mant1 >>= 1; + 00018C 07 11 [ 1] 327 sra (0x11, sp) + 00018E 06 12 [ 1] 328 rrc (0x12, sp) + 000190 06 13 [ 1] 329 rrc (0x13, sp) + 000192 06 14 [ 1] 330 rrc (0x14, sp) + 331 ; ../_fsadd.c: 236: exp1++; + 000194 1E 15 [ 2] 332 ldw x, (0x15, sp) + 000196 5C [ 1] 333 incw x + 000197 1F 15 [ 2] 334 ldw (0x15, sp), x + 000199 20 D7 [ 2] 335 jra 00128$ + 00019B 336 00163$: + 00019B 16 15 [ 2] 337 ldw y, (0x15, sp) + 00019D 17 0A [ 2] 338 ldw (0x0a, sp), y + 339 ; ../_fsadd.c: 240: mant1 &= ~(HIDDEN<<4); + 00019F 16 13 [ 2] 340 ldw y, (0x13, sp) + 0001A1 17 0E [ 2] 341 ldw (0x0e, sp), y + 0001A3 7B 12 [ 1] 342 ld a, (0x12, sp) + 0001A5 6B 0D [ 1] 343 ld (0x0d, sp), a + 0001A7 7B 11 [ 1] 344 ld a, (0x11, sp) + 0001A9 A4 F7 [ 1] 345 and a, #0xf7 + 0001AB 6B 0C [ 1] 346 ld (0x0c, sp), a + 0001AD 16 0E [ 2] 347 ldw y, (0x0e, sp) + 0001AF 17 13 [ 2] 348 ldw (0x13, sp), y + 0001B1 16 0C [ 2] 349 ldw y, (0x0c, sp) + 0001B3 17 11 [ 2] 350 ldw (0x11, sp), y + 351 ; ../_fsadd.c: 243: if (exp1 >= 0x100) + 0001B5 1E 15 [ 2] 352 ldw x, (0x15, sp) + 0001B7 A3 01 00 [ 2] 353 cpw x, #0x0100 + 0001BA 2F 23 [ 1] 354 jrslt 00135$ + 355 ; ../_fsadd.c: 244: *pfl1 = (sign ? (SIGNBIT | __INFINITY) : __INFINITY); + 0001BC 0D 10 [ 1] 356 tnz (0x10, sp) + 0001BE 27 0A [ 1] 357 jreq 00139$ + 0001C0 5F [ 1] 358 clrw x + 0001C1 1F 15 [ 2] 359 ldw (0x15, sp), x + 0001C3 AE FF 80 [ 2] 360 ldw x, #0xff80 + 0001C6 1F 13 [ 2] 361 ldw (0x13, sp), x + 0001C8 20 08 [ 2] 362 jra 00140$ + 0001CA 363 00139$: + 0001CA 5F [ 1] 364 clrw x + 0001CB 1F 15 [ 2] 365 ldw (0x15, sp), x + 0001CD AE 7F 80 [ 2] 366 ldw x, #0x7f80 + 0001D0 1F 13 [ 2] 367 ldw (0x13, sp), x + 0001D2 368 00140$: + 0001D2 1E 07 [ 2] 369 ldw x, (0x07, sp) + 0001D4 16 15 [ 2] 370 ldw y, (0x15, sp) + 0001D6 EF 02 [ 2] 371 ldw (0x2, x), y + 0001D8 16 13 [ 2] 372 ldw y, (0x13, sp) + 0001DA FF [ 2] 373 ldw (x), y + 0001DB ACs00r02r7C [ 2] 374 jpf 00136$ + 0001DF 375 00135$: + 376 ; ../_fsadd.c: 245: else if (exp1 < 0) + 0001DF 0D 15 [ 1] 377 tnz (0x15, sp) + 0001E1 2A 0D [ 1] 378 jrpl 00132$ + 379 ; ../_fsadd.c: 246: *pfl1 = 0; + 0001E3 1E 07 [ 2] 380 ldw x, (0x07, sp) + 0001E5 6F 03 [ 1] 381 clr (0x3, x) + 0001E7 6F 02 [ 1] 382 clr (0x2, x) + 0001E9 6F 01 [ 1] 383 clr (0x1, x) + 0001EB 7F [ 1] 384 clr (x) + 0001EC ACs00r02r7C [ 2] 385 jpf 00136$ + 0001F0 386 00132$: + 387 ; ../_fsadd.c: 248: *pfl1 = PACK (sign ? SIGNBIT : 0 , exp1, mant1>>4); + 0001F0 0D 10 [ 1] 388 tnz (0x10, sp) + 0001F2 27 0A [ 1] 389 jreq 00141$ + 0001F4 5F [ 1] 390 clrw x + 0001F5 1F 05 [ 2] 391 ldw (0x05, sp), x + 0001F7 AE 80 00 [ 2] 392 ldw x, #0x8000 + 0001FA 1F 03 [ 2] 393 ldw (0x03, sp), x + 0001FC 20 05 [ 2] 394 jra 00142$ + 0001FE 395 00141$: + 0001FE 5F [ 1] 396 clrw x + 0001FF 1F 05 [ 2] 397 ldw (0x05, sp), x + 000201 1F 03 [ 2] 398 ldw (0x03, sp), x + 000203 399 00142$: + 000203 16 0A [ 2] 400 ldw y, (0x0a, sp) + 000205 17 0F [ 2] 401 ldw (0x0f, sp), y + 000207 7B 0F [ 1] 402 ld a, (0x0f, sp) + 000209 49 [ 1] 403 rlc a + 00020A 4F [ 1] 404 clr a + 00020B A2 00 [ 1] 405 sbc a, #0x00 + 00020D 6B 0E [ 1] 406 ld (0x0e, sp), a + 00020F 6B 0D [ 1] 407 ld (0x0d, sp), a + 000211 16 0F [ 2] 408 ldw y, (0x0f, sp) + 000213 17 0D [ 2] 409 ldw (0x0d, sp), y + 000215 5F [ 1] 410 clrw x + 000216 1F 0F [ 2] 411 ldw (0x0f, sp), x + 000218 A6 07 [ 1] 412 ld a, #0x07 + 00021A 413 00273$: + 00021A 08 0E [ 1] 414 sll (0x0e, sp) + 00021C 09 0D [ 1] 415 rlc (0x0d, sp) + 00021E 4A [ 1] 416 dec a + 00021F 26 F9 [ 1] 417 jrne 00273$ + 000221 7B 06 [ 1] 418 ld a, (0x06, sp) + 000223 1A 10 [ 1] 419 or a, (0x10, sp) + 000225 6B 0C [ 1] 420 ld (0x0c, sp), a + 000227 7B 05 [ 1] 421 ld a, (0x05, sp) + 000229 1A 0F [ 1] 422 or a, (0x0f, sp) + 00022B 6B 0B [ 1] 423 ld (0x0b, sp), a + 00022D 7B 04 [ 1] 424 ld a, (0x04, sp) + 00022F 1A 0E [ 1] 425 or a, (0x0e, sp) + 000231 6B 0A [ 1] 426 ld (0x0a, sp), a + 000233 7B 03 [ 1] 427 ld a, (0x03, sp) + 000235 1A 0D [ 1] 428 or a, (0x0d, sp) + 000237 6B 09 [ 1] 429 ld (0x09, sp), a + 000239 16 11 [ 2] 430 ldw y, (0x11, sp) + 00023B 17 03 [ 2] 431 ldw (0x03, sp), y + 00023D 1E 13 [ 2] 432 ldw x, (0x13, sp) + 00023F 07 03 [ 1] 433 sra (0x03, sp) + 000241 06 04 [ 1] 434 rrc (0x04, sp) + 000243 56 [ 2] 435 rrcw x + 000244 07 03 [ 1] 436 sra (0x03, sp) + 000246 06 04 [ 1] 437 rrc (0x04, sp) + 000248 56 [ 2] 438 rrcw x + 000249 07 03 [ 1] 439 sra (0x03, sp) + 00024B 06 04 [ 1] 440 rrc (0x04, sp) + 00024D 56 [ 2] 441 rrcw x + 00024E 07 03 [ 1] 442 sra (0x03, sp) + 000250 06 04 [ 1] 443 rrc (0x04, sp) + 000252 56 [ 2] 444 rrcw x + 000253 1F 05 [ 2] 445 ldw (0x05, sp), x + 000255 1F 15 [ 2] 446 ldw (0x15, sp), x + 000257 16 03 [ 2] 447 ldw y, (0x03, sp) + 000259 17 13 [ 2] 448 ldw (0x13, sp), y + 00025B 7B 0C [ 1] 449 ld a, (0x0c, sp) + 00025D 1A 16 [ 1] 450 or a, (0x16, sp) + 00025F 6B 12 [ 1] 451 ld (0x12, sp), a + 000261 7B 0B [ 1] 452 ld a, (0x0b, sp) + 000263 1A 15 [ 1] 453 or a, (0x15, sp) + 000265 6B 11 [ 1] 454 ld (0x11, sp), a + 000267 7B 0A [ 1] 455 ld a, (0x0a, sp) + 000269 1A 14 [ 1] 456 or a, (0x14, sp) + 00026B 6B 10 [ 1] 457 ld (0x10, sp), a + 00026D 7B 09 [ 1] 458 ld a, (0x09, sp) + 00026F 1A 13 [ 1] 459 or a, (0x13, sp) + 000271 6B 0F [ 1] 460 ld (0x0f, sp), a + 000273 1E 07 [ 2] 461 ldw x, (0x07, sp) + 000275 16 11 [ 2] 462 ldw y, (0x11, sp) + 000277 EF 02 [ 2] 463 ldw (0x2, x), y + 000279 16 0F [ 2] 464 ldw y, (0x0f, sp) + 00027B FF [ 2] 465 ldw (x), y + 00027C 466 00136$: + 467 ; ../_fsadd.c: 249: return (a1); + 00027C 1E 1C [ 2] 468 ldw x, (0x1c, sp) + 00027E 16 1A [ 2] 469 ldw y, (0x1a, sp) + 000280 470 00137$: + 471 ; ../_fsadd.c: 250: } + 000280 5B 16 [ 2] 472 addw sp, #22 + 000282 87 [ 5] 473 retf + 474 .area CODE + 475 .area CONST + 476 .area INITIALIZER + 477 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fsadd.rel b/device/lib/stm8-large/_fsadd.rel new file mode 100644 index 0000000..881e79a --- /dev/null +++ b/device/lib/stm8-large/_fsadd.rel @@ -0,0 +1,223 @@ +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 283 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 1E 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 0C 1E 0F 26 08 1E 1C 16 1A AC +R 00 00 00 09 +T 00 00 58 00 02 80 +R 00 00 00 09 80 03 00 09 +T 00 00 5B +R 00 00 00 09 +T 00 00 5B 96 1C 00 1A 1F 07 90 93 90 EE 02 17 0B +R 00 00 00 09 +T 00 00 68 FE 1F 09 16 0B 17 15 16 09 17 13 93 A6 +R 00 00 00 09 +T 00 00 75 80 62 4F 95 1F 0D 16 0B 7B 0A A4 7F 95 +R 00 00 00 09 +T 00 00 82 4F 97 58 99 56 5E A6 04 +R 00 00 00 09 +T 00 00 8A +R 00 00 00 09 +T 00 00 8A 90 58 59 4A 26 FA 17 11 1F 0F 0D 13 2A +R 00 00 00 09 +T 00 00 97 20 0D 09 2A 1C 7B 12 40 6B 16 4F 12 11 +R 00 00 00 09 +T 00 00 A4 6B 15 4F 12 10 6B 14 4F 12 0F 6B 0F 16 +R 00 00 00 09 +T 00 00 B1 15 17 11 7B 14 6B 10 +R 00 00 00 09 +T 00 00 B8 +R 00 00 00 09 +T 00 00 B8 1E 0B 26 0C 1E 09 26 08 1E 20 16 1E AC +R 00 00 00 09 +T 00 00 C5 00 02 80 +R 00 00 00 09 80 03 00 09 +T 00 00 C8 +R 00 00 00 09 +T 00 00 C8 1E 0D 72 F0 01 1F 15 A3 00 19 2D 08 1E +R 00 00 00 09 +T 00 00 D5 1C 16 1A AC 00 02 80 +R 00 00 00 09 80 07 00 09 +T 00 00 DC +R 00 00 00 09 +T 00 00 DC 1E 15 A3 FF E7 2E 08 1E 20 16 1E AC +R 00 00 00 09 +T 00 00 E8 00 02 80 +R 00 00 00 09 80 03 00 09 +T 00 00 EB +R 00 00 00 09 +T 00 00 EB 0D 15 2A 1E 1E 15 50 1F 15 72 FB 0D 1F +R 00 00 00 09 +T 00 00 F8 0D 1E 11 16 0F 7B 16 27 06 +R 00 00 00 09 +T 00 01 01 +R 00 00 00 09 +T 00 01 01 90 57 56 4A 26 FA +R 00 00 00 09 +T 00 01 07 +R 00 00 00 09 +T 00 01 07 1F 11 17 0F 20 12 +R 00 00 00 09 +T 00 01 0D +R 00 00 00 09 +T 00 01 0D 1E 05 16 03 7B 16 27 06 +R 00 00 00 09 +T 00 01 15 +R 00 00 00 09 +T 00 01 15 90 57 56 4A 26 FA +R 00 00 00 09 +T 00 01 1B +R 00 00 00 09 +T 00 01 1B 1F 05 17 03 +R 00 00 00 09 +T 00 01 1F +R 00 00 00 09 +T 00 01 1F 16 11 72 F9 05 1E 0F 24 01 5C +R 00 00 00 09 +T 00 01 29 +R 00 00 00 09 +T 00 01 29 72 FB 03 17 13 1F 11 0F 10 0D 11 2A 14 +R 00 00 00 09 +T 00 01 36 16 13 90 50 1E 11 24 01 5C +R 00 00 00 09 +T 00 01 3F +R 00 00 00 09 +T 00 01 3F 50 17 13 1F 11 A6 01 6B 10 20 0E +R 00 00 00 09 +T 00 01 4A +R 00 00 00 09 +T 00 01 4A 1E 13 26 0A 1E 11 26 06 90 5F AC +R 00 00 00 09 +T 00 01 55 00 02 80 +R 00 00 00 09 80 03 00 09 +T 00 01 58 +R 00 00 00 09 +T 00 01 58 16 0D 17 15 +R 00 00 00 09 +T 00 01 5C +R 00 00 00 09 +T 00 01 5C 1E 11 A3 08 00 24 0F 08 14 09 13 09 12 +R 00 00 00 09 +T 00 01 69 09 11 1E 15 5A 1F 15 20 EA +R 00 00 00 09 +T 00 01 72 +R 00 00 00 09 +T 00 01 72 +R 00 00 00 09 +T 00 01 72 7B 11 A5 F0 27 23 7B 14 44 24 0F 1E 13 +R 00 00 00 09 +T 00 01 7F 1C 00 02 16 11 24 02 90 5C +R 00 00 00 09 +T 00 01 88 +R 00 00 00 09 +T 00 01 88 1F 13 17 11 +R 00 00 00 09 +T 00 01 8C +R 00 00 00 09 +T 00 01 8C 07 11 06 12 06 13 06 14 1E 15 5C 1F 15 +R 00 00 00 09 +T 00 01 99 20 D7 +R 00 00 00 09 +T 00 01 9B +R 00 00 00 09 +T 00 01 9B 16 15 17 0A 16 13 17 0E 7B 12 6B 0D 7B +R 00 00 00 09 +T 00 01 A8 11 A4 F7 6B 0C 16 0E 17 13 16 0C 17 11 +R 00 00 00 09 +T 00 01 B5 1E 15 A3 01 00 2F 23 0D 10 27 0A 5F 1F +R 00 00 00 09 +T 00 01 C2 15 AE FF 80 1F 13 20 08 +R 00 00 00 09 +T 00 01 CA +R 00 00 00 09 +T 00 01 CA 5F 1F 15 AE 7F 80 1F 13 +R 00 00 00 09 +T 00 01 D2 +R 00 00 00 09 +T 00 01 D2 1E 07 16 15 EF 02 16 13 FF AC +R 00 00 00 09 +T 00 01 DC 00 02 7C +R 00 00 00 09 80 03 00 09 +T 00 01 DF +R 00 00 00 09 +T 00 01 DF 0D 15 2A 0D 1E 07 6F 03 6F 02 6F 01 7F +R 00 00 00 09 +T 00 01 EC AC 00 02 7C +R 00 00 00 09 80 04 00 09 +T 00 01 F0 +R 00 00 00 09 +T 00 01 F0 0D 10 27 0A 5F 1F 05 AE 80 00 1F 03 20 +R 00 00 00 09 +T 00 01 FD 05 +R 00 00 00 09 +T 00 01 FE +R 00 00 00 09 +T 00 01 FE 5F 1F 05 1F 03 +R 00 00 00 09 +T 00 02 03 +R 00 00 00 09 +T 00 02 03 16 0A 17 0F 7B 0F 49 4F A2 00 6B 0E 6B +R 00 00 00 09 +T 00 02 10 0D 16 0F 17 0D 5F 1F 0F A6 07 +R 00 00 00 09 +T 00 02 1A +R 00 00 00 09 +T 00 02 1A 08 0E 09 0D 4A 26 F9 7B 06 1A 10 6B 0C +R 00 00 00 09 +T 00 02 27 7B 05 1A 0F 6B 0B 7B 04 1A 0E 6B 0A 7B +R 00 00 00 09 +T 00 02 34 03 1A 0D 6B 09 16 11 17 03 1E 13 07 03 +R 00 00 00 09 +T 00 02 41 06 04 56 07 03 06 04 56 07 03 06 04 56 +R 00 00 00 09 +T 00 02 4E 07 03 06 04 56 1F 05 1F 15 16 03 17 13 +R 00 00 00 09 +T 00 02 5B 7B 0C 1A 16 6B 12 7B 0B 1A 15 6B 11 7B +R 00 00 00 09 +T 00 02 68 0A 1A 14 6B 10 7B 09 1A 13 6B 0F 1E 07 +R 00 00 00 09 +T 00 02 75 16 11 EF 02 16 0F FF +R 00 00 00 09 +T 00 02 7C +R 00 00 00 09 +T 00 02 7C 1E 1C 16 1A +R 00 00 00 09 +T 00 02 80 +R 00 00 00 09 +T 00 02 80 5B 16 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fsadd.sym b/device/lib/stm8-large/_fsadd.sym new file mode 100644 index 0000000..6ca5e69 --- /dev/null +++ b/device/lib/stm8-large/_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 283 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fsdiv.asm b/device/lib/stm8-large/_fsdiv.asm new file mode 100644 index 0000000..4aec8ef --- /dev/null +++ b/device/lib/stm8-large/_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, (0x28, sp) + ldw (0x03, sp), y + ldw y, (0x26, sp) + ldw (0x01, sp), y +; ../_fsdiv.c: 284: fl2.f = a2; + ldw y, (0x2c, sp) + ldw (0x07, sp), y + ldw y, (0x2a, 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 (0x15, sp), x + 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 (0x12, sp), a +; ../_fsdiv.c: 295: if (!fl2.l) + ldw y, (0x07, sp) + ldw (0x15, sp), y + ldw y, (0x05, sp) + ldw (0x13, sp), y + ldw x, (0x15, sp) + jrne 00102$ +; ../_fsdiv.c: 297: fl2.l = 0x7FC00000; + ldw x, (0x13, 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) + jpf 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 + jpf 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 (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 (0x12, 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 (0x12, 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 + retf +; ../_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, (0x10, sp) + jrne 00110$ + ldw x, (0x0e, sp) + sllw x + jrne 00110$ + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + clrw x + pushw x + clrw x + pushw x + callf ___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, (0x10, sp) + jrne 00106$ + ldw x, (0x0e, sp) + sllw x + jrne 00106$ + clrw x + pushw x + clrw x + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + callf ___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, (0x10, sp) + jrne 00102$ + ldw x, (0x0e, sp) + sllw x + jrne 00102$ + ldw x, (0x0c, sp) + jrne 00102$ + ldw x, (0x0a, 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, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fsdiv.lst b/device/lib/stm8-large/_fsdiv.lst new file mode 100644 index 0000000..2b9847e --- /dev/null +++ b/device/lib/stm8-large/_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 28 [ 2] 56 ldw y, (0x28, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 26 [ 2] 58 ldw y, (0x26, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fsdiv.c: 284: fl2.f = a2; + 00000A 16 2C [ 2] 61 ldw y, (0x2c, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 2A [ 2] 63 ldw y, (0x2a, 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 15 [ 2] 84 ldw (0x15, sp), x + 000031 1F 0D [ 2] 85 ldw (0x0d, sp), x + 86 ; ../_fsdiv.c: 292: sign = SIGN (fl1.l) ^ SIGN (fl2.l); + 000033 1E 01 [ 2] 87 ldw x, (0x01, sp) + 000035 58 [ 2] 88 sllw x + 000036 4F [ 1] 89 clr a + 000037 49 [ 1] 90 rlc a + 000038 6B 16 [ 1] 91 ld (0x16, sp), a + 00003A 1E 05 [ 2] 92 ldw x, (0x05, sp) + 00003C 58 [ 2] 93 sllw x + 00003D 4F [ 1] 94 clr a + 00003E 49 [ 1] 95 rlc a + 00003F 18 16 [ 1] 96 xor a, (0x16, sp) + 000041 6B 12 [ 1] 97 ld (0x12, sp), a + 98 ; ../_fsdiv.c: 295: if (!fl2.l) + 000043 16 07 [ 2] 99 ldw y, (0x07, sp) + 000045 17 15 [ 2] 100 ldw (0x15, sp), y + 000047 16 05 [ 2] 101 ldw y, (0x05, sp) + 000049 17 13 [ 2] 102 ldw (0x13, sp), y + 00004B 1E 15 [ 2] 103 ldw x, (0x15, sp) + 00004D 26 13 [ 1] 104 jrne 00102$ + 105 ; ../_fsdiv.c: 297: fl2.l = 0x7FC00000; + 00004F 1E 13 [ 2] 106 ldw x, (0x13, sp) + 000051 26 0F [ 1] 107 jrne 00102$ + 000053 1F 07 [ 2] 108 ldw (0x07, sp), x + 000055 AE 7F C0 [ 2] 109 ldw x, #0x7fc0 + 000058 1F 05 [ 2] 110 ldw (0x05, sp), x + 111 ; ../_fsdiv.c: 298: return (fl2.f); + 00005A 1E 07 [ 2] 112 ldw x, (0x07, sp) + 00005C 16 05 [ 2] 113 ldw y, (0x05, sp) + 00005E ACs00r01rD8 [ 2] 114 jpf 00118$ + 000062 115 00102$: + 116 ; ../_fsdiv.c: 302: if (!fl1.l) + 000062 1E 03 [ 2] 117 ldw x, (0x03, sp) + 000064 16 01 [ 2] 118 ldw y, (0x01, sp) + 000066 5D [ 2] 119 tnzw x + 000067 26 0B [ 1] 120 jrne 00104$ + 000069 90 5D [ 2] 121 tnzw y + 00006B 26 07 [ 1] 122 jrne 00104$ + 123 ; ../_fsdiv.c: 303: return (0); + 00006D 5F [ 1] 124 clrw x + 00006E 90 5F [ 1] 125 clrw y + 000070 ACs00r01rD8 [ 2] 126 jpf 00118$ + 000074 127 00104$: + 128 ; ../_fsdiv.c: 306: mant1 = MANT (fl1.l); + 000074 16 03 [ 2] 129 ldw y, (0x03, sp) + 000076 1E 01 [ 2] 130 ldw x, (0x01, sp) + 000078 9F [ 1] 131 ld a, xl + 000079 A4 7F [ 1] 132 and a, #0x7f + 00007B 97 [ 1] 133 ld xl, a + 00007C 4F [ 1] 134 clr a + 00007D 01 [ 1] 135 rrwa x + 00007E AA 80 [ 1] 136 or a, #0x80 + 000080 97 [ 1] 137 ld xl, a + 000081 17 21 [ 2] 138 ldw (0x21, sp), y + 000083 1F 1F [ 2] 139 ldw (0x1f, sp), x + 140 ; ../_fsdiv.c: 307: mant2 = MANT (fl2.l); + 000085 16 07 [ 2] 141 ldw y, (0x07, sp) + 000087 1E 05 [ 2] 142 ldw x, (0x05, sp) + 000089 9F [ 1] 143 ld a, xl + 00008A A4 7F [ 1] 144 and a, #0x7f + 00008C 97 [ 1] 145 ld xl, a + 00008D 4F [ 1] 146 clr a + 00008E 01 [ 1] 147 rrwa x + 00008F AA 80 [ 1] 148 or a, #0x80 + 000091 97 [ 1] 149 ld xl, a + 000092 17 0B [ 2] 150 ldw (0x0b, sp), y + 000094 1F 09 [ 2] 151 ldw (0x09, sp), x + 152 ; ../_fsdiv.c: 310: if (mant1 < mant2) + 000096 1E 21 [ 2] 153 ldw x, (0x21, sp) + 000098 13 0B [ 2] 154 cpw x, (0x0b, sp) + 00009A 7B 20 [ 1] 155 ld a, (0x20, sp) + 00009C 12 0A [ 1] 156 sbc a, (0x0a, sp) + 00009E 7B 1F [ 1] 157 ld a, (0x1f, sp) + 0000A0 12 09 [ 1] 158 sbc a, (0x09, sp) + 0000A2 2E 0D [ 1] 159 jrsge 00106$ + 160 ; ../_fsdiv.c: 312: mant1 <<= 1; + 0000A4 08 22 [ 1] 161 sll (0x22, sp) + 0000A6 09 21 [ 1] 162 rlc (0x21, sp) + 0000A8 09 20 [ 1] 163 rlc (0x20, sp) + 0000AA 09 1F [ 1] 164 rlc (0x1f, sp) + 165 ; ../_fsdiv.c: 313: exp--; + 0000AC 1E 0D [ 2] 166 ldw x, (0x0d, sp) + 0000AE 5A [ 2] 167 decw x + 0000AF 1F 0D [ 2] 168 ldw (0x0d, sp), x + 0000B1 169 00106$: + 170 ; ../_fsdiv.c: 317: mask = 0x1000000; + 0000B1 5F [ 1] 171 clrw x + 0000B2 1F 1D [ 2] 172 ldw (0x1d, sp), x + 0000B4 AE 01 00 [ 2] 173 ldw x, #0x0100 + 0000B7 1F 1B [ 2] 174 ldw (0x1b, sp), x + 175 ; ../_fsdiv.c: 318: result = 0; + 0000B9 5F [ 1] 176 clrw x + 0000BA 1F 19 [ 2] 177 ldw (0x19, sp), x + 0000BC 1F 17 [ 2] 178 ldw (0x17, sp), x + 179 ; ../_fsdiv.c: 319: while (mask) + 0000BE 180 00109$: + 0000BE 1E 1D [ 2] 181 ldw x, (0x1d, sp) + 0000C0 26 04 [ 1] 182 jrne 00179$ + 0000C2 1E 1B [ 2] 183 ldw x, (0x1b, sp) + 0000C4 27 4C [ 1] 184 jreq 00111$ + 0000C6 185 00179$: + 186 ; ../_fsdiv.c: 321: if (mant1 >= mant2) + 0000C6 1E 21 [ 2] 187 ldw x, (0x21, sp) + 0000C8 13 0B [ 2] 188 cpw x, (0x0b, sp) + 0000CA 7B 20 [ 1] 189 ld a, (0x20, sp) + 0000CC 12 0A [ 1] 190 sbc a, (0x0a, sp) + 0000CE 7B 1F [ 1] 191 ld a, (0x1f, sp) + 0000D0 12 09 [ 1] 192 sbc a, (0x09, sp) + 0000D2 2F 2C [ 1] 193 jrslt 00108$ + 194 ; ../_fsdiv.c: 323: result |= mask; + 0000D4 1E 19 [ 2] 195 ldw x, (0x19, sp) + 0000D6 16 17 [ 2] 196 ldw y, (0x17, sp) + 0000D8 9F [ 1] 197 ld a, xl + 0000D9 1A 1E [ 1] 198 or a, (0x1e, sp) + 0000DB 02 [ 1] 199 rlwa x + 0000DC 1A 1D [ 1] 200 or a, (0x1d, sp) + 0000DE 95 [ 1] 201 ld xh, a + 0000DF 90 9F [ 1] 202 ld a, yl + 0000E1 1A 1C [ 1] 203 or a, (0x1c, sp) + 0000E3 90 02 [ 1] 204 rlwa y + 0000E5 1A 1B [ 1] 205 or a, (0x1b, sp) + 0000E7 90 95 [ 1] 206 ld yh, a + 0000E9 1F 19 [ 2] 207 ldw (0x19, sp), x + 0000EB 17 17 [ 2] 208 ldw (0x17, sp), y + 209 ; ../_fsdiv.c: 324: mant1 -= mant2; + 0000ED 16 21 [ 2] 210 ldw y, (0x21, sp) + 0000EF 72 F2 0B [ 2] 211 subw y, (0x0b, sp) + 0000F2 7B 20 [ 1] 212 ld a, (0x20, sp) + 0000F4 12 0A [ 1] 213 sbc a, (0x0a, sp) + 0000F6 97 [ 1] 214 ld xl, a + 0000F7 7B 1F [ 1] 215 ld a, (0x1f, sp) + 0000F9 12 09 [ 1] 216 sbc a, (0x09, sp) + 0000FB 95 [ 1] 217 ld xh, a + 0000FC 17 21 [ 2] 218 ldw (0x21, sp), y + 0000FE 1F 1F [ 2] 219 ldw (0x1f, sp), x + 000100 220 00108$: + 221 ; ../_fsdiv.c: 326: mant1 <<= 1; + 000100 08 22 [ 1] 222 sll (0x22, sp) + 000102 09 21 [ 1] 223 rlc (0x21, sp) + 000104 09 20 [ 1] 224 rlc (0x20, sp) + 000106 09 1F [ 1] 225 rlc (0x1f, sp) + 226 ; ../_fsdiv.c: 327: mask >>= 1; + 000108 04 1B [ 1] 227 srl (0x1b, sp) + 00010A 06 1C [ 1] 228 rrc (0x1c, sp) + 00010C 06 1D [ 1] 229 rrc (0x1d, sp) + 00010E 06 1E [ 1] 230 rrc (0x1e, sp) + 000110 20 AC [ 2] 231 jra 00109$ + 000112 232 00111$: + 233 ; ../_fsdiv.c: 331: result += 1; + 000112 1E 19 [ 2] 234 ldw x, (0x19, sp) + 000114 1C 00 01 [ 2] 235 addw x, #0x0001 + 000117 16 17 [ 2] 236 ldw y, (0x17, sp) + 000119 24 02 [ 1] 237 jrnc 00181$ + 00011B 90 5C [ 1] 238 incw y + 00011D 239 00181$: + 00011D 1F 19 [ 2] 240 ldw (0x19, sp), x + 00011F 17 17 [ 2] 241 ldw (0x17, sp), y + 242 ; ../_fsdiv.c: 334: exp++; + 000121 1E 0D [ 2] 243 ldw x, (0x0d, sp) + 000123 5C [ 1] 244 incw x + 000124 1F 0D [ 2] 245 ldw (0x0d, sp), x + 246 ; ../_fsdiv.c: 335: result >>= 1; + 000126 07 17 [ 1] 247 sra (0x17, sp) + 000128 06 18 [ 1] 248 rrc (0x18, sp) + 00012A 06 19 [ 1] 249 rrc (0x19, sp) + 00012C 06 1A [ 1] 250 rrc (0x1a, sp) + 251 ; ../_fsdiv.c: 337: result &= ~HIDDEN; + 00012E 16 19 [ 2] 252 ldw y, (0x19, sp) + 000130 7B 18 [ 1] 253 ld a, (0x18, sp) + 000132 A4 7F [ 1] 254 and a, #0x7f + 000134 97 [ 1] 255 ld xl, a + 000135 7B 17 [ 1] 256 ld a, (0x17, sp) + 000137 95 [ 1] 257 ld xh, a + 000138 17 19 [ 2] 258 ldw (0x19, sp), y + 00013A 1F 17 [ 2] 259 ldw (0x17, sp), x + 260 ; ../_fsdiv.c: 340: if (exp >= 0x100) + 00013C 1E 0D [ 2] 261 ldw x, (0x0d, sp) + 00013E A3 01 00 [ 2] 262 cpw x, #0x0100 + 000141 2F 29 [ 1] 263 jrslt 00116$ + 264 ; ../_fsdiv.c: 341: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY; + 000143 0D 12 [ 1] 265 tnz (0x12, sp) + 000145 27 09 [ 1] 266 jreq 00120$ + 000147 5F [ 1] 267 clrw x + 000148 1F 15 [ 2] 268 ldw (0x15, sp), x + 00014A 0F 14 [ 1] 269 clr (0x14, sp) + 00014C A6 80 [ 1] 270 ld a, #0x80 + 00014E 20 06 [ 2] 271 jra 00121$ + 000150 272 00120$: + 000150 5F [ 1] 273 clrw x + 000151 1F 15 [ 2] 274 ldw (0x15, sp), x + 000153 0F 14 [ 1] 275 clr (0x14, sp) + 000155 4F [ 1] 276 clr a + 000156 277 00121$: + 000156 AA 7F [ 1] 278 or a, #0x7f + 000158 90 95 [ 1] 279 ld yh, a + 00015A 7B 16 [ 1] 280 ld a, (0x16, sp) + 00015C 97 [ 1] 281 ld xl, a + 00015D 7B 15 [ 1] 282 ld a, (0x15, sp) + 00015F 95 [ 1] 283 ld xh, a + 000160 7B 14 [ 1] 284 ld a, (0x14, sp) + 000162 AA 80 [ 1] 285 or a, #0x80 + 000164 90 97 [ 1] 286 ld yl, a + 000166 1F 03 [ 2] 287 ldw (0x03, sp), x + 000168 17 01 [ 2] 288 ldw (0x01, sp), y + 00016A 20 68 [ 2] 289 jra 00117$ + 00016C 290 00116$: + 291 ; ../_fsdiv.c: 342: else if (exp < 0) + 00016C 0D 0D [ 1] 292 tnz (0x0d, sp) + 00016E 2A 07 [ 1] 293 jrpl 00113$ + 294 ; ../_fsdiv.c: 343: fl1.l = 0; + 000170 5F [ 1] 295 clrw x + 000171 1F 03 [ 2] 296 ldw (0x03, sp), x + 000173 1F 01 [ 2] 297 ldw (0x01, sp), x + 000175 20 5D [ 2] 298 jra 00117$ + 000177 299 00113$: + 300 ; ../_fsdiv.c: 345: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result); + 000177 0D 12 [ 1] 301 tnz (0x12, sp) + 000179 27 0A [ 1] 302 jreq 00122$ + 00017B 5F [ 1] 303 clrw x + 00017C 1F 15 [ 2] 304 ldw (0x15, sp), x + 00017E AE 80 00 [ 2] 305 ldw x, #0x8000 + 000181 1F 13 [ 2] 306 ldw (0x13, sp), x + 000183 20 05 [ 2] 307 jra 00123$ + 000185 308 00122$: + 000185 5F [ 1] 309 clrw x + 000186 1F 15 [ 2] 310 ldw (0x15, sp), x + 000188 1F 13 [ 2] 311 ldw (0x13, sp), x + 00018A 312 00123$: + 00018A 16 0D [ 2] 313 ldw y, (0x0d, sp) + 00018C 5F [ 1] 314 clrw x + 00018D 90 5D [ 2] 315 tnzw y + 00018F 2A 01 [ 1] 316 jrpl 00186$ + 000191 5A [ 2] 317 decw x + 000192 318 00186$: + 000192 5F [ 1] 319 clrw x + 000193 A6 07 [ 1] 320 ld a, #0x07 + 000195 321 00187$: + 000195 90 58 [ 2] 322 sllw y + 000197 4A [ 1] 323 dec a + 000198 26 FB [ 1] 324 jrne 00187$ + 00019A 9F [ 1] 325 ld a, xl + 00019B 1A 16 [ 1] 326 or a, (0x16, sp) + 00019D 6B 12 [ 1] 327 ld (0x12, sp), a + 00019F 9E [ 1] 328 ld a, xh + 0001A0 1A 15 [ 1] 329 or a, (0x15, sp) + 0001A2 6B 11 [ 1] 330 ld (0x11, sp), a + 0001A4 90 9F [ 1] 331 ld a, yl + 0001A6 1A 14 [ 1] 332 or a, (0x14, sp) + 0001A8 6B 10 [ 1] 333 ld (0x10, sp), a + 0001AA 90 9E [ 1] 334 ld a, yh + 0001AC 1A 13 [ 1] 335 or a, (0x13, sp) + 0001AE 16 19 [ 2] 336 ldw y, (0x19, sp) + 0001B0 17 15 [ 2] 337 ldw (0x15, sp), y + 0001B2 16 17 [ 2] 338 ldw y, (0x17, sp) + 0001B4 90 89 [ 2] 339 pushw y + 0001B6 1A 01 [ 1] 340 or a, (1, sp) + 0001B8 90 85 [ 2] 341 popw y + 0001BA 90 95 [ 1] 342 ld yh, a + 0001BC 7B 12 [ 1] 343 ld a, (0x12, sp) + 0001BE 1A 16 [ 1] 344 or a, (0x16, sp) + 0001C0 97 [ 1] 345 ld xl, a + 0001C1 7B 11 [ 1] 346 ld a, (0x11, sp) + 0001C3 1A 15 [ 1] 347 or a, (0x15, sp) + 0001C5 95 [ 1] 348 ld xh, a + 0001C6 90 89 [ 2] 349 pushw y + 0001C8 7B 12 [ 1] 350 ld a, (0x12, sp) + 0001CA 1A 02 [ 1] 351 or a, (2, sp) + 0001CC 90 85 [ 2] 352 popw y + 0001CE 90 97 [ 1] 353 ld yl, a + 0001D0 1F 03 [ 2] 354 ldw (0x03, sp), x + 0001D2 17 01 [ 2] 355 ldw (0x01, sp), y + 0001D4 356 00117$: + 357 ; ../_fsdiv.c: 346: return (fl1.f); + 0001D4 1E 03 [ 2] 358 ldw x, (0x03, sp) + 0001D6 16 01 [ 2] 359 ldw y, (0x01, sp) + 0001D8 360 00118$: + 361 ; ../_fsdiv.c: 347: } + 0001D8 5B 22 [ 2] 362 addw sp, #34 + 0001DA 87 [ 5] 363 retf + 364 ; ../_fsdiv.c: 349: float __fsdiv (float a1, float a2) + 365 ; ----------------------------------------- + 366 ; function __fsdiv + 367 ; ----------------------------------------- + 0001DB 368 ___fsdiv: + 0001DB 52 06 [ 2] 369 sub sp, #6 + 370 ; ../_fsdiv.c: 352: unsigned long *p = (unsigned long *) &f; + 0001DD 96 [ 1] 371 ldw x, sp + 0001DE 5C [ 1] 372 incw x + 0001DF 1F 05 [ 2] 373 ldw (0x05, sp), x + 374 ; ../_fsdiv.c: 354: if (a2 == 0.0f && a1 > 0.0f) + 0001E1 1E 10 [ 2] 375 ldw x, (0x10, sp) + 0001E3 26 25 [ 1] 376 jrne 00110$ + 0001E5 1E 0E [ 2] 377 ldw x, (0x0e, sp) + 0001E7 58 [ 2] 378 sllw x + 0001E8 26 20 [ 1] 379 jrne 00110$ + 0001EA 1E 0C [ 2] 380 ldw x, (0x0c, sp) + 0001EC 89 [ 2] 381 pushw x + 0001ED 1E 0C [ 2] 382 ldw x, (0x0c, sp) + 0001EF 89 [ 2] 383 pushw x + 0001F0 5F [ 1] 384 clrw x + 0001F1 89 [ 2] 385 pushw x + 0001F2 5F [ 1] 386 clrw x + 0001F3 89 [ 2] 387 pushw x + 0001F4 8Ds00r00r00 [ 5] 388 callf ___fslt + 0001F8 5B 08 [ 2] 389 addw sp, #8 + 0001FA 4D [ 1] 390 tnz a + 0001FB 27 0D [ 1] 391 jreq 00110$ + 392 ; ../_fsdiv.c: 355: *p = 0x7f800000; // inf + 0001FD 1E 05 [ 2] 393 ldw x, (0x05, sp) + 0001FF 6F 03 [ 1] 394 clr (0x3, x) + 000201 6F 02 [ 1] 395 clr (0x2, x) + 000203 90 AE 7F 80 [ 2] 396 ldw y, #0x7f80 + 000207 FF [ 2] 397 ldw (x), y + 000208 20 5E [ 2] 398 jra 00111$ + 00020A 399 00110$: + 400 ; ../_fsdiv.c: 356: else if (a2 == 0.0f && a1 < 0.0f) + 00020A 1E 10 [ 2] 401 ldw x, (0x10, sp) + 00020C 26 25 [ 1] 402 jrne 00106$ + 00020E 1E 0E [ 2] 403 ldw x, (0x0e, sp) + 000210 58 [ 2] 404 sllw x + 000211 26 20 [ 1] 405 jrne 00106$ + 000213 5F [ 1] 406 clrw x + 000214 89 [ 2] 407 pushw x + 000215 5F [ 1] 408 clrw x + 000216 89 [ 2] 409 pushw x + 000217 1E 10 [ 2] 410 ldw x, (0x10, sp) + 000219 89 [ 2] 411 pushw x + 00021A 1E 10 [ 2] 412 ldw x, (0x10, sp) + 00021C 89 [ 2] 413 pushw x + 00021D 8Ds00r00r00 [ 5] 414 callf ___fslt + 000221 5B 08 [ 2] 415 addw sp, #8 + 000223 4D [ 1] 416 tnz a + 000224 27 0D [ 1] 417 jreq 00106$ + 418 ; ../_fsdiv.c: 357: *p = 0xff800000; // -inf + 000226 1E 05 [ 2] 419 ldw x, (0x05, sp) + 000228 6F 03 [ 1] 420 clr (0x3, x) + 00022A 6F 02 [ 1] 421 clr (0x2, x) + 00022C 90 AE FF 80 [ 2] 422 ldw y, #0xff80 + 000230 FF [ 2] 423 ldw (x), y + 000231 20 35 [ 2] 424 jra 00111$ + 000233 425 00106$: + 426 ; ../_fsdiv.c: 358: else if (a2 == 0.0f && a1 == 0.0f) + 000233 1E 10 [ 2] 427 ldw x, (0x10, sp) + 000235 26 1B [ 1] 428 jrne 00102$ + 000237 1E 0E [ 2] 429 ldw x, (0x0e, sp) + 000239 58 [ 2] 430 sllw x + 00023A 26 16 [ 1] 431 jrne 00102$ + 00023C 1E 0C [ 2] 432 ldw x, (0x0c, sp) + 00023E 26 12 [ 1] 433 jrne 00102$ + 000240 1E 0A [ 2] 434 ldw x, (0x0a, sp) + 000242 58 [ 2] 435 sllw x + 000243 26 0D [ 1] 436 jrne 00102$ + 437 ; ../_fsdiv.c: 359: *p = 0xffc00000; // nan + 000245 1E 05 [ 2] 438 ldw x, (0x05, sp) + 000247 6F 03 [ 1] 439 clr (0x3, x) + 000249 6F 02 [ 1] 440 clr (0x2, x) + 00024B 90 AE FF C0 [ 2] 441 ldw y, #0xffc0 + 00024F FF [ 2] 442 ldw (x), y + 000250 20 16 [ 2] 443 jra 00111$ + 000252 444 00102$: + 445 ; ../_fsdiv.c: 361: f = __fsdiv_org (a1, a2); + 000252 1E 10 [ 2] 446 ldw x, (0x10, sp) + 000254 89 [ 2] 447 pushw x + 000255 1E 10 [ 2] 448 ldw x, (0x10, sp) + 000257 89 [ 2] 449 pushw x + 000258 1E 10 [ 2] 450 ldw x, (0x10, sp) + 00025A 89 [ 2] 451 pushw x + 00025B 1E 10 [ 2] 452 ldw x, (0x10, sp) + 00025D 89 [ 2] 453 pushw x + 00025E 8Ds00r00r00 [ 5] 454 callf ___fsdiv_org + 000262 5B 08 [ 2] 455 addw sp, #8 + 000264 1F 03 [ 2] 456 ldw (0x03, sp), x + 000266 17 01 [ 2] 457 ldw (0x01, sp), y + 000268 458 00111$: + 459 ; ../_fsdiv.c: 363: return f; + 000268 1E 03 [ 2] 460 ldw x, (0x03, sp) + 00026A 16 01 [ 2] 461 ldw y, (0x01, sp) + 462 ; ../_fsdiv.c: 364: } + 00026C 5B 06 [ 2] 463 addw sp, #6 + 00026E 87 [ 5] 464 retf + 465 .area CODE + 466 .area CONST + 467 .area INITIALIZER + 468 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fsdiv.rel b/device/lib/stm8-large/_fsdiv.rel new file mode 100644 index 0000000..8f33887 --- /dev/null +++ b/device/lib/stm8-large/_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 26F flags 0 addr 0 +S ___fsdiv Def0001DB +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 22 16 28 17 03 16 26 17 01 16 2C 17 +R 00 00 00 09 +T 00 00 0D 07 16 2A 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 15 1F 0D 1E +R 00 00 00 09 +T 00 00 34 01 58 4F 49 6B 16 1E 05 58 4F 49 18 16 +R 00 00 00 09 +T 00 00 41 6B 12 16 07 17 15 16 05 17 13 1E 15 26 +R 00 00 00 09 +T 00 00 4E 13 1E 13 26 0F 1F 07 AE 7F C0 1F 05 1E +R 00 00 00 09 +T 00 00 5B 07 16 05 AC 00 01 D8 +R 00 00 00 09 80 07 00 09 +T 00 00 62 +R 00 00 00 09 +T 00 00 62 1E 03 16 01 5D 26 0B 90 5D 26 07 5F 90 +R 00 00 00 09 +T 00 00 6F 5F AC 00 01 D8 +R 00 00 00 09 80 05 00 09 +T 00 00 74 +R 00 00 00 09 +T 00 00 74 16 03 1E 01 9F A4 7F 97 4F 01 AA 80 97 +R 00 00 00 09 +T 00 00 81 17 21 1F 1F 16 07 1E 05 9F A4 7F 97 4F +R 00 00 00 09 +T 00 00 8E 01 AA 80 97 17 0B 1F 09 1E 21 13 0B 7B +R 00 00 00 09 +T 00 00 9B 20 12 0A 7B 1F 12 09 2E 0D 08 22 09 21 +R 00 00 00 09 +T 00 00 A8 09 20 09 1F 1E 0D 5A 1F 0D +R 00 00 00 09 +T 00 00 B1 +R 00 00 00 09 +T 00 00 B1 5F 1F 1D AE 01 00 1F 1B 5F 1F 19 1F 17 +R 00 00 00 09 +T 00 00 BE +R 00 00 00 09 +T 00 00 BE 1E 1D 26 04 1E 1B 27 4C +R 00 00 00 09 +T 00 00 C6 +R 00 00 00 09 +T 00 00 C6 1E 21 13 0B 7B 20 12 0A 7B 1F 12 09 2F +R 00 00 00 09 +T 00 00 D3 2C 1E 19 16 17 9F 1A 1E 02 1A 1D 95 90 +R 00 00 00 09 +T 00 00 E0 9F 1A 1C 90 02 1A 1B 90 95 1F 19 17 17 +R 00 00 00 09 +T 00 00 ED 16 21 72 F2 0B 7B 20 12 0A 97 7B 1F 12 +R 00 00 00 09 +T 00 00 FA 09 95 17 21 1F 1F +R 00 00 00 09 +T 00 01 00 +R 00 00 00 09 +T 00 01 00 08 22 09 21 09 20 09 1F 04 1B 06 1C 06 +R 00 00 00 09 +T 00 01 0D 1D 06 1E 20 AC +R 00 00 00 09 +T 00 01 12 +R 00 00 00 09 +T 00 01 12 1E 19 1C 00 01 16 17 24 02 90 5C +R 00 00 00 09 +T 00 01 1D +R 00 00 00 09 +T 00 01 1D 1F 19 17 17 1E 0D 5C 1F 0D 07 17 06 18 +R 00 00 00 09 +T 00 01 2A 06 19 06 1A 16 19 7B 18 A4 7F 97 7B 17 +R 00 00 00 09 +T 00 01 37 95 17 19 1F 17 1E 0D A3 01 00 2F 29 0D +R 00 00 00 09 +T 00 01 44 12 27 09 5F 1F 15 0F 14 A6 80 20 06 +R 00 00 00 09 +T 00 01 50 +R 00 00 00 09 +T 00 01 50 5F 1F 15 0F 14 4F +R 00 00 00 09 +T 00 01 56 +R 00 00 00 09 +T 00 01 56 AA 7F 90 95 7B 16 97 7B 15 95 7B 14 AA +R 00 00 00 09 +T 00 01 63 80 90 97 1F 03 17 01 20 68 +R 00 00 00 09 +T 00 01 6C +R 00 00 00 09 +T 00 01 6C 0D 0D 2A 07 5F 1F 03 1F 01 20 5D +R 00 00 00 09 +T 00 01 77 +R 00 00 00 09 +T 00 01 77 0D 12 27 0A 5F 1F 15 AE 80 00 1F 13 20 +R 00 00 00 09 +T 00 01 84 05 +R 00 00 00 09 +T 00 01 85 +R 00 00 00 09 +T 00 01 85 5F 1F 15 1F 13 +R 00 00 00 09 +T 00 01 8A +R 00 00 00 09 +T 00 01 8A 16 0D 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 01 92 +R 00 00 00 09 +T 00 01 92 5F A6 07 +R 00 00 00 09 +T 00 01 95 +R 00 00 00 09 +T 00 01 95 90 58 4A 26 FB 9F 1A 16 6B 12 9E 1A 15 +R 00 00 00 09 +T 00 01 A2 6B 11 90 9F 1A 14 6B 10 90 9E 1A 13 16 +R 00 00 00 09 +T 00 01 AF 19 17 15 16 17 90 89 1A 01 90 85 90 95 +R 00 00 00 09 +T 00 01 BC 7B 12 1A 16 97 7B 11 1A 15 95 90 89 7B +R 00 00 00 09 +T 00 01 C9 12 1A 02 90 85 90 97 1F 03 17 01 +R 00 00 00 09 +T 00 01 D4 +R 00 00 00 09 +T 00 01 D4 1E 03 16 01 +R 00 00 00 09 +T 00 01 D8 +R 00 00 00 09 +T 00 01 D8 5B 22 87 +R 00 00 00 09 +T 00 01 DB +R 00 00 00 09 +T 00 01 DB 52 06 96 5C 1F 05 1E 10 26 25 1E 0E 58 +R 00 00 00 09 +T 00 01 E8 26 20 1E 0C 89 1E 0C 89 5F 89 5F 89 8D +R 00 00 00 09 +T 00 01 F5 00 00 00 5B 08 4D 27 0D 1E 05 6F 03 6F +R 00 00 00 09 82 03 00 00 +T 00 02 02 02 90 AE 7F 80 FF 20 5E +R 00 00 00 09 +T 00 02 0A +R 00 00 00 09 +T 00 02 0A 1E 10 26 25 1E 0E 58 26 20 5F 89 5F 89 +R 00 00 00 09 +T 00 02 17 1E 10 89 1E 10 89 8D 00 00 00 5B 08 4D +R 00 00 00 09 82 0A 00 00 +T 00 02 24 27 0D 1E 05 6F 03 6F 02 90 AE FF 80 FF +R 00 00 00 09 +T 00 02 31 20 35 +R 00 00 00 09 +T 00 02 33 +R 00 00 00 09 +T 00 02 33 1E 10 26 1B 1E 0E 58 26 16 1E 0C 26 12 +R 00 00 00 09 +T 00 02 40 1E 0A 58 26 0D 1E 05 6F 03 6F 02 90 AE +R 00 00 00 09 +T 00 02 4D FF C0 FF 20 16 +R 00 00 00 09 +T 00 02 52 +R 00 00 00 09 +T 00 02 52 1E 10 89 1E 10 89 1E 10 89 1E 10 89 8D +R 00 00 00 09 +T 00 02 5F 00 00 00 5B 08 1F 03 17 01 +R 00 00 00 09 80 03 00 09 +T 00 02 68 +R 00 00 00 09 +T 00 02 68 1E 03 16 01 5B 06 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fsdiv.sym b/device/lib/stm8-large/_fsdiv.sym new file mode 100644 index 0000000..c727008 --- /dev/null +++ b/device/lib/stm8-large/_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 0001DB 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 26F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fseq.asm b/device/lib/stm8-large/_fseq.asm new file mode 100644 index 0000000..859ddf6 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x16, sp) + ldw (0x03, sp), y + ldw y, (0x14, sp) + ldw (0x01, sp), y +; ../_fseq.c: 88: fl2.f = a2; + ldw y, (0x1a, sp) + ldw (0x07, sp), y + ldw y, (0x18, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fseq.lst b/device/lib/stm8-large/_fseq.lst new file mode 100644 index 0000000..4bdfe91 --- /dev/null +++ b/device/lib/stm8-large/_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 16 [ 2] 56 ldw y, (0x16, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 14 [ 2] 58 ldw y, (0x14, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fseq.c: 88: fl2.f = a2; + 00000A 16 1A [ 2] 61 ldw y, (0x1a, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 18 [ 2] 63 ldw y, (0x18, 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 87 [ 5] 114 retf + 115 .area CODE + 116 .area CONST + 117 .area INITIALIZER + 118 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fseq.rel b/device/lib/stm8-large/_fseq.rel new file mode 100644 index 0000000..7dc0a1c --- /dev/null +++ b/device/lib/stm8-large/_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 16 17 03 16 14 17 01 16 1A 17 +R 00 00 00 09 +T 00 00 0D 07 16 18 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fseq.sym b/device/lib/stm8-large/_fseq.sym new file mode 100644 index 0000000..1a8dd70 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_fslt.asm b/device/lib/stm8-large/_fslt.asm new file mode 100644 index 0000000..91d462f --- /dev/null +++ b/device/lib/stm8-large/_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, (0x16, sp) + ldw (0x03, sp), y + ldw y, (0x14, sp) + ldw (0x01, sp), y +; ../_fslt.c: 113: fl2.f = a2; + ldw y, (0x1a, sp) + ldw (0x07, sp), y + ldw y, (0x18, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fslt.lst b/device/lib/stm8-large/_fslt.lst new file mode 100644 index 0000000..b41efd2 --- /dev/null +++ b/device/lib/stm8-large/_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 16 [ 2] 56 ldw y, (0x16, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 14 [ 2] 58 ldw y, (0x14, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fslt.c: 113: fl2.f = a2; + 00000A 16 1A [ 2] 61 ldw y, (0x1a, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 18 [ 2] 63 ldw y, (0x18, 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 87 [ 5] 159 retf + 160 .area CODE + 161 .area CONST + 162 .area INITIALIZER + 163 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fslt.rel b/device/lib/stm8-large/_fslt.rel new file mode 100644 index 0000000..2be6a9a --- /dev/null +++ b/device/lib/stm8-large/_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 16 17 03 16 14 17 01 16 1A 17 +R 00 00 00 09 +T 00 00 0D 07 16 18 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fslt.sym b/device/lib/stm8-large/_fslt.sym new file mode 100644 index 0000000..b090281 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_fsmul.asm b/device/lib/stm8-large/_fsmul.asm new file mode 100644 index 0000000..3676fd1 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x1b, sp) + ldw (0x03, sp), y + ldw y, (0x19, sp) + ldw (0x01, sp), y +; ../_fsmul.c: 248: fl2.f = a2; + ldw y, (0x1f, sp) + ldw (0x07, sp), y + ldw y, (0x1d, 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 + jpf 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 + callf ___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 + callf ___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 + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fsmul.lst b/device/lib/stm8-large/_fsmul.lst new file mode 100644 index 0000000..5bcfd52 --- /dev/null +++ b/device/lib/stm8-large/_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 1B [ 2] 56 ldw y, (0x1b, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 19 [ 2] 58 ldw y, (0x19, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fsmul.c: 248: fl2.f = a2; + 00000A 16 1F [ 2] 61 ldw y, (0x1f, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 1D [ 2] 63 ldw y, (0x1d, 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 0B [ 1] 78 jrne 00102$ + 000029 90 5D [ 2] 79 tnzw y + 00002B 26 07 [ 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 ACs00r02r07 [ 2] 85 jpf 00113$ + 000034 86 00102$: + 87 ; ../_fsmul.c: 254: sign = SIGN (fl1.l) ^ SIGN (fl2.l); + 000034 1E 01 [ 2] 88 ldw x, (0x01, sp) + 000036 58 [ 2] 89 sllw x + 000037 4F [ 1] 90 clr a + 000038 49 [ 1] 91 rlc a + 000039 6B 15 [ 1] 92 ld (0x15, sp), a + 00003B 1E 05 [ 2] 93 ldw x, (0x05, sp) + 00003D 58 [ 2] 94 sllw x + 00003E 4F [ 1] 95 clr a + 00003F 49 [ 1] 96 rlc a + 000040 18 15 [ 1] 97 xor a, (0x15, sp) + 000042 6B 0D [ 1] 98 ld (0x0d, sp), a + 99 ; ../_fsmul.c: 255: exp = EXP (fl1.l) - EXCESS; + 000044 1E 01 [ 2] 100 ldw x, (0x01, sp) + 000046 A6 80 [ 1] 101 ld a, #0x80 + 000048 62 [ 2] 102 div x, a + 000049 4F [ 1] 103 clr a + 00004A 95 [ 1] 104 ld xh, a + 00004B 1D 00 7E [ 2] 105 subw x, #0x007e + 00004E 1F 14 [ 2] 106 ldw (0x14, sp), x + 107 ; ../_fsmul.c: 256: exp += EXP (fl2.l); + 000050 1E 05 [ 2] 108 ldw x, (0x05, sp) + 000052 A6 80 [ 1] 109 ld a, #0x80 + 000054 62 [ 2] 110 div x, a + 000055 4F [ 1] 111 clr a + 000056 95 [ 1] 112 ld xh, a + 000057 72 FB 14 [ 2] 113 addw x, (0x14, sp) + 00005A 1F 0E [ 2] 114 ldw (0x0e, sp), x + 115 ; ../_fsmul.c: 258: fl1.l = MANT (fl1.l); + 00005C 16 03 [ 2] 116 ldw y, (0x03, sp) + 00005E 1E 01 [ 2] 117 ldw x, (0x01, sp) + 000060 9F [ 1] 118 ld a, xl + 000061 A4 7F [ 1] 119 and a, #0x7f + 000063 97 [ 1] 120 ld xl, a + 000064 4F [ 1] 121 clr a + 000065 01 [ 1] 122 rrwa x + 000066 AA 80 [ 1] 123 or a, #0x80 + 000068 97 [ 1] 124 ld xl, a + 000069 17 03 [ 2] 125 ldw (0x03, sp), y + 00006B 1F 01 [ 2] 126 ldw (0x01, sp), x + 127 ; ../_fsmul.c: 259: fl2.l = MANT (fl2.l); + 00006D 16 07 [ 2] 128 ldw y, (0x07, sp) + 00006F 1E 05 [ 2] 129 ldw x, (0x05, sp) + 000071 9F [ 1] 130 ld a, xl + 000072 A4 7F [ 1] 131 and a, #0x7f + 000074 97 [ 1] 132 ld xl, a + 000075 4F [ 1] 133 clr a + 000076 01 [ 1] 134 rrwa x + 000077 AA 80 [ 1] 135 or a, #0x80 + 000079 97 [ 1] 136 ld xl, a + 00007A 17 07 [ 2] 137 ldw (0x07, sp), y + 00007C 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); + 00007E 16 03 [ 2] 140 ldw y, (0x03, sp) + 000080 1E 01 [ 2] 141 ldw x, (0x01, sp) + 000082 9F [ 1] 142 ld a, xl + 000083 90 02 [ 1] 143 rlwa y + 000085 6B 11 [ 1] 144 ld (0x11, sp), a + 000087 90 01 [ 1] 145 rrwa y + 000089 6B 10 [ 1] 146 ld (0x10, sp), a + 00008B 1E 07 [ 2] 147 ldw x, (0x07, sp) + 00008D 1F 14 [ 2] 148 ldw (0x14, sp), x + 00008F 1E 05 [ 2] 149 ldw x, (0x05, sp) + 000091 7B 14 [ 1] 150 ld a, (0x14, sp) + 000093 6B 15 [ 1] 151 ld (0x15, sp), a + 000095 1F 13 [ 2] 152 ldw (0x13, sp), x + 000097 0F 12 [ 1] 153 clr (0x12, sp) + 000099 7B 15 [ 1] 154 ld a, (0x15, sp) + 00009B 02 [ 1] 155 rlwa x + 00009C 7B 14 [ 1] 156 ld a, (0x14, sp) + 00009E 01 [ 1] 157 rrwa x + 00009F 97 [ 1] 158 ld xl, a + 0000A0 89 [ 2] 159 pushw x + 0000A1 1E 12 [ 2] 160 ldw x, (0x12, sp) + 0000A3 89 [ 2] 161 pushw x + 0000A4 8Ds00r00r00 [ 5] 162 callf ___muluint2ulong + 0000A8 5B 04 [ 2] 163 addw sp, #4 + 0000AA 1F 0B [ 2] 164 ldw (0x0b, sp), x + 0000AC 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; + 0000AE 16 03 [ 2] 167 ldw y, (0x03, sp) + 0000B0 4F [ 1] 168 clr a + 0000B1 90 95 [ 1] 169 ld yh, a + 0000B3 1E 07 [ 2] 170 ldw x, (0x07, sp) + 0000B5 1F 14 [ 2] 171 ldw (0x14, sp), x + 0000B7 1E 05 [ 2] 172 ldw x, (0x05, sp) + 0000B9 7B 14 [ 1] 173 ld a, (0x14, sp) + 0000BB 6B 15 [ 1] 174 ld (0x15, sp), a + 0000BD 1F 13 [ 2] 175 ldw (0x13, sp), x + 0000BF 0F 12 [ 1] 176 clr (0x12, sp) + 0000C1 7B 15 [ 1] 177 ld a, (0x15, sp) + 0000C3 02 [ 1] 178 rlwa x + 0000C4 7B 14 [ 1] 179 ld a, (0x14, sp) + 0000C6 01 [ 1] 180 rrwa x + 0000C7 97 [ 1] 181 ld xl, a + 0000C8 89 [ 2] 182 pushw x + 0000C9 90 89 [ 2] 183 pushw y + 0000CB 8Ds00r00r00 [ 5] 184 callf ___muluint2ulong + 0000CF 5B 04 [ 2] 185 addw sp, #4 + 0000D1 9E [ 1] 186 ld a, xh + 0000D2 6B 15 [ 1] 187 ld (0x15, sp), a + 0000D4 17 13 [ 2] 188 ldw (0x13, sp), y + 0000D6 0F 12 [ 1] 189 clr (0x12, sp) + 0000D8 1E 0B [ 2] 190 ldw x, (0x0b, sp) + 0000DA 72 FB 14 [ 2] 191 addw x, (0x14, sp) + 0000DD 16 09 [ 2] 192 ldw y, (0x09, sp) + 0000DF 24 02 [ 1] 193 jrnc 00152$ + 0000E1 90 5C [ 1] 194 incw y + 0000E3 195 00152$: + 0000E3 72 F9 12 [ 2] 196 addw y, (0x12, sp) + 0000E6 1F 0B [ 2] 197 ldw (0x0b, sp), x + 0000E8 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; + 0000EA 16 07 [ 2] 200 ldw y, (0x07, sp) + 0000EC 4F [ 1] 201 clr a + 0000ED 90 95 [ 1] 202 ld yh, a + 0000EF 1E 03 [ 2] 203 ldw x, (0x03, sp) + 0000F1 1F 14 [ 2] 204 ldw (0x14, sp), x + 0000F3 1E 01 [ 2] 205 ldw x, (0x01, sp) + 0000F5 7B 14 [ 1] 206 ld a, (0x14, sp) + 0000F7 6B 15 [ 1] 207 ld (0x15, sp), a + 0000F9 1F 13 [ 2] 208 ldw (0x13, sp), x + 0000FB 0F 12 [ 1] 209 clr (0x12, sp) + 0000FD 7B 15 [ 1] 210 ld a, (0x15, sp) + 0000FF 02 [ 1] 211 rlwa x + 000100 7B 14 [ 1] 212 ld a, (0x14, sp) + 000102 01 [ 1] 213 rrwa x + 000103 97 [ 1] 214 ld xl, a + 000104 89 [ 2] 215 pushw x + 000105 90 89 [ 2] 216 pushw y + 000107 8Ds00r00r00 [ 5] 217 callf ___muluint2ulong + 00010B 5B 04 [ 2] 218 addw sp, #4 + 00010D 9E [ 1] 219 ld a, xh + 00010E 6B 15 [ 1] 220 ld (0x15, sp), a + 000110 17 13 [ 2] 221 ldw (0x13, sp), y + 000112 0F 12 [ 1] 222 clr (0x12, sp) + 000114 1E 0B [ 2] 223 ldw x, (0x0b, sp) + 000116 72 FB 14 [ 2] 224 addw x, (0x14, sp) + 000119 16 09 [ 2] 225 ldw y, (0x09, sp) + 00011B 24 02 [ 1] 226 jrnc 00153$ + 00011D 90 5C [ 1] 227 incw y + 00011F 228 00153$: + 00011F 72 F9 12 [ 2] 229 addw y, (0x12, sp) + 000122 1F 0B [ 2] 230 ldw (0x0b, sp), x + 000124 17 09 [ 2] 231 ldw (0x09, sp), y + 232 ; ../_fsmul.c: 267: result += 0x40; + 000126 1E 0B [ 2] 233 ldw x, (0x0b, sp) + 000128 1C 00 40 [ 2] 234 addw x, #0x0040 + 00012B 16 09 [ 2] 235 ldw y, (0x09, sp) + 00012D 24 02 [ 1] 236 jrnc 00154$ + 00012F 90 5C [ 1] 237 incw y + 000131 238 00154$: + 000131 1F 0B [ 2] 239 ldw (0x0b, sp), x + 000133 17 09 [ 2] 240 ldw (0x09, sp), y + 241 ; ../_fsmul.c: 269: if (result & SIGNBIT) + 000135 0D 09 [ 1] 242 tnz (0x09, sp) + 000137 2A 1C [ 1] 243 jrpl 00105$ + 244 ; ../_fsmul.c: 272: result += 0x40; + 000139 1E 0B [ 2] 245 ldw x, (0x0b, sp) + 00013B 1C 00 40 [ 2] 246 addw x, #0x0040 + 00013E 16 09 [ 2] 247 ldw y, (0x09, sp) + 000140 24 02 [ 1] 248 jrnc 00156$ + 000142 90 5C [ 1] 249 incw y + 000144 250 00156$: + 000144 1F 0B [ 2] 251 ldw (0x0b, sp), x + 000146 17 09 [ 2] 252 ldw (0x09, sp), y + 253 ; ../_fsmul.c: 273: result >>= 8; + 000148 16 0A [ 2] 254 ldw y, (0x0a, sp) + 00014A 7B 09 [ 1] 255 ld a, (0x09, sp) + 00014C 97 [ 1] 256 ld xl, a + 00014D 4F [ 1] 257 clr a + 00014E 95 [ 1] 258 ld xh, a + 00014F 17 0B [ 2] 259 ldw (0x0b, sp), y + 000151 1F 09 [ 2] 260 ldw (0x09, sp), x + 000153 20 15 [ 2] 261 jra 00106$ + 000155 262 00105$: + 263 ; ../_fsmul.c: 277: result >>= 7; + 000155 1E 0B [ 2] 264 ldw x, (0x0b, sp) + 000157 16 09 [ 2] 265 ldw y, (0x09, sp) + 000159 4F [ 1] 266 clr a + 00015A 90 01 [ 1] 267 rrwa y + 00015C 01 [ 1] 268 rrwa x + 00015D 48 [ 1] 269 sll a + 00015E 59 [ 2] 270 rlcw x + 00015F 90 59 [ 2] 271 rlcw y + 000161 1F 0B [ 2] 272 ldw (0x0b, sp), x + 000163 17 09 [ 2] 273 ldw (0x09, sp), y + 274 ; ../_fsmul.c: 278: exp--; + 000165 1E 0E [ 2] 275 ldw x, (0x0e, sp) + 000167 5A [ 2] 276 decw x + 000168 1F 0E [ 2] 277 ldw (0x0e, sp), x + 00016A 278 00106$: + 279 ; ../_fsmul.c: 281: result &= ~HIDDEN; + 00016A 16 0B [ 2] 280 ldw y, (0x0b, sp) + 00016C 7B 0A [ 1] 281 ld a, (0x0a, sp) + 00016E A4 7F [ 1] 282 and a, #0x7f + 000170 97 [ 1] 283 ld xl, a + 000171 7B 09 [ 1] 284 ld a, (0x09, sp) + 000173 95 [ 1] 285 ld xh, a + 000174 17 0B [ 2] 286 ldw (0x0b, sp), y + 000176 1F 09 [ 2] 287 ldw (0x09, sp), x + 288 ; ../_fsmul.c: 284: if (exp >= 0x100) + 000178 1E 0E [ 2] 289 ldw x, (0x0e, sp) + 00017A A3 01 00 [ 2] 290 cpw x, #0x0100 + 00017D 2F 29 [ 1] 291 jrslt 00111$ + 292 ; ../_fsmul.c: 285: fl1.l = (sign ? SIGNBIT : 0) | __INFINITY; + 00017F 0D 0D [ 1] 293 tnz (0x0d, sp) + 000181 27 09 [ 1] 294 jreq 00115$ + 000183 5F [ 1] 295 clrw x + 000184 1F 14 [ 2] 296 ldw (0x14, sp), x + 000186 0F 13 [ 1] 297 clr (0x13, sp) + 000188 A6 80 [ 1] 298 ld a, #0x80 + 00018A 20 06 [ 2] 299 jra 00116$ + 00018C 300 00115$: + 00018C 5F [ 1] 301 clrw x + 00018D 1F 14 [ 2] 302 ldw (0x14, sp), x + 00018F 0F 13 [ 1] 303 clr (0x13, sp) + 000191 4F [ 1] 304 clr a + 000192 305 00116$: + 000192 AA 7F [ 1] 306 or a, #0x7f + 000194 90 95 [ 1] 307 ld yh, a + 000196 7B 15 [ 1] 308 ld a, (0x15, sp) + 000198 97 [ 1] 309 ld xl, a + 000199 7B 14 [ 1] 310 ld a, (0x14, sp) + 00019B 95 [ 1] 311 ld xh, a + 00019C 7B 13 [ 1] 312 ld a, (0x13, sp) + 00019E AA 80 [ 1] 313 or a, #0x80 + 0001A0 90 97 [ 1] 314 ld yl, a + 0001A2 1F 03 [ 2] 315 ldw (0x03, sp), x + 0001A4 17 01 [ 2] 316 ldw (0x01, sp), y + 0001A6 20 5B [ 2] 317 jra 00112$ + 0001A8 318 00111$: + 319 ; ../_fsmul.c: 286: else if (exp < 0) + 0001A8 0D 0E [ 1] 320 tnz (0x0e, sp) + 0001AA 2A 07 [ 1] 321 jrpl 00108$ + 322 ; ../_fsmul.c: 287: fl1.l = 0; + 0001AC 5F [ 1] 323 clrw x + 0001AD 1F 03 [ 2] 324 ldw (0x03, sp), x + 0001AF 1F 01 [ 2] 325 ldw (0x01, sp), x + 0001B1 20 50 [ 2] 326 jra 00112$ + 0001B3 327 00108$: + 328 ; ../_fsmul.c: 289: fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result); + 0001B3 0D 0D [ 1] 329 tnz (0x0d, sp) + 0001B5 27 0A [ 1] 330 jreq 00117$ + 0001B7 5F [ 1] 331 clrw x + 0001B8 1F 14 [ 2] 332 ldw (0x14, sp), x + 0001BA AE 80 00 [ 2] 333 ldw x, #0x8000 + 0001BD 1F 12 [ 2] 334 ldw (0x12, sp), x + 0001BF 20 05 [ 2] 335 jra 00118$ + 0001C1 336 00117$: + 0001C1 5F [ 1] 337 clrw x + 0001C2 1F 14 [ 2] 338 ldw (0x14, sp), x + 0001C4 1F 12 [ 2] 339 ldw (0x12, sp), x + 0001C6 340 00118$: + 0001C6 16 0E [ 2] 341 ldw y, (0x0e, sp) + 0001C8 5F [ 1] 342 clrw x + 0001C9 90 5D [ 2] 343 tnzw y + 0001CB 2A 01 [ 1] 344 jrpl 00161$ + 0001CD 5A [ 2] 345 decw x + 0001CE 346 00161$: + 0001CE 90 9F [ 1] 347 ld a, yl + 0001D0 5F [ 1] 348 clrw x + 0001D1 88 [ 1] 349 push a + 0001D2 A6 07 [ 1] 350 ld a, #0x07 + 0001D4 351 00162$: + 0001D4 08 01 [ 1] 352 sll (1, sp) + 0001D6 90 02 [ 1] 353 rlwa y + 0001D8 49 [ 1] 354 rlc a + 0001D9 90 01 [ 1] 355 rrwa y + 0001DB 4A [ 1] 356 dec a + 0001DC 26 F6 [ 1] 357 jrne 00162$ + 0001DE 84 [ 1] 358 pop a + 0001DF 1A 13 [ 1] 359 or a, (0x13, sp) + 0001E1 90 97 [ 1] 360 ld yl, a + 0001E3 9F [ 1] 361 ld a, xl + 0001E4 1A 15 [ 1] 362 or a, (0x15, sp) + 0001E6 02 [ 1] 363 rlwa x + 0001E7 1A 14 [ 1] 364 or a, (0x14, sp) + 0001E9 95 [ 1] 365 ld xh, a + 0001EA 90 9E [ 1] 366 ld a, yh + 0001EC 1A 12 [ 1] 367 or a, (0x12, sp) + 0001EE 1A 09 [ 1] 368 or a, (0x09, sp) + 0001F0 90 95 [ 1] 369 ld yh, a + 0001F2 9F [ 1] 370 ld a, xl + 0001F3 1A 0C [ 1] 371 or a, (0x0c, sp) + 0001F5 02 [ 1] 372 rlwa x + 0001F6 1A 0B [ 1] 373 or a, (0x0b, sp) + 0001F8 95 [ 1] 374 ld xh, a + 0001F9 90 9F [ 1] 375 ld a, yl + 0001FB 1A 0A [ 1] 376 or a, (0x0a, sp) + 0001FD 90 97 [ 1] 377 ld yl, a + 0001FF 1F 03 [ 2] 378 ldw (0x03, sp), x + 000201 17 01 [ 2] 379 ldw (0x01, sp), y + 000203 380 00112$: + 381 ; ../_fsmul.c: 290: return (fl1.f); + 000203 1E 03 [ 2] 382 ldw x, (0x03, sp) + 000205 16 01 [ 2] 383 ldw y, (0x01, sp) + 000207 384 00113$: + 385 ; ../_fsmul.c: 291: } + 000207 5B 15 [ 2] 386 addw sp, #21 + 000209 87 [ 5] 387 retf + 388 .area CODE + 389 .area CONST + 390 .area INITIALIZER + 391 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fsmul.rel b/device/lib/stm8-large/_fsmul.rel new file mode 100644 index 0000000..31699fd --- /dev/null +++ b/device/lib/stm8-large/_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 20A 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 1B 17 03 16 19 17 01 16 1F 17 +R 00 00 00 09 +T 00 00 0D 07 16 1D 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 0B 90 5D 26 07 +R 00 00 00 09 +T 00 00 2D +R 00 00 00 09 +T 00 00 2D 5F 90 5F AC 00 02 07 +R 00 00 00 09 80 07 00 09 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 1E 01 58 4F 49 6B 15 1E 05 58 4F 49 18 +R 00 00 00 09 +T 00 00 41 15 6B 0D 1E 01 A6 80 62 4F 95 1D 00 7E +R 00 00 00 09 +T 00 00 4E 1F 14 1E 05 A6 80 62 4F 95 72 FB 14 1F +R 00 00 00 09 +T 00 00 5B 0E 16 03 1E 01 9F A4 7F 97 4F 01 AA 80 +R 00 00 00 09 +T 00 00 68 97 17 03 1F 01 16 07 1E 05 9F A4 7F 97 +R 00 00 00 09 +T 00 00 75 4F 01 AA 80 97 17 07 1F 05 16 03 1E 01 +R 00 00 00 09 +T 00 00 82 9F 90 02 6B 11 90 01 6B 10 1E 07 1F 14 +R 00 00 00 09 +T 00 00 8F 1E 05 7B 14 6B 15 1F 13 0F 12 7B 15 02 +R 00 00 00 09 +T 00 00 9C 7B 14 01 97 89 1E 12 89 8D +R 00 00 00 09 +T 00 00 A5 00 00 00 5B 04 1F 0B 17 09 16 03 4F 90 +R 00 00 00 09 82 03 00 00 +T 00 00 B2 95 1E 07 1F 14 1E 05 7B 14 6B 15 1F 13 +R 00 00 00 09 +T 00 00 BF 0F 12 7B 15 02 7B 14 01 97 89 90 89 8D +R 00 00 00 09 +T 00 00 CC 00 00 00 5B 04 9E 6B 15 17 13 0F 12 1E +R 00 00 00 09 82 03 00 00 +T 00 00 D9 0B 72 FB 14 16 09 24 02 90 5C +R 00 00 00 09 +T 00 00 E3 +R 00 00 00 09 +T 00 00 E3 72 F9 12 1F 0B 17 09 16 07 4F 90 95 1E +R 00 00 00 09 +T 00 00 F0 03 1F 14 1E 01 7B 14 6B 15 1F 13 0F 12 +R 00 00 00 09 +T 00 00 FD 7B 15 02 7B 14 01 97 89 90 89 8D +R 00 00 00 09 +T 00 01 08 00 00 00 5B 04 9E 6B 15 17 13 0F 12 1E +R 00 00 00 09 82 03 00 00 +T 00 01 15 0B 72 FB 14 16 09 24 02 90 5C +R 00 00 00 09 +T 00 01 1F +R 00 00 00 09 +T 00 01 1F 72 F9 12 1F 0B 17 09 1E 0B 1C 00 40 16 +R 00 00 00 09 +T 00 01 2C 09 24 02 90 5C +R 00 00 00 09 +T 00 01 31 +R 00 00 00 09 +T 00 01 31 1F 0B 17 09 0D 09 2A 1C 1E 0B 1C 00 40 +R 00 00 00 09 +T 00 01 3E 16 09 24 02 90 5C +R 00 00 00 09 +T 00 01 44 +R 00 00 00 09 +T 00 01 44 1F 0B 17 09 16 0A 7B 09 97 4F 95 17 0B +R 00 00 00 09 +T 00 01 51 1F 09 20 15 +R 00 00 00 09 +T 00 01 55 +R 00 00 00 09 +T 00 01 55 1E 0B 16 09 4F 90 01 01 48 59 90 59 1F +R 00 00 00 09 +T 00 01 62 0B 17 09 1E 0E 5A 1F 0E +R 00 00 00 09 +T 00 01 6A +R 00 00 00 09 +T 00 01 6A 16 0B 7B 0A A4 7F 97 7B 09 95 17 0B 1F +R 00 00 00 09 +T 00 01 77 09 1E 0E A3 01 00 2F 29 0D 0D 27 09 5F +R 00 00 00 09 +T 00 01 84 1F 14 0F 13 A6 80 20 06 +R 00 00 00 09 +T 00 01 8C +R 00 00 00 09 +T 00 01 8C 5F 1F 14 0F 13 4F +R 00 00 00 09 +T 00 01 92 +R 00 00 00 09 +T 00 01 92 AA 7F 90 95 7B 15 97 7B 14 95 7B 13 AA +R 00 00 00 09 +T 00 01 9F 80 90 97 1F 03 17 01 20 5B +R 00 00 00 09 +T 00 01 A8 +R 00 00 00 09 +T 00 01 A8 0D 0E 2A 07 5F 1F 03 1F 01 20 50 +R 00 00 00 09 +T 00 01 B3 +R 00 00 00 09 +T 00 01 B3 0D 0D 27 0A 5F 1F 14 AE 80 00 1F 12 20 +R 00 00 00 09 +T 00 01 C0 05 +R 00 00 00 09 +T 00 01 C1 +R 00 00 00 09 +T 00 01 C1 5F 1F 14 1F 12 +R 00 00 00 09 +T 00 01 C6 +R 00 00 00 09 +T 00 01 C6 16 0E 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 01 CE +R 00 00 00 09 +T 00 01 CE 90 9F 5F 88 A6 07 +R 00 00 00 09 +T 00 01 D4 +R 00 00 00 09 +T 00 01 D4 08 01 90 02 49 90 01 4A 26 F6 84 1A 13 +R 00 00 00 09 +T 00 01 E1 90 97 9F 1A 15 02 1A 14 95 90 9E 1A 12 +R 00 00 00 09 +T 00 01 EE 1A 09 90 95 9F 1A 0C 02 1A 0B 95 90 9F +R 00 00 00 09 +T 00 01 FB 1A 0A 90 97 1F 03 17 01 +R 00 00 00 09 +T 00 02 03 +R 00 00 00 09 +T 00 02 03 1E 03 16 01 +R 00 00 00 09 +T 00 02 07 +R 00 00 00 09 +T 00 02 07 5B 15 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fsmul.sym b/device/lib/stm8-large/_fsmul.sym new file mode 100644 index 0000000..16ce2ae --- /dev/null +++ b/device/lib/stm8-large/_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 20A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_fsneq.asm b/device/lib/stm8-large/_fsneq.asm new file mode 100644 index 0000000..4275d5a --- /dev/null +++ b/device/lib/stm8-large/_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, (0x16, sp) + ldw (0x03, sp), y + ldw y, (0x14, sp) + ldw (0x01, sp), y +; ../_fsneq.c: 85: fl2.f = a2; + ldw y, (0x1a, sp) + ldw (0x07, sp), y + ldw y, (0x18, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fsneq.lst b/device/lib/stm8-large/_fsneq.lst new file mode 100644 index 0000000..303ba11 --- /dev/null +++ b/device/lib/stm8-large/_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 16 [ 2] 56 ldw y, (0x16, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 14 [ 2] 58 ldw y, (0x14, sp) + 000008 17 01 [ 2] 59 ldw (0x01, sp), y + 60 ; ../_fsneq.c: 85: fl2.f = a2; + 00000A 16 1A [ 2] 61 ldw y, (0x1a, sp) + 00000C 17 07 [ 2] 62 ldw (0x07, sp), y + 00000E 16 18 [ 2] 63 ldw y, (0x18, 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 87 [ 5] 114 retf + 115 .area CODE + 116 .area CONST + 117 .area INITIALIZER + 118 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fsneq.rel b/device/lib/stm8-large/_fsneq.rel new file mode 100644 index 0000000..ade4542 --- /dev/null +++ b/device/lib/stm8-large/_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 16 17 03 16 14 17 01 16 1A 17 +R 00 00 00 09 +T 00 00 0D 07 16 18 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_fsneq.sym b/device/lib/stm8-large/_fsneq.sym new file mode 100644 index 0000000..2b5d8fd --- /dev/null +++ b/device/lib/stm8-large/_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-large/_fssub.asm b/device/lib/stm8-large/_fssub.asm new file mode 100644 index 0000000..eecbda9 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0a, sp) + ldw x, (0x08, sp) + sllw x + ccf + rrcw x + ldw (0x03, sp), y + ldw (0x01, sp), x +; ../_fssub.c: 76: return -(neg + a2); + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf ___fsadd + addw sp, #8 + sllw y + ccf + rrcw y +; ../_fssub.c: 77: } + addw sp, #4 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_fssub.lst b/device/lib/stm8-large/_fssub.lst new file mode 100644 index 0000000..0d47e3a --- /dev/null +++ b/device/lib/stm8-large/_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 0A [ 2] 56 ldw y, (0x0a, sp) + 000004 1E 08 [ 2] 57 ldw x, (0x08, 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 0E [ 2] 64 ldw x, (0x0e, sp) + 00000F 89 [ 2] 65 pushw x + 000010 1E 0E [ 2] 66 ldw x, (0x0e, 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 8Ds00r00r00 [ 5] 72 callf ___fsadd + 00001D 5B 08 [ 2] 73 addw sp, #8 + 00001F 90 58 [ 2] 74 sllw y + 000021 8C [ 1] 75 ccf + 000022 90 56 [ 2] 76 rrcw y + 77 ; ../_fssub.c: 77: } + 000024 5B 04 [ 2] 78 addw sp, #4 + 000026 87 [ 5] 79 retf + 80 .area CODE + 81 .area CONST + 82 .area INITIALIZER + 83 .area CABS (ABS) diff --git a/device/lib/stm8-large/_fssub.rel b/device/lib/stm8-large/_fssub.rel new file mode 100644 index 0000000..b3b17c9 --- /dev/null +++ b/device/lib/stm8-large/_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 27 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 0A 1E 08 58 8C 56 17 03 1F 01 +R 00 00 00 09 +T 00 00 0D 1E 0E 89 1E 0E 89 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 1A 00 00 00 5B 08 90 58 8C 90 56 5B 04 87 +R 00 00 00 09 82 03 00 01 diff --git a/device/lib/stm8-large/_fssub.sym b/device/lib/stm8-large/_fssub.sym new file mode 100644 index 0000000..3f16790 --- /dev/null +++ b/device/lib/stm8-large/_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 27 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_itoa.asm b/device/lib/stm8-large/_itoa.asm new file mode 100644 index 0000000..f6f6530 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0b, sp) + ldw (0x01, sp), x + ld a, (0x0d, sp) + ld (0x04, sp), a + clr (0x03, sp) + ldw x, (0x09, 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, (0x09, sp) + ldw y, (0x03, sp) + divw x, y + ldw (0x09, sp), x +; ../_itoa.c: 50: ++index; + inc (0x05, sp) +; ../_itoa.c: 51: } while (value != 0); + ldw x, (0x09, 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, (0x0b, 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, (0x0b, 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, (0x0b, 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 + retf +; ../_itoa.c: 66: void _itoa(int value, char* string, unsigned char radix) +; ----------------------------------------- +; function _itoa +; ----------------------------------------- +__itoa: +; ../_itoa.c: 68: if (value < 0 && radix == 10) { + tnz (0x04, sp) + jrpl 00102$ + ld a, (0x08, sp) + cp a, #0x0a + jrne 00102$ +; ../_itoa.c: 69: *string++ = '-'; + ldw x, (0x06, sp) + ld a, #0x2d + ld (x), a + incw x + ldw (0x06, sp), x +; ../_itoa.c: 70: value = -value; + ldw x, (0x04, sp) + negw x + ldw (0x04, sp), x +00102$: +; ../_itoa.c: 72: _uitoa(value, string, radix); + ld a, (0x08, sp) + push a + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf __uitoa + addw sp, #5 +; ../_itoa.c: 73: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_itoa.lst b/device/lib/stm8-large/_itoa.lst new file mode 100644 index 0000000..4b759ad --- /dev/null +++ b/device/lib/stm8-large/_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 0B [ 2] 66 addw x, (0x0b, sp) + 00000F 1F 01 [ 2] 67 ldw (0x01, sp), x + 000011 7B 0D [ 1] 68 ld a, (0x0d, sp) + 000013 6B 04 [ 1] 69 ld (0x04, sp), a + 000015 0F 03 [ 1] 70 clr (0x03, sp) + 000017 1E 09 [ 2] 71 ldw x, (0x09, 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 09 [ 2] 89 ldw x, (0x09, sp) + 000031 16 03 [ 2] 90 ldw y, (0x03, sp) + 000033 65 [ 2] 91 divw x, y + 000034 1F 09 [ 2] 92 ldw (0x09, sp), x + 93 ; ../_itoa.c: 50: ++index; + 000036 0C 05 [ 1] 94 inc (0x05, sp) + 95 ; ../_itoa.c: 51: } while (value != 0); + 000038 1E 09 [ 2] 96 ldw x, (0x09, 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 0B [ 2] 108 addw x, (0x0b, 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 0B [ 2] 123 addw x, (0x0b, 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 0B [ 2] 134 addw x, (0x0b, 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 87 [ 5] 148 retf + 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 04 [ 1] 155 tnz (0x04, sp) + 000081 2A 13 [ 1] 156 jrpl 00102$ + 000083 7B 08 [ 1] 157 ld a, (0x08, sp) + 000085 A1 0A [ 1] 158 cp a, #0x0a + 000087 26 0D [ 1] 159 jrne 00102$ + 160 ; ../_itoa.c: 69: *string++ = '-'; + 000089 1E 06 [ 2] 161 ldw x, (0x06, sp) + 00008B A6 2D [ 1] 162 ld a, #0x2d + 00008D F7 [ 1] 163 ld (x), a + 00008E 5C [ 1] 164 incw x + 00008F 1F 06 [ 2] 165 ldw (0x06, sp), x + 166 ; ../_itoa.c: 70: value = -value; + 000091 1E 04 [ 2] 167 ldw x, (0x04, sp) + 000093 50 [ 2] 168 negw x + 000094 1F 04 [ 2] 169 ldw (0x04, sp), x + 000096 170 00102$: + 171 ; ../_itoa.c: 72: _uitoa(value, string, radix); + 000096 7B 08 [ 1] 172 ld a, (0x08, sp) + 000098 88 [ 1] 173 push a + 000099 1E 07 [ 2] 174 ldw x, (0x07, sp) + 00009B 89 [ 2] 175 pushw x + 00009C 1E 07 [ 2] 176 ldw x, (0x07, sp) + 00009E 89 [ 2] 177 pushw x + 00009F 8Ds00r00r00 [ 5] 178 callf __uitoa + 0000A3 5B 05 [ 2] 179 addw sp, #5 + 180 ; ../_itoa.c: 73: } + 0000A5 87 [ 5] 181 retf + 182 .area CODE + 183 .area CONST + 184 .area INITIALIZER + 185 .area CABS (ABS) diff --git a/device/lib/stm8-large/_itoa.rel b/device/lib/stm8-large/_itoa.rel new file mode 100644 index 0000000..fb6dedc --- /dev/null +++ b/device/lib/stm8-large/_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 A6 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 0B 1F 01 +R 00 00 00 09 +T 00 00 11 7B 0D 6B 04 0F 03 1E 09 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 09 16 03 65 1F 09 0C 05 1E 09 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 0B 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 0B 51 90 F6 6B 03 7B 04 97 49 +R 00 00 00 09 +T 00 00 69 4F A2 00 95 72 FB 0B 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 87 +R 00 00 00 09 +T 00 00 7F +R 00 00 00 09 +T 00 00 7F 0D 04 2A 13 7B 08 A1 0A 26 0D 1E 06 A6 +R 00 00 00 09 +T 00 00 8C 2D F7 5C 1F 06 1E 04 50 1F 04 +R 00 00 00 09 +T 00 00 96 +R 00 00 00 09 +T 00 00 96 7B 08 88 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 A0 00 00 00 5B 05 87 +R 00 00 00 09 80 03 00 09 diff --git a/device/lib/stm8-large/_itoa.sym b/device/lib/stm8-large/_itoa.sym new file mode 100644 index 0000000..2bdd568 --- /dev/null +++ b/device/lib/stm8-large/_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 A6 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_ltoa.asm b/device/lib/stm8-large/_ltoa.asm new file mode 100644 index 0000000..6569c7b --- /dev/null +++ b/device/lib/stm8-large/_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, (0x31, 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, (0x31, sp) + pushw x + ldw x, (0x31, sp) + pushw x + callf __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, (0x31, sp) + pushw x + ldw x, (0x31, sp) + pushw x + callf __divulong + addw sp, #8 + ldw (0x2d, sp), x + ldw (0x2b, sp), y +; ../_ltoa.c: 67: } while (value); + ldw x, (0x2d, sp) + jrne 00103$ + ldw x, (0x2b, sp) + jrne 00103$ +; ../_ltoa.c: 69: do { + ldw x, (0x2f, 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 + retf +; ../_ltoa.c: 76: void _ltoa(long value, char* string, unsigned char radix) +; ----------------------------------------- +; function _ltoa +; ----------------------------------------- +__ltoa: +; ../_ltoa.c: 78: if (value < 0 && radix == 10) { + tnz (0x04, sp) + jrpl 00102$ + ld a, (0x0a, sp) + cp a, #0x0a + jrne 00102$ +; ../_ltoa.c: 79: *string++ = '-'; + ldw x, (0x08, sp) + ld a, #0x2d + ld (x), a + incw x + ldw (0x08, sp), x +; ../_ltoa.c: 80: value = -value; + ldw y, (0x06, sp) + negw y + ldw x, (0x04, sp) + jrnc 00120$ + incw x +00120$: + negw x + ldw (0x06, sp), y + ldw (0x04, sp), x +00102$: +; ../_ltoa.c: 82: _ultoa(value, string, radix); + ld a, (0x0a, sp) + push a + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + callf __ultoa + addw sp, #7 +; ../_ltoa.c: 83: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_ltoa.lst b/device/lib/stm8-large/_ltoa.lst new file mode 100644 index 0000000..2211431 --- /dev/null +++ b/device/lib/stm8-large/_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 31 [ 1] 64 ld a, (0x31, 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 31 [ 2] 73 ldw x, (0x31, sp) + 00001E 89 [ 2] 74 pushw x + 00001F 1E 31 [ 2] 75 ldw x, (0x31, sp) + 000021 89 [ 2] 76 pushw x + 000022 8Ds00r00r00 [ 5] 77 callf __modulong + 000026 5B 08 [ 2] 78 addw sp, #8 + 000028 9F [ 1] 79 ld a, xl + 000029 AB 30 [ 1] 80 add a, #0x30 + 81 ; ../_ltoa.c: 63: if (c > (unsigned char)'9') + 00002B A1 39 [ 1] 82 cp a, #0x39 + 00002D 23 02 [ 2] 83 jrule 00102$ + 84 ; ../_ltoa.c: 64: c += 'A' - '9' - 1; + 00002F AB 07 [ 1] 85 add a, #0x07 + 000031 86 00102$: + 87 ; ../_ltoa.c: 65: buffer[--index] = c; + 000031 0A 27 [ 1] 88 dec (0x27, sp) + 000033 5F [ 1] 89 clrw x + 000034 41 [ 1] 90 exg a, xl + 000035 7B 27 [ 1] 91 ld a, (0x27, sp) + 000037 41 [ 1] 92 exg a, xl + 000038 72 FB 25 [ 2] 93 addw x, (0x25, sp) + 00003B F7 [ 1] 94 ld (x), a + 95 ; ../_ltoa.c: 66: value /= radix; + 00003C 1E 03 [ 2] 96 ldw x, (0x03, sp) + 00003E 89 [ 2] 97 pushw x + 00003F 1E 03 [ 2] 98 ldw x, (0x03, sp) + 000041 89 [ 2] 99 pushw x + 000042 1E 31 [ 2] 100 ldw x, (0x31, sp) + 000044 89 [ 2] 101 pushw x + 000045 1E 31 [ 2] 102 ldw x, (0x31, sp) + 000047 89 [ 2] 103 pushw x + 000048 8Ds00r00r00 [ 5] 104 callf __divulong + 00004C 5B 08 [ 2] 105 addw sp, #8 + 00004E 1F 2D [ 2] 106 ldw (0x2d, sp), x + 000050 17 2B [ 2] 107 ldw (0x2b, sp), y + 108 ; ../_ltoa.c: 67: } while (value); + 000052 1E 2D [ 2] 109 ldw x, (0x2d, sp) + 000054 26 B6 [ 1] 110 jrne 00103$ + 000056 1E 2B [ 2] 111 ldw x, (0x2b, sp) + 000058 26 B2 [ 1] 112 jrne 00103$ + 113 ; ../_ltoa.c: 69: do { + 00005A 1E 2F [ 2] 114 ldw x, (0x2f, sp) + 00005C 115 00106$: + 116 ; ../_ltoa.c: 70: *string++ = buffer[index]; + 00005C 90 5F [ 1] 117 clrw y + 00005E 7B 27 [ 1] 118 ld a, (0x27, sp) + 000060 90 97 [ 1] 119 ld yl, a + 000062 72 F9 25 [ 2] 120 addw y, (0x25, sp) + 000065 90 F6 [ 1] 121 ld a, (y) + 000067 F7 [ 1] 122 ld (x), a + 000068 5C [ 1] 123 incw x + 124 ; ../_ltoa.c: 71: } while ( ++index != NUMBER_OF_DIGITS ); + 000069 0C 27 [ 1] 125 inc (0x27, sp) + 00006B 7B 27 [ 1] 126 ld a, (0x27, sp) + 00006D A1 20 [ 1] 127 cp a, #0x20 + 00006F 26 EB [ 1] 128 jrne 00106$ + 129 ; ../_ltoa.c: 73: *string = 0; /* string terminator */ + 000071 7F [ 1] 130 clr (x) + 131 ; ../_ltoa.c: 74: } + 000072 5B 27 [ 2] 132 addw sp, #39 + 000074 87 [ 5] 133 retf + 134 ; ../_ltoa.c: 76: void _ltoa(long value, char* string, unsigned char radix) + 135 ; ----------------------------------------- + 136 ; function _ltoa + 137 ; ----------------------------------------- + 000075 138 __ltoa: + 139 ; ../_ltoa.c: 78: if (value < 0 && radix == 10) { + 000075 0D 04 [ 1] 140 tnz (0x04, sp) + 000077 2A 1C [ 1] 141 jrpl 00102$ + 000079 7B 0A [ 1] 142 ld a, (0x0a, sp) + 00007B A1 0A [ 1] 143 cp a, #0x0a + 00007D 26 16 [ 1] 144 jrne 00102$ + 145 ; ../_ltoa.c: 79: *string++ = '-'; + 00007F 1E 08 [ 2] 146 ldw x, (0x08, sp) + 000081 A6 2D [ 1] 147 ld a, #0x2d + 000083 F7 [ 1] 148 ld (x), a + 000084 5C [ 1] 149 incw x + 000085 1F 08 [ 2] 150 ldw (0x08, sp), x + 151 ; ../_ltoa.c: 80: value = -value; + 000087 16 06 [ 2] 152 ldw y, (0x06, sp) + 000089 90 50 [ 2] 153 negw y + 00008B 1E 04 [ 2] 154 ldw x, (0x04, sp) + 00008D 24 01 [ 1] 155 jrnc 00120$ + 00008F 5C [ 1] 156 incw x + 000090 157 00120$: + 000090 50 [ 2] 158 negw x + 000091 17 06 [ 2] 159 ldw (0x06, sp), y + 000093 1F 04 [ 2] 160 ldw (0x04, sp), x + 000095 161 00102$: + 162 ; ../_ltoa.c: 82: _ultoa(value, string, radix); + 000095 7B 0A [ 1] 163 ld a, (0x0a, sp) + 000097 88 [ 1] 164 push a + 000098 1E 09 [ 2] 165 ldw x, (0x09, sp) + 00009A 89 [ 2] 166 pushw x + 00009B 1E 09 [ 2] 167 ldw x, (0x09, sp) + 00009D 89 [ 2] 168 pushw x + 00009E 1E 09 [ 2] 169 ldw x, (0x09, sp) + 0000A0 89 [ 2] 170 pushw x + 0000A1 8Ds00r00r00 [ 5] 171 callf __ultoa + 0000A5 5B 07 [ 2] 172 addw sp, #7 + 173 ; ../_ltoa.c: 83: } + 0000A7 87 [ 5] 174 retf + 175 .area CODE + 176 .area CONST + 177 .area INITIALIZER + 178 .area CABS (ABS) diff --git a/device/lib/stm8-large/_ltoa.rel b/device/lib/stm8-large/_ltoa.rel new file mode 100644 index 0000000..7edc805 --- /dev/null +++ b/device/lib/stm8-large/_ltoa.rel @@ -0,0 +1,68 @@ +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 A8 flags 0 addr 0 +S __ultoa Def000000 +S __ltoa Def000075 +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 31 6B 04 0F 03 0F 02 0F 01 1E 03 89 +R 00 00 00 09 +T 00 00 19 1E 03 89 1E 31 89 1E 31 89 8D +R 00 00 00 09 +T 00 00 23 00 00 00 5B 08 9F AB 30 A1 39 23 02 AB +R 00 00 00 09 82 03 00 01 +T 00 00 30 07 +R 00 00 00 09 +T 00 00 31 +R 00 00 00 09 +T 00 00 31 0A 27 5F 41 7B 27 41 72 FB 25 F7 1E 03 +R 00 00 00 09 +T 00 00 3E 89 1E 03 89 1E 31 89 1E 31 89 8D +R 00 00 00 09 +T 00 00 49 00 00 00 5B 08 1F 2D 17 2B 1E 2D 26 B6 +R 00 00 00 09 82 03 00 02 +T 00 00 56 1E 2B 26 B2 1E 2F +R 00 00 00 09 +T 00 00 5C +R 00 00 00 09 +T 00 00 5C 90 5F 7B 27 90 97 72 F9 25 90 F6 F7 5C +R 00 00 00 09 +T 00 00 69 0C 27 7B 27 A1 20 26 EB 7F 5B 27 87 +R 00 00 00 09 +T 00 00 75 +R 00 00 00 09 +T 00 00 75 0D 04 2A 1C 7B 0A A1 0A 26 16 1E 08 A6 +R 00 00 00 09 +T 00 00 82 2D F7 5C 1F 08 16 06 90 50 1E 04 24 01 +R 00 00 00 09 +T 00 00 8F 5C +R 00 00 00 09 +T 00 00 90 +R 00 00 00 09 +T 00 00 90 50 17 06 1F 04 +R 00 00 00 09 +T 00 00 95 +R 00 00 00 09 +T 00 00 95 7B 0A 88 1E 09 89 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 00 A2 00 00 00 5B 07 87 +R 00 00 00 09 80 03 00 09 diff --git a/device/lib/stm8-large/_ltoa.sym b/device/lib/stm8-large/_ltoa.sym new file mode 100644 index 0000000..58118fb --- /dev/null +++ b/device/lib/stm8-large/_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 000075 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 A8 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_memchr.asm b/device/lib/stm8-large/_memchr.asm new file mode 100644 index 0000000..f1990bd --- /dev/null +++ b/device/lib/stm8-large/_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, (0x09, sp) +; ../_memchr.c: 34: unsigned char *end = p + n; + ldw (0x01, sp), x + addw x, (0x0d, 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, (0x0c, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_memchr.lst b/device/lib/stm8-large/_memchr.lst new file mode 100644 index 0000000..ff1de49 --- /dev/null +++ b/device/lib/stm8-large/_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 09 [ 2] 56 ldw x, (0x09, sp) + 57 ; ../_memchr.c: 34: unsigned char *end = p + n; + 000004 1F 01 [ 2] 58 ldw (0x01, sp), x + 000006 72 FB 0D [ 2] 59 addw x, (0x0d, 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 0C [ 1] 70 ld a, (0x0c, 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 87 [ 5] 87 retf + 88 .area CODE + 89 .area CONST + 90 .area INITIALIZER + 91 .area CABS (ABS) diff --git a/device/lib/stm8-large/_memchr.rel b/device/lib/stm8-large/_memchr.rel new file mode 100644 index 0000000..1472a41 --- /dev/null +++ b/device/lib/stm8-large/_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 09 1F 01 72 FB 0D 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 0C 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_memchr.sym b/device/lib/stm8-large/_memchr.sym new file mode 100644 index 0000000..2a68751 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_memcmp.asm b/device/lib/stm8-large/_memcmp.asm new file mode 100644 index 0000000..a8f78b6 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0d, sp) +; ../_memcmp.c: 36: while ( --count && *((char *)buf1) == *((char *)buf2) ) { + jreq 00107$ + ldw y, (0x0d, sp) + ldw (0x04, sp), y +00104$: + ldw x, (0x04, sp) + decw x + ldw (0x04, sp), x + ldw x, (0x09, sp) + ldw y, (0x0b, 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 (0x09, sp), x +; ../_memcmp.c: 38: buf2 = (char *)buf2 + 1; + ldw x, (0x01, sp) + incw x + ldw (0x0b, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_memcmp.lst b/device/lib/stm8-large/_memcmp.lst new file mode 100644 index 0000000..943ac07 --- /dev/null +++ b/device/lib/stm8-large/_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 0D [ 2] 57 ldw x, (0x0d, sp) + 58 ; ../_memcmp.c: 36: while ( --count && *((char *)buf1) == *((char *)buf2) ) { + 000004 27 34 [ 1] 59 jreq 00107$ + 000006 16 0D [ 2] 60 ldw y, (0x0d, 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 09 [ 2] 66 ldw x, (0x09, sp) + 000011 16 0B [ 2] 67 ldw y, (0x0b, 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 09 [ 2] 79 ldw (0x09, 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 0B [ 2] 83 ldw (0x0b, 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 87 [ 5] 97 retf + 98 .area CODE + 99 .area CONST + 100 .area INITIALIZER + 101 .area CABS (ABS) diff --git a/device/lib/stm8-large/_memcmp.rel b/device/lib/stm8-large/_memcmp.rel new file mode 100644 index 0000000..195fea1 --- /dev/null +++ b/device/lib/stm8-large/_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 0D 27 34 16 0D 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 09 16 0B 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 09 1E 01 5C 1F 0B 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_memcmp.sym b/device/lib/stm8-large/_memcmp.sym new file mode 100644 index 0000000..7371d2b --- /dev/null +++ b/device/lib/stm8-large/_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-large/_memmove.asm b/device/lib/stm8-large/_memmove.asm new file mode 100644 index 0000000..5555b3e --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0e, sp) + ldw (0x03, sp), y +; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) { + ldw x, (0x10, sp) + ldw y, (0x0e, sp) + ldw (0x01, sp), y +; ../_memmove.c: 44: d = ((char *)dst)+acount-1; + ldw y, (0x0e, sp) + ldw (0x05, sp), y +; ../_memmove.c: 45: s = ((char *)src)+acount-1; + ldw y, (0x10, sp) + ldw (0x07, sp), y +; ../_memmove.c: 46: while (acount--) { + ldw y, (0x12, 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, (0x12, sp) + decw x + exgw x, y +; ../_memmove.c: 45: s = ((char *)src)+acount-1; + ldw x, (0x07, sp) + addw x, (0x12, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_memmove.lst b/device/lib/stm8-large/_memmove.lst new file mode 100644 index 0000000..fa0f36e --- /dev/null +++ b/device/lib/stm8-large/_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 0E [ 2] 56 ldw y, (0x0e, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 58 ; ../_memmove.c: 40: if ((uintptr_t)src < (uintptr_t)dst) { + 000006 1E 10 [ 2] 59 ldw x, (0x10, sp) + 000008 16 0E [ 2] 60 ldw y, (0x0e, sp) + 00000A 17 01 [ 2] 61 ldw (0x01, sp), y + 62 ; ../_memmove.c: 44: d = ((char *)dst)+acount-1; + 00000C 16 0E [ 2] 63 ldw y, (0x0e, sp) + 00000E 17 05 [ 2] 64 ldw (0x05, sp), y + 65 ; ../_memmove.c: 45: s = ((char *)src)+acount-1; + 000010 16 10 [ 2] 66 ldw y, (0x10, sp) + 000012 17 07 [ 2] 67 ldw (0x07, sp), y + 68 ; ../_memmove.c: 46: while (acount--) { + 000014 16 12 [ 2] 69 ldw y, (0x12, 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 12 [ 2] 76 addw x, (0x12, 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 12 [ 2] 81 addw x, (0x12, 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 87 [ 5] 136 retf + 137 .area CODE + 138 .area CONST + 139 .area INITIALIZER + 140 .area CABS (ABS) diff --git a/device/lib/stm8-large/_memmove.rel b/device/lib/stm8-large/_memmove.rel new file mode 100644 index 0000000..7a0fdcb --- /dev/null +++ b/device/lib/stm8-large/_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 0E 17 03 1E 10 16 0E 17 01 16 +R 00 00 00 09 +T 00 00 0D 0E 17 05 16 10 17 07 16 12 17 09 13 01 +R 00 00 00 09 +T 00 00 1A 24 2B 1E 05 72 FB 12 5A 51 1E 07 72 FB +R 00 00 00 09 +T 00 00 27 12 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_memmove.sym b/device/lib/stm8-large/_memmove.sym new file mode 100644 index 0000000..588ce3b --- /dev/null +++ b/device/lib/stm8-large/_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-large/_memset.asm b/device/lib/stm8-large/_memset.asm new file mode 100644 index 0000000..19c0cec --- /dev/null +++ b/device/lib/stm8-large/_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, (0x06, sp) +; ../_memset.c: 46: while (n--) + ldw (0x01, sp), x + ldw y, (0x0a, sp) +00101$: + ldw x, y + decw y + tnzw x + jreq 00103$ +; ../_memset.c: 48: *(unsigned char *) ret = c; + ld a, (0x09, 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, (0x06, sp) +; ../_memset.c: 53: } + addw sp, #2 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_memset.lst b/device/lib/stm8-large/_memset.lst new file mode 100644 index 0000000..01d217f --- /dev/null +++ b/device/lib/stm8-large/_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 06 [ 2] 56 ldw x, (0x06, sp) + 57 ; ../_memset.c: 46: while (n--) + 000004 1F 01 [ 2] 58 ldw (0x01, sp), x + 000006 16 0A [ 2] 59 ldw y, (0x0a, 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 09 [ 1] 66 ld a, (0x09, 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 06 [ 2] 76 ldw x, (0x06, sp) + 77 ; ../_memset.c: 53: } + 00001C 5B 02 [ 2] 78 addw sp, #2 + 00001E 87 [ 5] 79 retf + 80 .area CODE + 81 .area CONST + 82 .area INITIALIZER + 83 .area CABS (ABS) diff --git a/device/lib/stm8-large/_memset.rel b/device/lib/stm8-large/_memset.rel new file mode 100644 index 0000000..f89a346 --- /dev/null +++ b/device/lib/stm8-large/_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 06 1F 01 16 0A +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 09 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 06 5B 02 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_memset.sym b/device/lib/stm8-large/_memset.sym new file mode 100644 index 0000000..044f739 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_modschar.asm b/device/lib/stm8-large/_modschar.asm new file mode 100644 index 0000000..06c8d00 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x04, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x05, sp) + ld yl, a + rlc a + clr a + sbc a, #0x00 + ld yh, a + pushw y + pushw x + callf __modsint + addw sp, #4 +; ../_modschar.c: 34: } + retf +; ../_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, (0x06, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x07, sp) + ld (0x02, sp), a + clr (0x01, sp) + ldw y, (0x01, sp) + pushw y + pushw x + callf __modsint +; ../_modschar.c: 40: } + addw sp, #6 + retf +; ../_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, (0x04, sp) + clrw y + ld yl, a + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + pushw x + pushw y + callf __modsint + addw sp, #4 +; ../_modschar.c: 46: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_modschar.lst b/device/lib/stm8-large/_modschar.lst new file mode 100644 index 0000000..46ccc49 --- /dev/null +++ b/device/lib/stm8-large/_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 04 [ 1] 57 ld a, (0x04, 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 05 [ 1] 63 ld a, (0x05, 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 8Ds00r00r00 [ 5] 71 callf __modsint + 000019 5B 04 [ 2] 72 addw sp, #4 + 73 ; ../_modschar.c: 34: } + 00001B 87 [ 5] 74 retf + 75 ; ../_modschar.c: 37: _moduschar (unsigned char x, unsigned char y) + 76 ; ----------------------------------------- + 77 ; function _moduschar + 78 ; ----------------------------------------- + 00001C 79 __moduschar: + 00001C 52 02 [ 2] 80 sub sp, #2 + 81 ; ../_modschar.c: 39: return ((int)((signed char)x) % (int)y); + 00001E 7B 06 [ 1] 82 ld a, (0x06, sp) + 000020 97 [ 1] 83 ld xl, a + 000021 49 [ 1] 84 rlc a + 000022 4F [ 1] 85 clr a + 000023 A2 00 [ 1] 86 sbc a, #0x00 + 000025 95 [ 1] 87 ld xh, a + 000026 7B 07 [ 1] 88 ld a, (0x07, sp) + 000028 6B 02 [ 1] 89 ld (0x02, sp), a + 00002A 0F 01 [ 1] 90 clr (0x01, sp) + 00002C 16 01 [ 2] 91 ldw y, (0x01, sp) + 00002E 90 89 [ 2] 92 pushw y + 000030 89 [ 2] 93 pushw x + 000031 8Ds00r00r00 [ 5] 94 callf __modsint + 95 ; ../_modschar.c: 40: } + 000035 5B 06 [ 2] 96 addw sp, #6 + 000037 87 [ 5] 97 retf + 98 ; ../_modschar.c: 43: _modsuchar (signed char x, signed char y) + 99 ; ----------------------------------------- + 100 ; function _modsuchar + 101 ; ----------------------------------------- + 000038 102 __modsuchar: + 103 ; ../_modschar.c: 45: return ((int)((unsigned char)x) % (int)y); + 000038 7B 04 [ 1] 104 ld a, (0x04, sp) + 00003A 90 5F [ 1] 105 clrw y + 00003C 90 97 [ 1] 106 ld yl, a + 00003E 7B 05 [ 1] 107 ld a, (0x05, sp) + 000040 97 [ 1] 108 ld xl, a + 000041 49 [ 1] 109 rlc a + 000042 4F [ 1] 110 clr a + 000043 A2 00 [ 1] 111 sbc a, #0x00 + 000045 95 [ 1] 112 ld xh, a + 000046 89 [ 2] 113 pushw x + 000047 90 89 [ 2] 114 pushw y + 000049 8Ds00r00r00 [ 5] 115 callf __modsint + 00004D 5B 04 [ 2] 116 addw sp, #4 + 117 ; ../_modschar.c: 46: } + 00004F 87 [ 5] 118 retf + 119 .area CODE + 120 .area CONST + 121 .area INITIALIZER + 122 .area CABS (ABS) diff --git a/device/lib/stm8-large/_modschar.rel b/device/lib/stm8-large/_modschar.rel new file mode 100644 index 0000000..0c5380c --- /dev/null +++ b/device/lib/stm8-large/_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 50 flags 0 addr 0 +S __modsuchar Def000038 +S __moduschar Def00001C +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 04 97 49 4F A2 00 95 7B 05 90 97 49 +R 00 00 00 09 +T 00 00 0D 4F A2 00 90 95 90 89 89 8D +R 00 00 00 09 +T 00 00 16 00 00 00 5B 04 87 +R 00 00 00 09 82 03 00 01 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 52 02 7B 06 97 49 4F A2 00 95 7B 07 6B +R 00 00 00 09 +T 00 00 29 02 0F 01 16 01 90 89 89 8D +R 00 00 00 09 +T 00 00 32 00 00 00 5B 06 87 +R 00 00 00 09 82 03 00 01 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 7B 04 90 5F 90 97 7B 05 97 49 4F A2 00 +R 00 00 00 09 +T 00 00 45 95 89 90 89 8D 00 00 00 5B 04 87 +R 00 00 00 09 82 08 00 01 diff --git a/device/lib/stm8-large/_modschar.sym b/device/lib/stm8-large/_modschar.sym new file mode 100644 index 0000000..a585b88 --- /dev/null +++ b/device/lib/stm8-large/_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 000038 GR + 9 __moduschar 00001C 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 50 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_modsint.asm b/device/lib/stm8-large/_modsint.asm new file mode 100644 index 0000000..5fe25bd --- /dev/null +++ b/device/lib/stm8-large/_modsint.asm @@ -0,0 +1,103 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _modsint + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __modsint +;-------------------------------------------------------- +; 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 +; ../_modsint.c: 203: int _modsint (int a, int b) +; ----------------------------------------- +; function _modsint +; ----------------------------------------- +__modsint: + sub sp, #5 +; ../_modsint.c: 207: r = (unsigned)(a < 0 ? -a : a) % (unsigned)(b < 0 ? -b : b); + tnz (0x09, sp) + jrmi 00125$ + clr (0x01, sp) + jra 00126$ +00125$: + ld a, #0x01 + ld (0x01, sp), a +00126$: + tnz (0x01, sp) + jreq 00106$ + ldw x, (0x09, sp) + negw x + .byte 0xc5 +00106$: + ldw x, (0x09, sp) +00107$: + ldw (0x02, sp), x + tnz (0x0b, sp) + jrpl 00108$ + ld a, (0x0c, sp) + neg a + ld (0x05, sp), a + clr a + sbc a, (0x0b, sp) + ld (0x04, sp), a + jra 00109$ +00108$: + ldw y, (0x0b, sp) + ldw (0x04, sp), y +00109$: + ldw y, (0x04, sp) + ldw x, (0x02, sp) + divw x, y + ldw x, y +; ../_modsint.c: 209: if (a < 0) + tnz (0x01, sp) + jreq 00102$ +; ../_modsint.c: 210: return -r; + negw x +; ../_modsint.c: 212: return r; +00102$: +; ../_modsint.c: 213: } + addw sp, #5 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_modsint.lst b/device/lib/stm8-large/_modsint.lst new file mode 100644 index 0000000..a0fac23 --- /dev/null +++ b/device/lib/stm8-large/_modsint.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 _modsint + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __modsint + 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 ; ../_modsint.c: 203: int _modsint (int a, int b) + 50 ; ----------------------------------------- + 51 ; function _modsint + 52 ; ----------------------------------------- + 000000 53 __modsint: + 000000 52 05 [ 2] 54 sub sp, #5 + 55 ; ../_modsint.c: 207: r = (unsigned)(a < 0 ? -a : a) % (unsigned)(b < 0 ? -b : b); + 000002 0D 09 [ 1] 56 tnz (0x09, sp) + 000004 2B 04 [ 1] 57 jrmi 00125$ + 000006 0F 01 [ 1] 58 clr (0x01, sp) + 000008 20 04 [ 2] 59 jra 00126$ + 00000A 60 00125$: + 00000A A6 01 [ 1] 61 ld a, #0x01 + 00000C 6B 01 [ 1] 62 ld (0x01, sp), a + 00000E 63 00126$: + 00000E 0D 01 [ 1] 64 tnz (0x01, sp) + 000010 27 04 [ 1] 65 jreq 00106$ + 000012 1E 09 [ 2] 66 ldw x, (0x09, sp) + 000014 50 [ 2] 67 negw x + 000015 C5 68 .byte 0xc5 + 000016 69 00106$: + 000016 1E 09 [ 2] 70 ldw x, (0x09, sp) + 000018 71 00107$: + 000018 1F 02 [ 2] 72 ldw (0x02, sp), x + 00001A 0D 0B [ 1] 73 tnz (0x0b, sp) + 00001C 2A 0C [ 1] 74 jrpl 00108$ + 00001E 7B 0C [ 1] 75 ld a, (0x0c, sp) + 000020 40 [ 1] 76 neg a + 000021 6B 05 [ 1] 77 ld (0x05, sp), a + 000023 4F [ 1] 78 clr a + 000024 12 0B [ 1] 79 sbc a, (0x0b, sp) + 000026 6B 04 [ 1] 80 ld (0x04, sp), a + 000028 20 04 [ 2] 81 jra 00109$ + 00002A 82 00108$: + 00002A 16 0B [ 2] 83 ldw y, (0x0b, sp) + 00002C 17 04 [ 2] 84 ldw (0x04, sp), y + 00002E 85 00109$: + 00002E 16 04 [ 2] 86 ldw y, (0x04, sp) + 000030 1E 02 [ 2] 87 ldw x, (0x02, sp) + 000032 65 [ 2] 88 divw x, y + 000033 93 [ 1] 89 ldw x, y + 90 ; ../_modsint.c: 209: if (a < 0) + 000034 0D 01 [ 1] 91 tnz (0x01, sp) + 000036 27 01 [ 1] 92 jreq 00102$ + 93 ; ../_modsint.c: 210: return -r; + 000038 50 [ 2] 94 negw x + 95 ; ../_modsint.c: 212: return r; + 000039 96 00102$: + 97 ; ../_modsint.c: 213: } + 000039 5B 05 [ 2] 98 addw sp, #5 + 00003B 87 [ 5] 99 retf + 100 .area CODE + 101 .area CONST + 102 .area INITIALIZER + 103 .area CABS (ABS) diff --git a/device/lib/stm8-large/_modsint.rel b/device/lib/stm8-large/_modsint.rel new file mode 100644 index 0000000..b9c5e0a --- /dev/null +++ b/device/lib/stm8-large/_modsint.rel @@ -0,0 +1,51 @@ +XH3 +H B areas 2 global symbols +M _modsint +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 3C flags 0 addr 0 +S __modsint Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 05 0D 09 2B 04 0F 01 20 04 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A A6 01 6B 01 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 0D 01 27 04 1E 09 50 C5 +R 00 00 00 09 +T 00 00 16 +R 00 00 00 09 +T 00 00 16 1E 09 +R 00 00 00 09 +T 00 00 18 +R 00 00 00 09 +T 00 00 18 1F 02 0D 0B 2A 0C 7B 0C 40 6B 05 4F 12 +R 00 00 00 09 +T 00 00 25 0B 6B 04 20 04 +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 16 0B 17 04 +R 00 00 00 09 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E 16 04 1E 02 65 93 0D 01 27 01 50 +R 00 00 00 09 +T 00 00 39 +R 00 00 00 09 +T 00 00 39 5B 05 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_modsint.sym b/device/lib/stm8-large/_modsint.sym new file mode 100644 index 0000000..6b288d2 --- /dev/null +++ b/device/lib/stm8-large/_modsint.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 __modsint 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 3C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_modslong.asm b/device/lib/stm8-large/_modslong.asm new file mode 100644 index 0000000..c25006a --- /dev/null +++ b/device/lib/stm8-large/_modslong.asm @@ -0,0 +1,142 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _modslong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __modslong +;-------------------------------------------------------- +; 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 +; ../_modslong.c: 259: _modslong (long a, long b) +; ----------------------------------------- +; function _modslong +; ----------------------------------------- +__modslong: + sub sp, #9 +; ../_modslong.c: 263: r = (unsigned long)(a < 0 ? -a : a) % (unsigned long)(b < 0 ? -b : b); + tnz (0x0d, sp) + jrmi 00125$ + clr (0x01, sp) + jra 00126$ +00125$: + ld a, #0x01 + ld (0x01, sp), a +00126$: + tnz (0x01, sp) + jreq 00106$ + ldw y, (0x0f, sp) + negw y + ldw x, (0x0d, sp) + jrnc 00128$ + incw x +00128$: + negw x + ldw (0x08, sp), y + ldw (0x06, sp), x + jra 00107$ +00106$: + ldw y, (0x0f, sp) + ldw (0x08, sp), y + ldw y, (0x0d, sp) + ldw (0x06, sp), y +00107$: + ldw y, (0x08, sp) + ldw (0x04, sp), y + ldw y, (0x06, sp) + ldw (0x02, sp), y + tnz (0x11, sp) + jrpl 00108$ + ld a, (0x14, sp) + neg a + ld (0x09, sp), a + clr a + sbc a, (0x13, sp) + ld (0x08, sp), a + clr a + sbc a, (0x12, sp) + ld (0x07, sp), a + clr a + sbc a, (0x11, sp) + ld (0x06, sp), a + jra 00109$ +00108$: + ldw y, (0x13, sp) + ldw (0x08, sp), y + ldw y, (0x11, sp) + ldw (0x06, sp), y +00109$: + ldw x, (0x08, sp) + ldw y, (0x06, sp) + pushw x + pushw y + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + callf __modulong + addw sp, #8 + ldw (0x08, sp), x + ldw (0x06, sp), y +; ../_modslong.c: 265: if (a < 0) + tnz (0x01, sp) + jreq 00102$ +; ../_modslong.c: 266: return -r; + ldw x, (0x08, sp) + negw x + ldw y, (0x06, sp) + jrnc 00131$ + incw y +00131$: + negw y + jra 00104$ +00102$: +; ../_modslong.c: 268: return r; + ldw x, (0x08, sp) + ldw y, (0x06, sp) +00104$: +; ../_modslong.c: 269: } + addw sp, #9 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_modslong.lst b/device/lib/stm8-large/_modslong.lst new file mode 100644 index 0000000..f52490b --- /dev/null +++ b/device/lib/stm8-large/_modslong.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 _modslong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __modslong + 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 ; ../_modslong.c: 259: _modslong (long a, long b) + 50 ; ----------------------------------------- + 51 ; function _modslong + 52 ; ----------------------------------------- + 000000 53 __modslong: + 000000 52 09 [ 2] 54 sub sp, #9 + 55 ; ../_modslong.c: 263: r = (unsigned long)(a < 0 ? -a : a) % (unsigned long)(b < 0 ? -b : b); + 000002 0D 0D [ 1] 56 tnz (0x0d, sp) + 000004 2B 04 [ 1] 57 jrmi 00125$ + 000006 0F 01 [ 1] 58 clr (0x01, sp) + 000008 20 04 [ 2] 59 jra 00126$ + 00000A 60 00125$: + 00000A A6 01 [ 1] 61 ld a, #0x01 + 00000C 6B 01 [ 1] 62 ld (0x01, sp), a + 00000E 63 00126$: + 00000E 0D 01 [ 1] 64 tnz (0x01, sp) + 000010 27 10 [ 1] 65 jreq 00106$ + 000012 16 0F [ 2] 66 ldw y, (0x0f, sp) + 000014 90 50 [ 2] 67 negw y + 000016 1E 0D [ 2] 68 ldw x, (0x0d, sp) + 000018 24 01 [ 1] 69 jrnc 00128$ + 00001A 5C [ 1] 70 incw x + 00001B 71 00128$: + 00001B 50 [ 2] 72 negw x + 00001C 17 08 [ 2] 73 ldw (0x08, sp), y + 00001E 1F 06 [ 2] 74 ldw (0x06, sp), x + 000020 20 08 [ 2] 75 jra 00107$ + 000022 76 00106$: + 000022 16 0F [ 2] 77 ldw y, (0x0f, sp) + 000024 17 08 [ 2] 78 ldw (0x08, sp), y + 000026 16 0D [ 2] 79 ldw y, (0x0d, sp) + 000028 17 06 [ 2] 80 ldw (0x06, sp), y + 00002A 81 00107$: + 00002A 16 08 [ 2] 82 ldw y, (0x08, sp) + 00002C 17 04 [ 2] 83 ldw (0x04, sp), y + 00002E 16 06 [ 2] 84 ldw y, (0x06, sp) + 000030 17 02 [ 2] 85 ldw (0x02, sp), y + 000032 0D 11 [ 1] 86 tnz (0x11, sp) + 000034 2A 16 [ 1] 87 jrpl 00108$ + 000036 7B 14 [ 1] 88 ld a, (0x14, sp) + 000038 40 [ 1] 89 neg a + 000039 6B 09 [ 1] 90 ld (0x09, sp), a + 00003B 4F [ 1] 91 clr a + 00003C 12 13 [ 1] 92 sbc a, (0x13, sp) + 00003E 6B 08 [ 1] 93 ld (0x08, sp), a + 000040 4F [ 1] 94 clr a + 000041 12 12 [ 1] 95 sbc a, (0x12, sp) + 000043 6B 07 [ 1] 96 ld (0x07, sp), a + 000045 4F [ 1] 97 clr a + 000046 12 11 [ 1] 98 sbc a, (0x11, sp) + 000048 6B 06 [ 1] 99 ld (0x06, sp), a + 00004A 20 08 [ 2] 100 jra 00109$ + 00004C 101 00108$: + 00004C 16 13 [ 2] 102 ldw y, (0x13, sp) + 00004E 17 08 [ 2] 103 ldw (0x08, sp), y + 000050 16 11 [ 2] 104 ldw y, (0x11, sp) + 000052 17 06 [ 2] 105 ldw (0x06, sp), y + 000054 106 00109$: + 000054 1E 08 [ 2] 107 ldw x, (0x08, sp) + 000056 16 06 [ 2] 108 ldw y, (0x06, sp) + 000058 89 [ 2] 109 pushw x + 000059 90 89 [ 2] 110 pushw y + 00005B 1E 08 [ 2] 111 ldw x, (0x08, sp) + 00005D 89 [ 2] 112 pushw x + 00005E 1E 08 [ 2] 113 ldw x, (0x08, sp) + 000060 89 [ 2] 114 pushw x + 000061 8Ds00r00r00 [ 5] 115 callf __modulong + 000065 5B 08 [ 2] 116 addw sp, #8 + 000067 1F 08 [ 2] 117 ldw (0x08, sp), x + 000069 17 06 [ 2] 118 ldw (0x06, sp), y + 119 ; ../_modslong.c: 265: if (a < 0) + 00006B 0D 01 [ 1] 120 tnz (0x01, sp) + 00006D 27 0D [ 1] 121 jreq 00102$ + 122 ; ../_modslong.c: 266: return -r; + 00006F 1E 08 [ 2] 123 ldw x, (0x08, sp) + 000071 50 [ 2] 124 negw x + 000072 16 06 [ 2] 125 ldw y, (0x06, sp) + 000074 24 02 [ 1] 126 jrnc 00131$ + 000076 90 5C [ 1] 127 incw y + 000078 128 00131$: + 000078 90 50 [ 2] 129 negw y + 00007A 20 04 [ 2] 130 jra 00104$ + 00007C 131 00102$: + 132 ; ../_modslong.c: 268: return r; + 00007C 1E 08 [ 2] 133 ldw x, (0x08, sp) + 00007E 16 06 [ 2] 134 ldw y, (0x06, sp) + 000080 135 00104$: + 136 ; ../_modslong.c: 269: } + 000080 5B 09 [ 2] 137 addw sp, #9 + 000082 87 [ 5] 138 retf + 139 .area CODE + 140 .area CONST + 141 .area INITIALIZER + 142 .area CABS (ABS) diff --git a/device/lib/stm8-large/_modslong.rel b/device/lib/stm8-large/_modslong.rel new file mode 100644 index 0000000..25a1937 --- /dev/null +++ b/device/lib/stm8-large/_modslong.rel @@ -0,0 +1,70 @@ +XH3 +H B areas 3 global symbols +M _modslong +O -mstm8 +S .__.ABS. Def000000 +S __modulong 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 83 flags 0 addr 0 +S __modslong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 09 0D 0D 2B 04 0F 01 20 04 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A A6 01 6B 01 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 0D 01 27 10 16 0F 90 50 1E 0D 24 01 5C +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 50 17 08 1F 06 20 08 +R 00 00 00 09 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 16 0F 17 08 16 0D 17 06 +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 16 08 17 04 16 06 17 02 0D 11 2A 16 7B +R 00 00 00 09 +T 00 00 37 14 40 6B 09 4F 12 13 6B 08 4F 12 12 6B +R 00 00 00 09 +T 00 00 44 07 4F 12 11 6B 06 20 08 +R 00 00 00 09 +T 00 00 4C +R 00 00 00 09 +T 00 00 4C 16 13 17 08 16 11 17 06 +R 00 00 00 09 +T 00 00 54 +R 00 00 00 09 +T 00 00 54 1E 08 16 06 89 90 89 1E 08 89 1E 08 89 +R 00 00 00 09 +T 00 00 61 8D 00 00 00 5B 08 1F 08 17 06 0D 01 27 +R 00 00 00 09 82 04 00 01 +T 00 00 6E 0D 1E 08 50 16 06 24 02 90 5C +R 00 00 00 09 +T 00 00 78 +R 00 00 00 09 +T 00 00 78 90 50 20 04 +R 00 00 00 09 +T 00 00 7C +R 00 00 00 09 +T 00 00 7C 1E 08 16 06 +R 00 00 00 09 +T 00 00 80 +R 00 00 00 09 +T 00 00 80 5B 09 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_modslong.sym b/device/lib/stm8-large/_modslong.sym new file mode 100644 index 0000000..ad1eae6 --- /dev/null +++ b/device/lib/stm8-large/_modslong.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 __modslong 000000 GR + __modulong ****** 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 83 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_modslonglong.asm b/device/lib/stm8-large/_modslonglong.asm new file mode 100644 index 0000000..29ab7e8 --- /dev/null +++ b/device/lib/stm8-large/_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 (0x17, 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 (0x1f, 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, (0x1f, sp) + neg a + ld (0x11, sp), a + clr a + sbc a, (0x1e, sp) + ld (0x10, sp), a + clr a + sbc a, (0x1d, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x1c, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x1b, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x1a, sp) + ld (0x0c, sp), a + ldw x, (0x18, sp) + jrnc 00129$ + incw x +00129$: + negw x + pop a + ldw (0x17, sp), x + ldw y, (0x0f, sp) + ldw (0x1d, sp), y + ldw y, (0x0d, sp) + ldw (0x1b, sp), y + ldw y, (0x0b, sp) + ldw (0x19, sp), y +00102$: +; ../_modslonglong.c: 44: if (denominatorneg) + tnz a + jreq 00104$ +; ../_modslonglong.c: 45: denominator = -denominator; + ld a, (0x26, sp) + neg a + ld (0x10, sp), a + clr a + sbc a, (0x25, sp) + ld (0x0f, sp), a + clr a + sbc a, (0x24, sp) + ld (0x0e, sp), a + clr a + sbc a, (0x23, sp) + ld (0x0d, sp), a + clr a + sbc a, (0x22, sp) + ld (0x0c, sp), a + clr a + sbc a, (0x21, sp) + ldw x, (0x1f, sp) + jrnc 00131$ + incw x +00131$: + negw x + ld (0x21, sp), a + ldw (0x1f, sp), x + ldw y, (0x0f, sp) + ldw (0x25, sp), y + ldw y, (0x0d, sp) + ldw (0x23, sp), y + ld a, (0x0c, sp) + ld (0x22, sp), a +00104$: +; ../_modslonglong.c: 47: r = (unsigned long long)numerator % (unsigned long long)denominator; + ldw y, (0x1d, sp) + ldw (0x07, sp), y + ldw y, (0x1b, sp) + ldw (0x05, sp), y + ldw y, (0x19, sp) + ldw (0x03, sp), y + ldw y, (0x17, sp) + ldw (0x01, sp), y + ldw x, (0x25, sp) + ldw (0x0f, sp), x + ldw x, (0x23, sp) + ldw (0x0d, sp), x + ldw x, (0x21, sp) + ldw (0x0b, sp), x + ldw x, (0x1f, 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 + callf __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, (0x15, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_modslonglong.lst b/device/lib/stm8-large/_modslonglong.lst new file mode 100644 index 0000000..2820041 --- /dev/null +++ b/device/lib/stm8-large/_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 17 [ 1] 56 tnz (0x17, 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 1F [ 1] 65 tnz (0x1f, 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 1F [ 1] 77 ld a, (0x1f, sp) + 00001D 40 [ 1] 78 neg a + 00001E 6B 11 [ 1] 79 ld (0x11, sp), a + 000020 4F [ 1] 80 clr a + 000021 12 1E [ 1] 81 sbc a, (0x1e, sp) + 000023 6B 10 [ 1] 82 ld (0x10, sp), a + 000025 4F [ 1] 83 clr a + 000026 12 1D [ 1] 84 sbc a, (0x1d, sp) + 000028 6B 0F [ 1] 85 ld (0x0f, sp), a + 00002A 4F [ 1] 86 clr a + 00002B 12 1C [ 1] 87 sbc a, (0x1c, sp) + 00002D 6B 0E [ 1] 88 ld (0x0e, sp), a + 00002F 4F [ 1] 89 clr a + 000030 12 1B [ 1] 90 sbc a, (0x1b, sp) + 000032 6B 0D [ 1] 91 ld (0x0d, sp), a + 000034 4F [ 1] 92 clr a + 000035 12 1A [ 1] 93 sbc a, (0x1a, sp) + 000037 6B 0C [ 1] 94 ld (0x0c, sp), a + 000039 1E 18 [ 2] 95 ldw x, (0x18, 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 17 [ 2] 101 ldw (0x17, sp), x + 000042 16 0F [ 2] 102 ldw y, (0x0f, sp) + 000044 17 1D [ 2] 103 ldw (0x1d, sp), y + 000046 16 0D [ 2] 104 ldw y, (0x0d, sp) + 000048 17 1B [ 2] 105 ldw (0x1b, sp), y + 00004A 16 0B [ 2] 106 ldw y, (0x0b, sp) + 00004C 17 19 [ 2] 107 ldw (0x19, 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 26 [ 1] 113 ld a, (0x26, sp) + 000053 40 [ 1] 114 neg a + 000054 6B 10 [ 1] 115 ld (0x10, sp), a + 000056 4F [ 1] 116 clr a + 000057 12 25 [ 1] 117 sbc a, (0x25, sp) + 000059 6B 0F [ 1] 118 ld (0x0f, sp), a + 00005B 4F [ 1] 119 clr a + 00005C 12 24 [ 1] 120 sbc a, (0x24, sp) + 00005E 6B 0E [ 1] 121 ld (0x0e, sp), a + 000060 4F [ 1] 122 clr a + 000061 12 23 [ 1] 123 sbc a, (0x23, sp) + 000063 6B 0D [ 1] 124 ld (0x0d, sp), a + 000065 4F [ 1] 125 clr a + 000066 12 22 [ 1] 126 sbc a, (0x22, sp) + 000068 6B 0C [ 1] 127 ld (0x0c, sp), a + 00006A 4F [ 1] 128 clr a + 00006B 12 21 [ 1] 129 sbc a, (0x21, sp) + 00006D 1E 1F [ 2] 130 ldw x, (0x1f, 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 21 [ 1] 135 ld (0x21, sp), a + 000075 1F 1F [ 2] 136 ldw (0x1f, sp), x + 000077 16 0F [ 2] 137 ldw y, (0x0f, sp) + 000079 17 25 [ 2] 138 ldw (0x25, sp), y + 00007B 16 0D [ 2] 139 ldw y, (0x0d, sp) + 00007D 17 23 [ 2] 140 ldw (0x23, sp), y + 00007F 7B 0C [ 1] 141 ld a, (0x0c, sp) + 000081 6B 22 [ 1] 142 ld (0x22, sp), a + 000083 143 00104$: + 144 ; ../_modslonglong.c: 47: r = (unsigned long long)numerator % (unsigned long long)denominator; + 000083 16 1D [ 2] 145 ldw y, (0x1d, sp) + 000085 17 07 [ 2] 146 ldw (0x07, sp), y + 000087 16 1B [ 2] 147 ldw y, (0x1b, sp) + 000089 17 05 [ 2] 148 ldw (0x05, sp), y + 00008B 16 19 [ 2] 149 ldw y, (0x19, sp) + 00008D 17 03 [ 2] 150 ldw (0x03, sp), y + 00008F 16 17 [ 2] 151 ldw y, (0x17, sp) + 000091 17 01 [ 2] 152 ldw (0x01, sp), y + 000093 1E 25 [ 2] 153 ldw x, (0x25, sp) + 000095 1F 0F [ 2] 154 ldw (0x0f, sp), x + 000097 1E 23 [ 2] 155 ldw x, (0x23, sp) + 000099 1F 0D [ 2] 156 ldw (0x0d, sp), x + 00009B 1E 21 [ 2] 157 ldw x, (0x21, sp) + 00009D 1F 0B [ 2] 158 ldw (0x0b, sp), x + 00009F 1E 1F [ 2] 159 ldw x, (0x1f, 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 8Ds00r00r00 [ 5] 180 callf __modulonglong + 0000C4 5B 12 [ 2] 181 addw sp, #18 + 0000C6 16 0F [ 2] 182 ldw y, (0x0f, sp) + 0000C8 17 07 [ 2] 183 ldw (0x07, sp), y + 0000CA 16 0D [ 2] 184 ldw y, (0x0d, sp) + 0000CC 17 05 [ 2] 185 ldw (0x05, sp), y + 0000CE 16 0B [ 2] 186 ldw y, (0x0b, sp) + 0000D0 17 03 [ 2] 187 ldw (0x03, sp), y + 0000D2 16 09 [ 2] 188 ldw y, (0x09, sp) + 0000D4 17 01 [ 2] 189 ldw (0x01, sp), y + 190 ; ../_modslonglong.c: 49: return (numeratorneg ? -r : r); + 0000D6 0D 11 [ 1] 191 tnz (0x11, sp) + 0000D8 27 2A [ 1] 192 jreq 00107$ + 0000DA 7B 08 [ 1] 193 ld a, (0x08, sp) + 0000DC 40 [ 1] 194 neg a + 0000DD 6B 11 [ 1] 195 ld (0x11, sp), a + 0000DF 4F [ 1] 196 clr a + 0000E0 12 07 [ 1] 197 sbc a, (0x07, sp) + 0000E2 6B 10 [ 1] 198 ld (0x10, sp), a + 0000E4 4F [ 1] 199 clr a + 0000E5 12 06 [ 1] 200 sbc a, (0x06, sp) + 0000E7 6B 0F [ 1] 201 ld (0x0f, sp), a + 0000E9 4F [ 1] 202 clr a + 0000EA 12 05 [ 1] 203 sbc a, (0x05, sp) + 0000EC 6B 0E [ 1] 204 ld (0x0e, sp), a + 0000EE 4F [ 1] 205 clr a + 0000EF 12 04 [ 1] 206 sbc a, (0x04, sp) + 0000F1 6B 0D [ 1] 207 ld (0x0d, sp), a + 0000F3 4F [ 1] 208 clr a + 0000F4 12 03 [ 1] 209 sbc a, (0x03, sp) + 0000F6 6B 0C [ 1] 210 ld (0x0c, sp), a + 0000F8 4F [ 1] 211 clr a + 0000F9 12 02 [ 1] 212 sbc a, (0x02, sp) + 0000FB 6B 0B [ 1] 213 ld (0x0b, sp), a + 0000FD 4F [ 1] 214 clr a + 0000FE 12 01 [ 1] 215 sbc a, (0x01, sp) + 000100 6B 0A [ 1] 216 ld (0x0a, sp), a + 000102 20 10 [ 2] 217 jra 00108$ + 000104 218 00107$: + 000104 16 07 [ 2] 219 ldw y, (0x07, sp) + 000106 17 10 [ 2] 220 ldw (0x10, sp), y + 000108 16 05 [ 2] 221 ldw y, (0x05, sp) + 00010A 17 0E [ 2] 222 ldw (0x0e, sp), y + 00010C 16 03 [ 2] 223 ldw y, (0x03, sp) + 00010E 17 0C [ 2] 224 ldw (0x0c, sp), y + 000110 16 01 [ 2] 225 ldw y, (0x01, sp) + 000112 17 0A [ 2] 226 ldw (0x0a, sp), y + 000114 227 00108$: + 000114 1E 15 [ 2] 228 ldw x, (0x15, sp) + 000116 16 10 [ 2] 229 ldw y, (0x10, sp) + 000118 EF 06 [ 2] 230 ldw (#6, x), y + 00011A 16 0E [ 2] 231 ldw y, (0x0e, sp) + 00011C EF 04 [ 2] 232 ldw (#4, x), y + 00011E 16 0C [ 2] 233 ldw y, (0x0c, sp) + 000120 EF 02 [ 2] 234 ldw (#2, x), y + 000122 16 0A [ 2] 235 ldw y, (0x0a, sp) + 000124 FF [ 2] 236 ldw (x), y + 237 ; ../_modslonglong.c: 50: } + 000125 5B 11 [ 2] 238 addw sp, #17 + 000127 87 [ 5] 239 retf + 240 .area CODE + 241 .area CONST + 242 .area INITIALIZER + 243 .area CABS (ABS) diff --git a/device/lib/stm8-large/_modslonglong.rel b/device/lib/stm8-large/_modslonglong.rel new file mode 100644 index 0000000..ee71524 --- /dev/null +++ b/device/lib/stm8-large/_modslonglong.rel @@ -0,0 +1,100 @@ +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 128 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 17 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 1F 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 1F 40 6B 11 4F 12 1E +R 00 00 00 09 +T 00 00 23 6B 10 4F 12 1D 6B 0F 4F 12 1C 6B 0E 4F +R 00 00 00 09 +T 00 00 30 12 1B 6B 0D 4F 12 1A 6B 0C 1E 18 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 17 16 0F 17 1D 16 0D 17 1B 16 +R 00 00 00 09 +T 00 00 4B 0B 17 19 +R 00 00 00 09 +T 00 00 4E +R 00 00 00 09 +T 00 00 4E 4D 27 32 7B 26 40 6B 10 4F 12 25 6B 0F +R 00 00 00 09 +T 00 00 5B 4F 12 24 6B 0E 4F 12 23 6B 0D 4F 12 22 +R 00 00 00 09 +T 00 00 68 6B 0C 4F 12 21 1E 1F 24 01 5C +R 00 00 00 09 +T 00 00 72 +R 00 00 00 09 +T 00 00 72 50 6B 21 1F 1F 16 0F 17 25 16 0D 17 23 +R 00 00 00 09 +T 00 00 7F 7B 0C 6B 22 +R 00 00 00 09 +T 00 00 83 +R 00 00 00 09 +T 00 00 83 16 1D 17 07 16 1B 17 05 16 19 17 03 16 +R 00 00 00 09 +T 00 00 90 17 17 01 1E 25 1F 0F 1E 23 1F 0D 1E 21 +R 00 00 00 09 +T 00 00 9D 1F 0B 1E 1F 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 8D +R 00 00 00 09 +T 00 00 C1 00 00 00 5B 12 16 0F 17 07 16 0D 17 05 +R 00 00 00 09 82 03 00 00 +T 00 00 CE 16 0B 17 03 16 09 17 01 0D 11 27 2A 7B +R 00 00 00 09 +T 00 00 DB 08 40 6B 11 4F 12 07 6B 10 4F 12 06 6B +R 00 00 00 09 +T 00 00 E8 0F 4F 12 05 6B 0E 4F 12 04 6B 0D 4F 12 +R 00 00 00 09 +T 00 00 F5 03 6B 0C 4F 12 02 6B 0B 4F 12 01 6B 0A +R 00 00 00 09 +T 00 01 02 20 10 +R 00 00 00 09 +T 00 01 04 +R 00 00 00 09 +T 00 01 04 16 07 17 10 16 05 17 0E 16 03 17 0C 16 +R 00 00 00 09 +T 00 01 11 01 17 0A +R 00 00 00 09 +T 00 01 14 +R 00 00 00 09 +T 00 01 14 1E 15 16 10 EF 06 16 0E EF 04 16 0C EF +R 00 00 00 09 +T 00 01 21 02 16 0A FF 5B 11 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_modslonglong.sym b/device/lib/stm8-large/_modslonglong.sym new file mode 100644 index 0000000..e8f99be --- /dev/null +++ b/device/lib/stm8-large/_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 128 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_modulong.asm b/device/lib/stm8-large/_modulong.asm new file mode 100644 index 0000000..97d9a39 --- /dev/null +++ b/device/lib/stm8-large/_modulong.asm @@ -0,0 +1,132 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _modulong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __modulong +;-------------------------------------------------------- +; 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 +; ../_modulong.c: 340: _modulong (unsigned long a, unsigned long b) +; ----------------------------------------- +; function _modulong +; ----------------------------------------- +__modulong: + push a +; ../_modulong.c: 342: unsigned char count = 0; + clr a +; ../_modulong.c: 344: while (!MSB_SET(b)) + clr (0x01, sp) +00103$: + tnz (0x09, sp) + jrmi 00117$ +; ../_modulong.c: 346: b <<= 1; + sll (0x0c, sp) + rlc (0x0b, sp) + rlc (0x0a, sp) + rlc (0x09, sp) +; ../_modulong.c: 347: if (b > a) + ldw x, (0x07, sp) + cpw x, (0x0b, sp) + push a + ld a, (0x07, sp) + sbc a, (0x0b, sp) + ld a, (0x06, sp) + sbc a, (0x0a, sp) + pop a + jrnc 00102$ +; ../_modulong.c: 349: b >>=1; + srl (0x09, sp) + rrc (0x0a, sp) + rrc (0x0b, sp) + rrc (0x0c, sp) +; ../_modulong.c: 350: break; + jra 00117$ +00102$: +; ../_modulong.c: 352: count++; + inc (0x01, sp) + ld a, (0x01, sp) + jra 00103$ +; ../_modulong.c: 354: do +00117$: + ld (0x01, sp), a +00108$: +; ../_modulong.c: 356: if (a >= b) + ldw x, (0x07, sp) + cpw x, (0x0b, sp) + ld a, (0x06, sp) + sbc a, (0x0a, sp) + ld a, (0x05, sp) + sbc a, (0x09, sp) + jrc 00107$ +; ../_modulong.c: 357: a -= b; + ldw y, (0x07, sp) + subw y, (0x0b, sp) + ld a, (0x06, sp) + sbc a, (0x0a, sp) + ld xl, a + ld a, (0x05, sp) + sbc a, (0x09, sp) + ld xh, a + ldw (0x07, sp), y + ldw (0x05, sp), x +00107$: +; ../_modulong.c: 358: b >>= 1; + srl (0x09, sp) + rrc (0x0a, sp) + rrc (0x0b, sp) + rrc (0x0c, sp) +; ../_modulong.c: 360: while (count--); + ld a, (0x01, sp) + dec (0x01, sp) + tnz a + jrne 00108$ +; ../_modulong.c: 362: return a; + ldw x, (0x07, sp) + ldw y, (0x05, sp) +; ../_modulong.c: 363: } + pop a + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_modulong.lst b/device/lib/stm8-large/_modulong.lst new file mode 100644 index 0000000..12ad5f8 --- /dev/null +++ b/device/lib/stm8-large/_modulong.lst @@ -0,0 +1,132 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _modulong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __modulong + 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 ; ../_modulong.c: 340: _modulong (unsigned long a, unsigned long b) + 50 ; ----------------------------------------- + 51 ; function _modulong + 52 ; ----------------------------------------- + 000000 53 __modulong: + 000000 88 [ 1] 54 push a + 55 ; ../_modulong.c: 342: unsigned char count = 0; + 000001 4F [ 1] 56 clr a + 57 ; ../_modulong.c: 344: while (!MSB_SET(b)) + 000002 0F 01 [ 1] 58 clr (0x01, sp) + 000004 59 00103$: + 000004 0D 09 [ 1] 60 tnz (0x09, sp) + 000006 2B 28 [ 1] 61 jrmi 00117$ + 62 ; ../_modulong.c: 346: b <<= 1; + 000008 08 0C [ 1] 63 sll (0x0c, sp) + 00000A 09 0B [ 1] 64 rlc (0x0b, sp) + 00000C 09 0A [ 1] 65 rlc (0x0a, sp) + 00000E 09 09 [ 1] 66 rlc (0x09, sp) + 67 ; ../_modulong.c: 347: if (b > a) + 000010 1E 07 [ 2] 68 ldw x, (0x07, sp) + 000012 13 0B [ 2] 69 cpw x, (0x0b, sp) + 000014 88 [ 1] 70 push a + 000015 7B 07 [ 1] 71 ld a, (0x07, sp) + 000017 12 0B [ 1] 72 sbc a, (0x0b, sp) + 000019 7B 06 [ 1] 73 ld a, (0x06, sp) + 00001B 12 0A [ 1] 74 sbc a, (0x0a, sp) + 00001D 84 [ 1] 75 pop a + 00001E 24 0A [ 1] 76 jrnc 00102$ + 77 ; ../_modulong.c: 349: b >>=1; + 000020 04 09 [ 1] 78 srl (0x09, sp) + 000022 06 0A [ 1] 79 rrc (0x0a, sp) + 000024 06 0B [ 1] 80 rrc (0x0b, sp) + 000026 06 0C [ 1] 81 rrc (0x0c, sp) + 82 ; ../_modulong.c: 350: break; + 000028 20 06 [ 2] 83 jra 00117$ + 00002A 84 00102$: + 85 ; ../_modulong.c: 352: count++; + 00002A 0C 01 [ 1] 86 inc (0x01, sp) + 00002C 7B 01 [ 1] 87 ld a, (0x01, sp) + 00002E 20 D4 [ 2] 88 jra 00103$ + 89 ; ../_modulong.c: 354: do + 000030 90 00117$: + 000030 6B 01 [ 1] 91 ld (0x01, sp), a + 000032 92 00108$: + 93 ; ../_modulong.c: 356: if (a >= b) + 000032 1E 07 [ 2] 94 ldw x, (0x07, sp) + 000034 13 0B [ 2] 95 cpw x, (0x0b, sp) + 000036 7B 06 [ 1] 96 ld a, (0x06, sp) + 000038 12 0A [ 1] 97 sbc a, (0x0a, sp) + 00003A 7B 05 [ 1] 98 ld a, (0x05, sp) + 00003C 12 09 [ 1] 99 sbc a, (0x09, sp) + 00003E 25 13 [ 1] 100 jrc 00107$ + 101 ; ../_modulong.c: 357: a -= b; + 000040 16 07 [ 2] 102 ldw y, (0x07, sp) + 000042 72 F2 0B [ 2] 103 subw y, (0x0b, sp) + 000045 7B 06 [ 1] 104 ld a, (0x06, sp) + 000047 12 0A [ 1] 105 sbc a, (0x0a, sp) + 000049 97 [ 1] 106 ld xl, a + 00004A 7B 05 [ 1] 107 ld a, (0x05, sp) + 00004C 12 09 [ 1] 108 sbc a, (0x09, sp) + 00004E 95 [ 1] 109 ld xh, a + 00004F 17 07 [ 2] 110 ldw (0x07, sp), y + 000051 1F 05 [ 2] 111 ldw (0x05, sp), x + 000053 112 00107$: + 113 ; ../_modulong.c: 358: b >>= 1; + 000053 04 09 [ 1] 114 srl (0x09, sp) + 000055 06 0A [ 1] 115 rrc (0x0a, sp) + 000057 06 0B [ 1] 116 rrc (0x0b, sp) + 000059 06 0C [ 1] 117 rrc (0x0c, sp) + 118 ; ../_modulong.c: 360: while (count--); + 00005B 7B 01 [ 1] 119 ld a, (0x01, sp) + 00005D 0A 01 [ 1] 120 dec (0x01, sp) + 00005F 4D [ 1] 121 tnz a + 000060 26 D0 [ 1] 122 jrne 00108$ + 123 ; ../_modulong.c: 362: return a; + 000062 1E 07 [ 2] 124 ldw x, (0x07, sp) + 000064 16 05 [ 2] 125 ldw y, (0x05, sp) + 126 ; ../_modulong.c: 363: } + 000066 84 [ 1] 127 pop a + 000067 87 [ 5] 128 retf + 129 .area CODE + 130 .area CONST + 131 .area INITIALIZER + 132 .area CABS (ABS) diff --git a/device/lib/stm8-large/_modulong.rel b/device/lib/stm8-large/_modulong.rel new file mode 100644 index 0000000..84165a2 --- /dev/null +++ b/device/lib/stm8-large/_modulong.rel @@ -0,0 +1,51 @@ +XH3 +H B areas 2 global symbols +M _modulong +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 __modulong Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 88 4F 0F 01 +R 00 00 00 09 +T 00 00 04 +R 00 00 00 09 +T 00 00 04 0D 09 2B 28 08 0C 09 0B 09 0A 09 09 1E +R 00 00 00 09 +T 00 00 11 07 13 0B 88 7B 07 12 0B 7B 06 12 0A 84 +R 00 00 00 09 +T 00 00 1E 24 0A 04 09 06 0A 06 0B 06 0C 20 06 +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 0C 01 7B 01 20 D4 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 6B 01 +R 00 00 00 09 +T 00 00 32 +R 00 00 00 09 +T 00 00 32 1E 07 13 0B 7B 06 12 0A 7B 05 12 09 25 +R 00 00 00 09 +T 00 00 3F 13 16 07 72 F2 0B 7B 06 12 0A 97 7B 05 +R 00 00 00 09 +T 00 00 4C 12 09 95 17 07 1F 05 +R 00 00 00 09 +T 00 00 53 +R 00 00 00 09 +T 00 00 53 04 09 06 0A 06 0B 06 0C 7B 01 0A 01 4D +R 00 00 00 09 +T 00 00 60 26 D0 1E 07 16 05 84 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_modulong.sym b/device/lib/stm8-large/_modulong.sym new file mode 100644 index 0000000..292a0fa --- /dev/null +++ b/device/lib/stm8-large/_modulong.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 __modulong 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-large/_modulonglong.asm b/device/lib/stm8-large/_modulonglong.asm new file mode 100644 index 0000000..9d29e94 --- /dev/null +++ b/device/lib/stm8-large/_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 (0x17, sp) + jrmi 00117$ +; ../_modulonglong.c: 44: b <<= 1; + sll (0x1e, sp) + rlc (0x1d, sp) + rlc (0x1c, sp) + rlc (0x1b, sp) + rlc (0x1a, sp) + rlc (0x19, sp) + rlc (0x18, sp) + rlc (0x17, sp) +; ../_modulonglong.c: 45: if (b > a) + ldw x, (0x15, sp) + cpw x, (0x1d, sp) + push a + ld a, (0x15, sp) + sbc a, (0x1d, sp) + 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) + pop a + jrnc 00102$ +; ../_modulonglong.c: 47: b >>=1; + srl (0x17, sp) + rrc (0x18, sp) + rrc (0x19, sp) + rrc (0x1a, sp) + rrc (0x1b, sp) + rrc (0x1c, sp) + rrc (0x1d, sp) + rrc (0x1e, 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, (0x15, sp) + cpw x, (0x1d, sp) + 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) + jrc 00107$ +; ../_modulonglong.c: 55: a -= b; + ldw x, (0x15, sp) + subw x, (0x1d, sp) + ldw (0x07, sp), x + ld a, (0x14, sp) + sbc a, (0x1c, sp) + ld (0x06, sp), a + ld a, (0x13, sp) + sbc a, (0x1b, sp) + ld (0x05, sp), a + ld a, (0x12, sp) + sbc a, (0x1a, sp) + ld (0x04, sp), a + ld a, (0x11, sp) + sbc a, (0x19, sp) + ld (0x03, sp), a + ld a, (0x10, sp) + sbc a, (0x18, sp) + ld (0x02, sp), a + ld a, (0x0f, sp) + sbc a, (0x17, sp) + ld (0x01, sp), a + ldw y, (0x07, sp) + ldw (0x15, sp), y + ldw y, (0x05, sp) + ldw (0x13, sp), y + ldw y, (0x03, sp) + ldw (0x11, sp), y + ldw y, (0x01, sp) + ldw (0x0f, sp), y +00107$: +; ../_modulonglong.c: 56: b >>= 1; + srl (0x17, sp) + rrc (0x18, sp) + rrc (0x19, sp) + rrc (0x1a, sp) + rrc (0x1b, sp) + rrc (0x1c, sp) + rrc (0x1d, sp) + rrc (0x1e, sp) +; ../_modulonglong.c: 58: while (count--); + ld a, (0x09, sp) + dec (0x09, sp) + tnz a + jrne 00108$ +; ../_modulonglong.c: 60: return a; + ldw x, (0x0d, sp) + ldw y, (0x15, sp) + ldw (#6, x), y + ldw y, (0x13, sp) + ldw (#4, x), y + ldw y, (0x11, sp) + ldw (#2, x), y + ldw y, (0x0f, sp) + ldw (x), y +; ../_modulonglong.c: 61: } + addw sp, #9 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_modulonglong.lst b/device/lib/stm8-large/_modulonglong.lst new file mode 100644 index 0000000..0b2e8b2 --- /dev/null +++ b/device/lib/stm8-large/_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 17 [ 1] 60 tnz (0x17, sp) + 000007 2B 48 [ 1] 61 jrmi 00117$ + 62 ; ../_modulonglong.c: 44: b <<= 1; + 000009 08 1E [ 1] 63 sll (0x1e, sp) + 00000B 09 1D [ 1] 64 rlc (0x1d, sp) + 00000D 09 1C [ 1] 65 rlc (0x1c, sp) + 00000F 09 1B [ 1] 66 rlc (0x1b, sp) + 000011 09 1A [ 1] 67 rlc (0x1a, sp) + 000013 09 19 [ 1] 68 rlc (0x19, sp) + 000015 09 18 [ 1] 69 rlc (0x18, sp) + 000017 09 17 [ 1] 70 rlc (0x17, sp) + 71 ; ../_modulonglong.c: 45: if (b > a) + 000019 1E 15 [ 2] 72 ldw x, (0x15, sp) + 00001B 13 1D [ 2] 73 cpw x, (0x1d, sp) + 00001D 88 [ 1] 74 push a + 00001E 7B 15 [ 1] 75 ld a, (0x15, sp) + 000020 12 1D [ 1] 76 sbc a, (0x1d, sp) + 000022 7B 14 [ 1] 77 ld a, (0x14, sp) + 000024 12 1C [ 1] 78 sbc a, (0x1c, sp) + 000026 7B 13 [ 1] 79 ld a, (0x13, sp) + 000028 12 1B [ 1] 80 sbc a, (0x1b, sp) + 00002A 7B 12 [ 1] 81 ld a, (0x12, sp) + 00002C 12 1A [ 1] 82 sbc a, (0x1a, sp) + 00002E 7B 11 [ 1] 83 ld a, (0x11, sp) + 000030 12 19 [ 1] 84 sbc a, (0x19, sp) + 000032 7B 10 [ 1] 85 ld a, (0x10, sp) + 000034 12 18 [ 1] 86 sbc a, (0x18, sp) + 000036 84 [ 1] 87 pop a + 000037 24 12 [ 1] 88 jrnc 00102$ + 89 ; ../_modulonglong.c: 47: b >>=1; + 000039 04 17 [ 1] 90 srl (0x17, sp) + 00003B 06 18 [ 1] 91 rrc (0x18, sp) + 00003D 06 19 [ 1] 92 rrc (0x19, sp) + 00003F 06 1A [ 1] 93 rrc (0x1a, sp) + 000041 06 1B [ 1] 94 rrc (0x1b, sp) + 000043 06 1C [ 1] 95 rrc (0x1c, sp) + 000045 06 1D [ 1] 96 rrc (0x1d, sp) + 000047 06 1E [ 1] 97 rrc (0x1e, 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 15 [ 2] 110 ldw x, (0x15, sp) + 000055 13 1D [ 2] 111 cpw x, (0x1d, sp) + 000057 7B 14 [ 1] 112 ld a, (0x14, sp) + 000059 12 1C [ 1] 113 sbc a, (0x1c, sp) + 00005B 7B 13 [ 1] 114 ld a, (0x13, sp) + 00005D 12 1B [ 1] 115 sbc a, (0x1b, sp) + 00005F 7B 12 [ 1] 116 ld a, (0x12, sp) + 000061 12 1A [ 1] 117 sbc a, (0x1a, sp) + 000063 7B 11 [ 1] 118 ld a, (0x11, sp) + 000065 12 19 [ 1] 119 sbc a, (0x19, sp) + 000067 7B 10 [ 1] 120 ld a, (0x10, sp) + 000069 12 18 [ 1] 121 sbc a, (0x18, sp) + 00006B 7B 0F [ 1] 122 ld a, (0x0f, sp) + 00006D 12 17 [ 1] 123 sbc a, (0x17, sp) + 00006F 25 3B [ 1] 124 jrc 00107$ + 125 ; ../_modulonglong.c: 55: a -= b; + 000071 1E 15 [ 2] 126 ldw x, (0x15, sp) + 000073 72 F0 1D [ 2] 127 subw x, (0x1d, sp) + 000076 1F 07 [ 2] 128 ldw (0x07, sp), x + 000078 7B 14 [ 1] 129 ld a, (0x14, sp) + 00007A 12 1C [ 1] 130 sbc a, (0x1c, sp) + 00007C 6B 06 [ 1] 131 ld (0x06, sp), a + 00007E 7B 13 [ 1] 132 ld a, (0x13, sp) + 000080 12 1B [ 1] 133 sbc a, (0x1b, sp) + 000082 6B 05 [ 1] 134 ld (0x05, sp), a + 000084 7B 12 [ 1] 135 ld a, (0x12, sp) + 000086 12 1A [ 1] 136 sbc a, (0x1a, sp) + 000088 6B 04 [ 1] 137 ld (0x04, sp), a + 00008A 7B 11 [ 1] 138 ld a, (0x11, sp) + 00008C 12 19 [ 1] 139 sbc a, (0x19, sp) + 00008E 6B 03 [ 1] 140 ld (0x03, sp), a + 000090 7B 10 [ 1] 141 ld a, (0x10, sp) + 000092 12 18 [ 1] 142 sbc a, (0x18, sp) + 000094 6B 02 [ 1] 143 ld (0x02, sp), a + 000096 7B 0F [ 1] 144 ld a, (0x0f, sp) + 000098 12 17 [ 1] 145 sbc a, (0x17, sp) + 00009A 6B 01 [ 1] 146 ld (0x01, sp), a + 00009C 16 07 [ 2] 147 ldw y, (0x07, sp) + 00009E 17 15 [ 2] 148 ldw (0x15, sp), y + 0000A0 16 05 [ 2] 149 ldw y, (0x05, sp) + 0000A2 17 13 [ 2] 150 ldw (0x13, sp), y + 0000A4 16 03 [ 2] 151 ldw y, (0x03, sp) + 0000A6 17 11 [ 2] 152 ldw (0x11, sp), y + 0000A8 16 01 [ 2] 153 ldw y, (0x01, sp) + 0000AA 17 0F [ 2] 154 ldw (0x0f, sp), y + 0000AC 155 00107$: + 156 ; ../_modulonglong.c: 56: b >>= 1; + 0000AC 04 17 [ 1] 157 srl (0x17, sp) + 0000AE 06 18 [ 1] 158 rrc (0x18, sp) + 0000B0 06 19 [ 1] 159 rrc (0x19, sp) + 0000B2 06 1A [ 1] 160 rrc (0x1a, sp) + 0000B4 06 1B [ 1] 161 rrc (0x1b, sp) + 0000B6 06 1C [ 1] 162 rrc (0x1c, sp) + 0000B8 06 1D [ 1] 163 rrc (0x1d, sp) + 0000BA 06 1E [ 1] 164 rrc (0x1e, 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 0D [ 2] 171 ldw x, (0x0d, sp) + 0000C5 16 15 [ 2] 172 ldw y, (0x15, sp) + 0000C7 EF 06 [ 2] 173 ldw (#6, x), y + 0000C9 16 13 [ 2] 174 ldw y, (0x13, sp) + 0000CB EF 04 [ 2] 175 ldw (#4, x), y + 0000CD 16 11 [ 2] 176 ldw y, (0x11, sp) + 0000CF EF 02 [ 2] 177 ldw (#2, x), y + 0000D1 16 0F [ 2] 178 ldw y, (0x0f, sp) + 0000D3 FF [ 2] 179 ldw (x), y + 180 ; ../_modulonglong.c: 61: } + 0000D4 5B 09 [ 2] 181 addw sp, #9 + 0000D6 87 [ 5] 182 retf + 183 .area CODE + 184 .area CONST + 185 .area INITIALIZER + 186 .area CABS (ABS) diff --git a/device/lib/stm8-large/_modulonglong.rel b/device/lib/stm8-large/_modulonglong.rel new file mode 100644 index 0000000..4025b35 --- /dev/null +++ b/device/lib/stm8-large/_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 17 2B 48 08 1E 09 1D 09 1C 09 1B 09 +R 00 00 00 09 +T 00 00 12 1A 09 19 09 18 09 17 1E 15 13 1D 88 7B +R 00 00 00 09 +T 00 00 1F 15 12 1D 7B 14 12 1C 7B 13 12 1B 7B 12 +R 00 00 00 09 +T 00 00 2C 12 1A 7B 11 12 19 7B 10 12 18 84 24 12 +R 00 00 00 09 +T 00 00 39 04 17 06 18 06 19 06 1A 06 1B 06 1C 06 +R 00 00 00 09 +T 00 00 46 1D 06 1E 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 15 13 1D 7B 14 12 1C 7B 13 12 1B 7B +R 00 00 00 09 +T 00 00 60 12 12 1A 7B 11 12 19 7B 10 12 18 7B 0F +R 00 00 00 09 +T 00 00 6D 12 17 25 3B 1E 15 72 F0 1D 1F 07 7B 14 +R 00 00 00 09 +T 00 00 7A 12 1C 6B 06 7B 13 12 1B 6B 05 7B 12 12 +R 00 00 00 09 +T 00 00 87 1A 6B 04 7B 11 12 19 6B 03 7B 10 12 18 +R 00 00 00 09 +T 00 00 94 6B 02 7B 0F 12 17 6B 01 16 07 17 15 16 +R 00 00 00 09 +T 00 00 A1 05 17 13 16 03 17 11 16 01 17 0F +R 00 00 00 09 +T 00 00 AC +R 00 00 00 09 +T 00 00 AC 04 17 06 18 06 19 06 1A 06 1B 06 1C 06 +R 00 00 00 09 +T 00 00 B9 1D 06 1E 7B 09 0A 09 4D 26 90 1E 0D 16 +R 00 00 00 09 +T 00 00 C6 15 EF 06 16 13 EF 04 16 11 EF 02 16 0F +R 00 00 00 09 +T 00 00 D3 FF 5B 09 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_modulonglong.sym b/device/lib/stm8-large/_modulonglong.sym new file mode 100644 index 0000000..cfaa4d3 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_mulint.asm b/device/lib/stm8-large/_mulint.asm new file mode 100644 index 0000000..315c229 --- /dev/null +++ b/device/lib/stm8-large/_mulint.asm @@ -0,0 +1,94 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _mulint + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __mulint +;-------------------------------------------------------- +; 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 +; ../_mulint.c: 226: _mulint (int a, int b) +; ----------------------------------------- +; function _mulint +; ----------------------------------------- +__mulint: + sub sp, #5 +; ../_mulint.c: 238: x = (union uu *)&a; + ldw x, sp + addw x, #9 + ldw (0x03, sp), x +; ../_mulint.c: 239: y = (union uu *)&b; + ldw x, sp + addw x, #11 +; ../_mulint.c: 243: t.t = (unsigned char)a * (unsigned char)b; + ld a, (0x0a, sp) + ld yl, a + ld a, (0x0c, sp) + mul y, a + ldw (0x01, sp), y +; ../_mulint.c: 244: t.s.hi += ((unsigned char)a * y->s.hi) + (x->s.hi * (unsigned char)b); + ld a, (0x01, sp) + ld (0x05, sp), a + ld a, (0x0a, sp) + ld yl, a + ld a, (x) + mul y, a + ldw x, (0x03, sp) + ld a, (x) + ld xl, a + ld a, (0x0c, sp) + mul x, a + ld a, yl + pushw x + add a, (2, sp) + popw x + add a, (0x05, sp) + ld (0x01, sp), a +; ../_mulint.c: 246: return t.t; + ldw x, (0x01, sp) +; ../_mulint.c: 247: } + addw sp, #5 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_mulint.lst b/device/lib/stm8-large/_mulint.lst new file mode 100644 index 0000000..bcc6716 --- /dev/null +++ b/device/lib/stm8-large/_mulint.lst @@ -0,0 +1,94 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _mulint + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __mulint + 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 ; ../_mulint.c: 226: _mulint (int a, int b) + 50 ; ----------------------------------------- + 51 ; function _mulint + 52 ; ----------------------------------------- + 000000 53 __mulint: + 000000 52 05 [ 2] 54 sub sp, #5 + 55 ; ../_mulint.c: 238: x = (union uu *)&a; + 000002 96 [ 1] 56 ldw x, sp + 000003 1C 00 09 [ 2] 57 addw x, #9 + 000006 1F 03 [ 2] 58 ldw (0x03, sp), x + 59 ; ../_mulint.c: 239: y = (union uu *)&b; + 000008 96 [ 1] 60 ldw x, sp + 000009 1C 00 0B [ 2] 61 addw x, #11 + 62 ; ../_mulint.c: 243: t.t = (unsigned char)a * (unsigned char)b; + 00000C 7B 0A [ 1] 63 ld a, (0x0a, sp) + 00000E 90 97 [ 1] 64 ld yl, a + 000010 7B 0C [ 1] 65 ld a, (0x0c, sp) + 000012 90 42 [ 4] 66 mul y, a + 000014 17 01 [ 2] 67 ldw (0x01, sp), y + 68 ; ../_mulint.c: 244: t.s.hi += ((unsigned char)a * y->s.hi) + (x->s.hi * (unsigned char)b); + 000016 7B 01 [ 1] 69 ld a, (0x01, sp) + 000018 6B 05 [ 1] 70 ld (0x05, sp), a + 00001A 7B 0A [ 1] 71 ld a, (0x0a, sp) + 00001C 90 97 [ 1] 72 ld yl, a + 00001E F6 [ 1] 73 ld a, (x) + 00001F 90 42 [ 4] 74 mul y, a + 000021 1E 03 [ 2] 75 ldw x, (0x03, sp) + 000023 F6 [ 1] 76 ld a, (x) + 000024 97 [ 1] 77 ld xl, a + 000025 7B 0C [ 1] 78 ld a, (0x0c, sp) + 000027 42 [ 4] 79 mul x, a + 000028 90 9F [ 1] 80 ld a, yl + 00002A 89 [ 2] 81 pushw x + 00002B 1B 02 [ 1] 82 add a, (2, sp) + 00002D 85 [ 2] 83 popw x + 00002E 1B 05 [ 1] 84 add a, (0x05, sp) + 000030 6B 01 [ 1] 85 ld (0x01, sp), a + 86 ; ../_mulint.c: 246: return t.t; + 000032 1E 01 [ 2] 87 ldw x, (0x01, sp) + 88 ; ../_mulint.c: 247: } + 000034 5B 05 [ 2] 89 addw sp, #5 + 000036 87 [ 5] 90 retf + 91 .area CODE + 92 .area CONST + 93 .area INITIALIZER + 94 .area CABS (ABS) diff --git a/device/lib/stm8-large/_mulint.rel b/device/lib/stm8-large/_mulint.rel new file mode 100644 index 0000000..5a38733 --- /dev/null +++ b/device/lib/stm8-large/_mulint.rel @@ -0,0 +1,29 @@ +XH3 +H B areas 2 global symbols +M _mulint +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 37 flags 0 addr 0 +S __mulint Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 05 96 1C 00 09 1F 03 96 1C 00 0B 7B +R 00 00 00 09 +T 00 00 0D 0A 90 97 7B 0C 90 42 17 01 7B 01 6B 05 +R 00 00 00 09 +T 00 00 1A 7B 0A 90 97 F6 90 42 1E 03 F6 97 7B 0C +R 00 00 00 09 +T 00 00 27 42 90 9F 89 1B 02 85 1B 05 6B 01 1E 01 +R 00 00 00 09 +T 00 00 34 5B 05 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_mulint.sym b/device/lib/stm8-large/_mulint.sym new file mode 100644 index 0000000..14e5066 --- /dev/null +++ b/device/lib/stm8-large/_mulint.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 __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 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-large/_mullong.asm b/device/lib/stm8-large/_mullong.asm new file mode 100644 index 0000000..0ce6c86 --- /dev/null +++ b/device/lib/stm8-large/_mullong.asm @@ -0,0 +1,225 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _mullong + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl __mullong +;-------------------------------------------------------- +; 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 +; ../_mullong.c: 734: _mullong (long a, long b) +; ----------------------------------------- +; function _mullong +; ----------------------------------------- +__mullong: + sub sp, #16 +; ../_mullong.c: 738: t.i.hi = bcast(a)->b.b0 * bcast(b)->b.b2; // A + ldw y, sp + addw y, #5 + ldw x, sp + addw x, #20 + ldw (0x09, sp), x + ld a, (0x3, x) + ldw x, sp + addw x, #24 + ldw (0x0b, sp), x + push a + ld a, (0x1, x) + ld xl, a + pop a + mul x, a + ldw (y), x +; ../_mullong.c: 739: t.i.lo = bcast(a)->b.b0 * bcast(b)->b.b0; // A + addw y, #0x0002 + ldw x, (0x09, sp) + ld a, (0x3, x) + ldw x, (0x0b, sp) + push a + ld a, (0x3, x) + ld xl, a + pop a + mul x, a + ldw (y), x +; ../_mullong.c: 740: t.b.b3 += bcast(a)->b.b3 * bcast(b)->b.b0; // G + ld a, (0x05, sp) + ld (0x10, sp), a + ldw x, (0x09, sp) + ld a, (x) + ld xl, a + ldw y, (0x0b, sp) + ld a, (0x3, y) + mul x, a + ld a, xl + add a, (0x10, sp) + ld (0x10, sp), a +; ../_mullong.c: 741: t.b.b3 += bcast(a)->b.b2 * bcast(b)->b.b1; // F + ld (0x05, sp), a + ldw x, (0x09, sp) + ld a, (0x1, x) + ld xl, a + ldw y, (0x0b, sp) + ld a, (0x2, y) + mul x, a + ld a, xl + add a, (0x10, sp) + ld (0x05, sp), a +; ../_mullong.c: 742: t.i.hi += bcast(a)->b.b2 * bcast(b)->b.b0; // E <- b lost in .lst + ldw y, (0x05, sp) + ldw (0x0d, sp), y + ldw x, (0x09, sp) + ld a, (0x1, x) + ld xl, a + ldw y, (0x0b, sp) + ld a, (0x3, y) + mul x, a + addw x, (0x0d, sp) + ldw (0x0f, sp), x + ldw (0x05, sp), x +; ../_mullong.c: 744: t.i.hi += bcast(a)->b.b1 * bcast(b)->b.b1; // D <- b lost in .lst + ld a, (0x06, sp) + ld a, (0x05, sp) + ldw x, (0x09, sp) + ld a, (0x2, x) + ld xl, a + ldw y, (0x0b, sp) + ld a, (0x2, y) + mul x, a + addw x, (0x0f, sp) + ldw (0x05, sp), x +; ../_mullong.c: 746: bcast(a)->bi.b3 = bcast(a)->b.b1 * bcast(b)->b.b2; // C + ldw y, (0x09, sp) + ldw x, (0x09, sp) + ld a, (0x2, x) + ldw x, (0x0b, sp) + push a + ld a, (0x1, x) + ld xl, a + pop a + mul x, a + ld a, xl + ld (y), a +; ../_mullong.c: 747: bcast(a)->bi.i12 = bcast(a)->b.b1 * bcast(b)->b.b0; // C + ldw y, (0x09, sp) + incw y + ldw x, (0x09, sp) + ld a, (0x2, x) + ldw x, (0x0b, sp) + push a + ld a, (0x3, x) + ld xl, a + pop a + mul x, a + ldw (y), x +; ../_mullong.c: 749: bcast(b)->bi.b3 = bcast(a)->b.b0 * bcast(b)->b.b3; // B + ldw y, (0x0b, sp) + ldw x, (0x09, sp) + ld a, (0x3, x) + ldw x, (0x0b, sp) + push a + ld a, (x) + ld xl, a + pop a + mul x, a + ld a, xl + ld (y), a +; ../_mullong.c: 750: bcast(b)->bi.i12 = bcast(a)->b.b0 * bcast(b)->b.b1; // B + ldw y, (0x0b, sp) + incw y + ldw x, (0x09, sp) + ld a, (0x3, x) + ldw x, (0x0b, sp) + push a + ld a, (0x2, x) + ld xl, a + pop a + mul x, a + ldw (y), x +; ../_mullong.c: 752: bcast(b)->bi.b0 = 0; // B + ldw x, (0x0b, sp) + clr (0x0003, x) +; ../_mullong.c: 753: bcast(a)->bi.b0 = 0; // C + ldw x, (0x09, sp) + clr (0x0003, x) +; ../_mullong.c: 754: t.l += a; + ldw y, (0x07, sp) + ldw (0x03, sp), y + ldw y, (0x05, sp) + ldw (0x01, sp), y + ldw x, (0x16, sp) + ldw (0x0b, sp), x + ldw x, (0x14, sp) + ldw y, (0x0b, sp) + addw y, (0x03, sp) + ldw (0x0f, sp), y + ld a, xl + adc a, (0x02, sp) + ld (0x0e, sp), a + ld a, xh + adc a, (0x01, sp) + ld (0x0d, sp), a + ldw x, (0x0f, sp) + ldw (0x07, sp), x + ldw x, (0x0d, sp) + ldw (0x05, sp), x +; ../_mullong.c: 756: return t.l + b; + ld a, (0x08, sp) + ld a, (0x07, sp) + ld a, (0x06, sp) + ld a, (0x05, sp) + ldw x, (0x1a, sp) + ldw (0x0b, sp), x + ldw x, (0x18, sp) + ldw y, (0x0b, sp) + addw y, (0x0f, sp) + ld a, xl + adc a, (0x0e, sp) + rlwa x + adc a, (0x0d, sp) + ld xh, a + exgw x, y +; ../_mullong.c: 757: } + addw sp, #16 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_mullong.lst b/device/lib/stm8-large/_mullong.lst new file mode 100644 index 0000000..e0cafea --- /dev/null +++ b/device/lib/stm8-large/_mullong.lst @@ -0,0 +1,225 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _mullong + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __mullong + 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 ; ../_mullong.c: 734: _mullong (long a, long b) + 50 ; ----------------------------------------- + 51 ; function _mullong + 52 ; ----------------------------------------- + 000000 53 __mullong: + 000000 52 10 [ 2] 54 sub sp, #16 + 55 ; ../_mullong.c: 738: t.i.hi = bcast(a)->b.b0 * bcast(b)->b.b2; // A + 000002 90 96 [ 1] 56 ldw y, sp + 000004 72 A9 00 05 [ 2] 57 addw y, #5 + 000008 96 [ 1] 58 ldw x, sp + 000009 1C 00 14 [ 2] 59 addw x, #20 + 00000C 1F 09 [ 2] 60 ldw (0x09, sp), x + 00000E E6 03 [ 1] 61 ld a, (0x3, x) + 000010 96 [ 1] 62 ldw x, sp + 000011 1C 00 18 [ 2] 63 addw x, #24 + 000014 1F 0B [ 2] 64 ldw (0x0b, sp), x + 000016 88 [ 1] 65 push a + 000017 E6 01 [ 1] 66 ld a, (0x1, x) + 000019 97 [ 1] 67 ld xl, a + 00001A 84 [ 1] 68 pop a + 00001B 42 [ 4] 69 mul x, a + 00001C 90 FF [ 2] 70 ldw (y), x + 71 ; ../_mullong.c: 739: t.i.lo = bcast(a)->b.b0 * bcast(b)->b.b0; // A + 00001E 72 A9 00 02 [ 2] 72 addw y, #0x0002 + 000022 1E 09 [ 2] 73 ldw x, (0x09, sp) + 000024 E6 03 [ 1] 74 ld a, (0x3, x) + 000026 1E 0B [ 2] 75 ldw x, (0x0b, sp) + 000028 88 [ 1] 76 push a + 000029 E6 03 [ 1] 77 ld a, (0x3, x) + 00002B 97 [ 1] 78 ld xl, a + 00002C 84 [ 1] 79 pop a + 00002D 42 [ 4] 80 mul x, a + 00002E 90 FF [ 2] 81 ldw (y), x + 82 ; ../_mullong.c: 740: t.b.b3 += bcast(a)->b.b3 * bcast(b)->b.b0; // G + 000030 7B 05 [ 1] 83 ld a, (0x05, sp) + 000032 6B 10 [ 1] 84 ld (0x10, sp), a + 000034 1E 09 [ 2] 85 ldw x, (0x09, sp) + 000036 F6 [ 1] 86 ld a, (x) + 000037 97 [ 1] 87 ld xl, a + 000038 16 0B [ 2] 88 ldw y, (0x0b, sp) + 00003A 90 E6 03 [ 1] 89 ld a, (0x3, y) + 00003D 42 [ 4] 90 mul x, a + 00003E 9F [ 1] 91 ld a, xl + 00003F 1B 10 [ 1] 92 add a, (0x10, sp) + 000041 6B 10 [ 1] 93 ld (0x10, sp), a + 94 ; ../_mullong.c: 741: t.b.b3 += bcast(a)->b.b2 * bcast(b)->b.b1; // F + 000043 6B 05 [ 1] 95 ld (0x05, sp), a + 000045 1E 09 [ 2] 96 ldw x, (0x09, sp) + 000047 E6 01 [ 1] 97 ld a, (0x1, x) + 000049 97 [ 1] 98 ld xl, a + 00004A 16 0B [ 2] 99 ldw y, (0x0b, sp) + 00004C 90 E6 02 [ 1] 100 ld a, (0x2, y) + 00004F 42 [ 4] 101 mul x, a + 000050 9F [ 1] 102 ld a, xl + 000051 1B 10 [ 1] 103 add a, (0x10, sp) + 000053 6B 05 [ 1] 104 ld (0x05, sp), a + 105 ; ../_mullong.c: 742: t.i.hi += bcast(a)->b.b2 * bcast(b)->b.b0; // E <- b lost in .lst + 000055 16 05 [ 2] 106 ldw y, (0x05, sp) + 000057 17 0D [ 2] 107 ldw (0x0d, sp), y + 000059 1E 09 [ 2] 108 ldw x, (0x09, sp) + 00005B E6 01 [ 1] 109 ld a, (0x1, x) + 00005D 97 [ 1] 110 ld xl, a + 00005E 16 0B [ 2] 111 ldw y, (0x0b, sp) + 000060 90 E6 03 [ 1] 112 ld a, (0x3, y) + 000063 42 [ 4] 113 mul x, a + 000064 72 FB 0D [ 2] 114 addw x, (0x0d, sp) + 000067 1F 0F [ 2] 115 ldw (0x0f, sp), x + 000069 1F 05 [ 2] 116 ldw (0x05, sp), x + 117 ; ../_mullong.c: 744: t.i.hi += bcast(a)->b.b1 * bcast(b)->b.b1; // D <- b lost in .lst + 00006B 7B 06 [ 1] 118 ld a, (0x06, sp) + 00006D 7B 05 [ 1] 119 ld a, (0x05, sp) + 00006F 1E 09 [ 2] 120 ldw x, (0x09, sp) + 000071 E6 02 [ 1] 121 ld a, (0x2, x) + 000073 97 [ 1] 122 ld xl, a + 000074 16 0B [ 2] 123 ldw y, (0x0b, sp) + 000076 90 E6 02 [ 1] 124 ld a, (0x2, y) + 000079 42 [ 4] 125 mul x, a + 00007A 72 FB 0F [ 2] 126 addw x, (0x0f, sp) + 00007D 1F 05 [ 2] 127 ldw (0x05, sp), x + 128 ; ../_mullong.c: 746: bcast(a)->bi.b3 = bcast(a)->b.b1 * bcast(b)->b.b2; // C + 00007F 16 09 [ 2] 129 ldw y, (0x09, sp) + 000081 1E 09 [ 2] 130 ldw x, (0x09, sp) + 000083 E6 02 [ 1] 131 ld a, (0x2, x) + 000085 1E 0B [ 2] 132 ldw x, (0x0b, sp) + 000087 88 [ 1] 133 push a + 000088 E6 01 [ 1] 134 ld a, (0x1, x) + 00008A 97 [ 1] 135 ld xl, a + 00008B 84 [ 1] 136 pop a + 00008C 42 [ 4] 137 mul x, a + 00008D 9F [ 1] 138 ld a, xl + 00008E 90 F7 [ 1] 139 ld (y), a + 140 ; ../_mullong.c: 747: bcast(a)->bi.i12 = bcast(a)->b.b1 * bcast(b)->b.b0; // C + 000090 16 09 [ 2] 141 ldw y, (0x09, sp) + 000092 90 5C [ 1] 142 incw y + 000094 1E 09 [ 2] 143 ldw x, (0x09, sp) + 000096 E6 02 [ 1] 144 ld a, (0x2, x) + 000098 1E 0B [ 2] 145 ldw x, (0x0b, sp) + 00009A 88 [ 1] 146 push a + 00009B E6 03 [ 1] 147 ld a, (0x3, x) + 00009D 97 [ 1] 148 ld xl, a + 00009E 84 [ 1] 149 pop a + 00009F 42 [ 4] 150 mul x, a + 0000A0 90 FF [ 2] 151 ldw (y), x + 152 ; ../_mullong.c: 749: bcast(b)->bi.b3 = bcast(a)->b.b0 * bcast(b)->b.b3; // B + 0000A2 16 0B [ 2] 153 ldw y, (0x0b, sp) + 0000A4 1E 09 [ 2] 154 ldw x, (0x09, sp) + 0000A6 E6 03 [ 1] 155 ld a, (0x3, x) + 0000A8 1E 0B [ 2] 156 ldw x, (0x0b, sp) + 0000AA 88 [ 1] 157 push a + 0000AB F6 [ 1] 158 ld a, (x) + 0000AC 97 [ 1] 159 ld xl, a + 0000AD 84 [ 1] 160 pop a + 0000AE 42 [ 4] 161 mul x, a + 0000AF 9F [ 1] 162 ld a, xl + 0000B0 90 F7 [ 1] 163 ld (y), a + 164 ; ../_mullong.c: 750: bcast(b)->bi.i12 = bcast(a)->b.b0 * bcast(b)->b.b1; // B + 0000B2 16 0B [ 2] 165 ldw y, (0x0b, sp) + 0000B4 90 5C [ 1] 166 incw y + 0000B6 1E 09 [ 2] 167 ldw x, (0x09, sp) + 0000B8 E6 03 [ 1] 168 ld a, (0x3, x) + 0000BA 1E 0B [ 2] 169 ldw x, (0x0b, sp) + 0000BC 88 [ 1] 170 push a + 0000BD E6 02 [ 1] 171 ld a, (0x2, x) + 0000BF 97 [ 1] 172 ld xl, a + 0000C0 84 [ 1] 173 pop a + 0000C1 42 [ 4] 174 mul x, a + 0000C2 90 FF [ 2] 175 ldw (y), x + 176 ; ../_mullong.c: 752: bcast(b)->bi.b0 = 0; // B + 0000C4 1E 0B [ 2] 177 ldw x, (0x0b, sp) + 0000C6 6F 03 [ 1] 178 clr (0x0003, x) + 179 ; ../_mullong.c: 753: bcast(a)->bi.b0 = 0; // C + 0000C8 1E 09 [ 2] 180 ldw x, (0x09, sp) + 0000CA 6F 03 [ 1] 181 clr (0x0003, x) + 182 ; ../_mullong.c: 754: t.l += a; + 0000CC 16 07 [ 2] 183 ldw y, (0x07, sp) + 0000CE 17 03 [ 2] 184 ldw (0x03, sp), y + 0000D0 16 05 [ 2] 185 ldw y, (0x05, sp) + 0000D2 17 01 [ 2] 186 ldw (0x01, sp), y + 0000D4 1E 16 [ 2] 187 ldw x, (0x16, sp) + 0000D6 1F 0B [ 2] 188 ldw (0x0b, sp), x + 0000D8 1E 14 [ 2] 189 ldw x, (0x14, sp) + 0000DA 16 0B [ 2] 190 ldw y, (0x0b, sp) + 0000DC 72 F9 03 [ 2] 191 addw y, (0x03, sp) + 0000DF 17 0F [ 2] 192 ldw (0x0f, sp), y + 0000E1 9F [ 1] 193 ld a, xl + 0000E2 19 02 [ 1] 194 adc a, (0x02, sp) + 0000E4 6B 0E [ 1] 195 ld (0x0e, sp), a + 0000E6 9E [ 1] 196 ld a, xh + 0000E7 19 01 [ 1] 197 adc a, (0x01, sp) + 0000E9 6B 0D [ 1] 198 ld (0x0d, sp), a + 0000EB 1E 0F [ 2] 199 ldw x, (0x0f, sp) + 0000ED 1F 07 [ 2] 200 ldw (0x07, sp), x + 0000EF 1E 0D [ 2] 201 ldw x, (0x0d, sp) + 0000F1 1F 05 [ 2] 202 ldw (0x05, sp), x + 203 ; ../_mullong.c: 756: return t.l + b; + 0000F3 7B 08 [ 1] 204 ld a, (0x08, sp) + 0000F5 7B 07 [ 1] 205 ld a, (0x07, sp) + 0000F7 7B 06 [ 1] 206 ld a, (0x06, sp) + 0000F9 7B 05 [ 1] 207 ld a, (0x05, sp) + 0000FB 1E 1A [ 2] 208 ldw x, (0x1a, sp) + 0000FD 1F 0B [ 2] 209 ldw (0x0b, sp), x + 0000FF 1E 18 [ 2] 210 ldw x, (0x18, sp) + 000101 16 0B [ 2] 211 ldw y, (0x0b, sp) + 000103 72 F9 0F [ 2] 212 addw y, (0x0f, sp) + 000106 9F [ 1] 213 ld a, xl + 000107 19 0E [ 1] 214 adc a, (0x0e, sp) + 000109 02 [ 1] 215 rlwa x + 00010A 19 0D [ 1] 216 adc a, (0x0d, sp) + 00010C 95 [ 1] 217 ld xh, a + 00010D 51 [ 1] 218 exgw x, y + 219 ; ../_mullong.c: 757: } + 00010E 5B 10 [ 2] 220 addw sp, #16 + 000110 87 [ 5] 221 retf + 222 .area CODE + 223 .area CONST + 224 .area INITIALIZER + 225 .area CABS (ABS) diff --git a/device/lib/stm8-large/_mullong.rel b/device/lib/stm8-large/_mullong.rel new file mode 100644 index 0000000..9e3e64c --- /dev/null +++ b/device/lib/stm8-large/_mullong.rel @@ -0,0 +1,61 @@ +XH3 +H B areas 2 global symbols +M _mullong +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 111 flags 0 addr 0 +S __mullong 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 05 96 1C 00 14 1F +R 00 00 00 09 +T 00 00 0D 09 E6 03 96 1C 00 18 1F 0B 88 E6 01 97 +R 00 00 00 09 +T 00 00 1A 84 42 90 FF 72 A9 00 02 1E 09 E6 03 1E +R 00 00 00 09 +T 00 00 27 0B 88 E6 03 97 84 42 90 FF 7B 05 6B 10 +R 00 00 00 09 +T 00 00 34 1E 09 F6 97 16 0B 90 E6 03 42 9F 1B 10 +R 00 00 00 09 +T 00 00 41 6B 10 6B 05 1E 09 E6 01 97 16 0B 90 E6 +R 00 00 00 09 +T 00 00 4E 02 42 9F 1B 10 6B 05 16 05 17 0D 1E 09 +R 00 00 00 09 +T 00 00 5B E6 01 97 16 0B 90 E6 03 42 72 FB 0D 1F +R 00 00 00 09 +T 00 00 68 0F 1F 05 7B 06 7B 05 1E 09 E6 02 97 16 +R 00 00 00 09 +T 00 00 75 0B 90 E6 02 42 72 FB 0F 1F 05 16 09 1E +R 00 00 00 09 +T 00 00 82 09 E6 02 1E 0B 88 E6 01 97 84 42 9F 90 +R 00 00 00 09 +T 00 00 8F F7 16 09 90 5C 1E 09 E6 02 1E 0B 88 E6 +R 00 00 00 09 +T 00 00 9C 03 97 84 42 90 FF 16 0B 1E 09 E6 03 1E +R 00 00 00 09 +T 00 00 A9 0B 88 F6 97 84 42 9F 90 F7 16 0B 90 5C +R 00 00 00 09 +T 00 00 B6 1E 09 E6 03 1E 0B 88 E6 02 97 84 42 90 +R 00 00 00 09 +T 00 00 C3 FF 1E 0B 6F 03 1E 09 6F 03 16 07 17 03 +R 00 00 00 09 +T 00 00 D0 16 05 17 01 1E 16 1F 0B 1E 14 16 0B 72 +R 00 00 00 09 +T 00 00 DD F9 03 17 0F 9F 19 02 6B 0E 9E 19 01 6B +R 00 00 00 09 +T 00 00 EA 0D 1E 0F 1F 07 1E 0D 1F 05 7B 08 7B 07 +R 00 00 00 09 +T 00 00 F7 7B 06 7B 05 1E 1A 1F 0B 1E 18 16 0B 72 +R 00 00 00 09 +T 00 01 04 F9 0F 9F 19 0E 02 19 0D 95 51 5B 10 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_mullong.sym b/device/lib/stm8-large/_mullong.sym new file mode 100644 index 0000000..0dab026 --- /dev/null +++ b/device/lib/stm8-large/_mullong.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 __mullong 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 111 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_mullonglong.asm b/device/lib/stm8-large/_mullonglong.asm new file mode 100644 index 0000000..97342aa --- /dev/null +++ b/device/lib/stm8-large/_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, (0x25, sp) + ldw (0x16, sp), y + ldw y, (0x23, sp) + ldw (0x14, sp), y + ldw y, (0x21, sp) + ldw (0x12, sp), y + ldw x, (0x27, 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$ + jpf 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, (0x2d, sp) + ldw (0x16, sp), y + ldw y, (0x2b, sp) + ldw (0x14, sp), y + ldw y, (0x29, sp) + ldw (0x12, sp), y + ldw x, (0x2f, 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) + jpf 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$ + jpf 00106$ +00140$: +; ../_mullonglong.c: 50: return(ret); + ldw x, (0x1f, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_mullonglong.lst b/device/lib/stm8-large/_mullonglong.lst new file mode 100644 index 0000000..c567d41 --- /dev/null +++ b/device/lib/stm8-large/_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 25 [ 2] 70 ldw y, (0x25, sp) + 000016 17 16 [ 2] 71 ldw (0x16, sp), y + 000018 16 23 [ 2] 72 ldw y, (0x23, sp) + 00001A 17 14 [ 2] 73 ldw (0x14, sp), y + 00001C 16 21 [ 2] 74 ldw y, (0x21, sp) + 00001E 17 12 [ 2] 75 ldw (0x12, sp), y + 000020 1E 27 [ 2] 76 ldw x, (0x27, 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 04 [ 1] 104 jrslt 00134$ + 000050 ACs00r00rFA [ 2] 105 jpf 00107$ + 000054 106 00134$: + 107 ; ../_mullonglong.c: 45: unsigned char r = lr >> (j * 8); + 000054 7B 1B [ 1] 108 ld a, (0x1b, sp) + 000056 48 [ 1] 109 sll a + 000057 48 [ 1] 110 sll a + 000058 48 [ 1] 111 sll a + 000059 6B 19 [ 1] 112 ld (0x19, sp), a + 00005B 16 2D [ 2] 113 ldw y, (0x2d, sp) + 00005D 17 16 [ 2] 114 ldw (0x16, sp), y + 00005F 16 2B [ 2] 115 ldw y, (0x2b, sp) + 000061 17 14 [ 2] 116 ldw (0x14, sp), y + 000063 16 29 [ 2] 117 ldw y, (0x29, sp) + 000065 17 12 [ 2] 118 ldw (0x12, sp), y + 000067 1E 2F [ 2] 119 ldw x, (0x2f, sp) + 000069 7B 19 [ 1] 120 ld a, (0x19, sp) + 00006B 27 10 [ 1] 121 jreq 00136$ + 00006D 122 00135$: + 00006D 07 12 [ 1] 123 sra (0x12, sp) + 00006F 06 13 [ 1] 124 rrc (0x13, sp) + 000071 06 14 [ 1] 125 rrc (0x14, sp) + 000073 06 15 [ 1] 126 rrc (0x15, sp) + 000075 06 16 [ 1] 127 rrc (0x16, sp) + 000077 06 17 [ 1] 128 rrc (0x17, sp) + 000079 56 [ 2] 129 rrcw x + 00007A 4A [ 1] 130 dec a + 00007B 26 F0 [ 1] 131 jrne 00135$ + 00007D 132 00136$: + 00007D 1F 18 [ 2] 133 ldw (0x18, sp), x + 00007F 7B 19 [ 1] 134 ld a, (0x19, sp) + 000081 97 [ 1] 135 ld xl, a + 136 ; ../_mullonglong.c: 46: ret += (unsigned long long)((unsigned short)(l * r)) << ((i + j) * 8); + 000082 7B 11 [ 1] 137 ld a, (0x11, sp) + 000084 42 [ 4] 138 mul x, a + 000085 1F 0F [ 2] 139 ldw (0x0f, sp), x + 000087 0F 0E [ 1] 140 clr (0x0e, sp) + 000089 0F 0D [ 1] 141 clr (0x0d, sp) + 00008B 0F 0C [ 1] 142 clr (0x0c, sp) + 00008D 0F 0B [ 1] 143 clr (0x0b, sp) + 00008F 0F 0A [ 1] 144 clr (0x0a, sp) + 000091 0F 09 [ 1] 145 clr (0x09, sp) + 000093 7B 1A [ 1] 146 ld a, (0x1a, sp) + 000095 1B 1B [ 1] 147 add a, (0x1b, sp) + 000097 48 [ 1] 148 sll a + 000098 48 [ 1] 149 sll a + 000099 48 [ 1] 150 sll a + 00009A 6B 19 [ 1] 151 ld (0x19, sp), a + 00009C 16 0D [ 2] 152 ldw y, (0x0d, sp) + 00009E 17 16 [ 2] 153 ldw (0x16, sp), y + 0000A0 16 0B [ 2] 154 ldw y, (0x0b, sp) + 0000A2 17 14 [ 2] 155 ldw (0x14, sp), y + 0000A4 16 09 [ 2] 156 ldw y, (0x09, sp) + 0000A6 17 12 [ 2] 157 ldw (0x12, sp), y + 0000A8 1E 0F [ 2] 158 ldw x, (0x0f, sp) + 0000AA 7B 19 [ 1] 159 ld a, (0x19, sp) + 0000AC 27 10 [ 1] 160 jreq 00138$ + 0000AE 161 00137$: + 0000AE 58 [ 2] 162 sllw x + 0000AF 09 17 [ 1] 163 rlc (0x17, sp) + 0000B1 09 16 [ 1] 164 rlc (0x16, sp) + 0000B3 09 15 [ 1] 165 rlc (0x15, sp) + 0000B5 09 14 [ 1] 166 rlc (0x14, sp) + 0000B7 09 13 [ 1] 167 rlc (0x13, sp) + 0000B9 09 12 [ 1] 168 rlc (0x12, sp) + 0000BB 4A [ 1] 169 dec a + 0000BC 26 F0 [ 1] 170 jrne 00137$ + 0000BE 171 00138$: + 0000BE 1F 18 [ 2] 172 ldw (0x18, sp), x + 0000C0 72 FB 07 [ 2] 173 addw x, (0x07, sp) + 0000C3 1F 0F [ 2] 174 ldw (0x0f, sp), x + 0000C5 7B 06 [ 1] 175 ld a, (0x06, sp) + 0000C7 19 17 [ 1] 176 adc a, (0x17, sp) + 0000C9 6B 0E [ 1] 177 ld (0x0e, sp), a + 0000CB 7B 05 [ 1] 178 ld a, (0x05, sp) + 0000CD 19 16 [ 1] 179 adc a, (0x16, sp) + 0000CF 6B 0D [ 1] 180 ld (0x0d, sp), a + 0000D1 7B 04 [ 1] 181 ld a, (0x04, sp) + 0000D3 19 15 [ 1] 182 adc a, (0x15, sp) + 0000D5 6B 0C [ 1] 183 ld (0x0c, sp), a + 0000D7 7B 03 [ 1] 184 ld a, (0x03, sp) + 0000D9 19 14 [ 1] 185 adc a, (0x14, sp) + 0000DB 16 01 [ 2] 186 ldw y, (0x01, sp) + 0000DD 24 02 [ 1] 187 jrnc 00139$ + 0000DF 90 5C [ 1] 188 incw y + 0000E1 189 00139$: + 0000E1 72 F9 12 [ 2] 190 addw y, (0x12, sp) + 0000E4 6B 03 [ 1] 191 ld (0x03, sp), a + 0000E6 17 01 [ 2] 192 ldw (0x01, sp), y + 0000E8 16 0F [ 2] 193 ldw y, (0x0f, sp) + 0000EA 17 07 [ 2] 194 ldw (0x07, sp), y + 0000EC 16 0D [ 2] 195 ldw y, (0x0d, sp) + 0000EE 17 05 [ 2] 196 ldw (0x05, sp), y + 0000F0 7B 0C [ 1] 197 ld a, (0x0c, sp) + 0000F2 6B 04 [ 1] 198 ld (0x04, sp), a + 199 ; ../_mullonglong.c: 43: for(j = 0; (i + j) < sizeof (long long); j++) + 0000F4 0C 1B [ 1] 200 inc (0x1b, sp) + 0000F6 ACs00r00r3E [ 2] 201 jpf 00104$ + 0000FA 202 00107$: + 203 ; ../_mullonglong.c: 40: for (i = 0; i < sizeof (long long); i++) + 0000FA 0C 1A [ 1] 204 inc (0x1a, sp) + 0000FC 7B 1A [ 1] 205 ld a, (0x1a, sp) + 0000FE A1 08 [ 1] 206 cp a, #0x08 + 000100 24 04 [ 1] 207 jrnc 00140$ + 000102 ACs00r00r0D [ 2] 208 jpf 00106$ + 000106 209 00140$: + 210 ; ../_mullonglong.c: 50: return(ret); + 000106 1E 1F [ 2] 211 ldw x, (0x1f, sp) + 000108 16 07 [ 2] 212 ldw y, (0x07, sp) + 00010A EF 06 [ 2] 213 ldw (#6, x), y + 00010C 16 05 [ 2] 214 ldw y, (0x05, sp) + 00010E EF 04 [ 2] 215 ldw (#4, x), y + 000110 16 03 [ 2] 216 ldw y, (0x03, sp) + 000112 EF 02 [ 2] 217 ldw (#2, x), y + 000114 16 01 [ 2] 218 ldw y, (0x01, sp) + 000116 FF [ 2] 219 ldw (x), y + 220 ; ../_mullonglong.c: 51: } + 000117 5B 1B [ 2] 221 addw sp, #27 + 000119 87 [ 5] 222 retf + 223 .area CODE + 224 .area CONST + 225 .area INITIALIZER + 226 .area CABS (ABS) diff --git a/device/lib/stm8-large/_mullonglong.rel b/device/lib/stm8-large/_mullonglong.rel new file mode 100644 index 0000000..9477fda --- /dev/null +++ b/device/lib/stm8-large/_mullonglong.rel @@ -0,0 +1,99 @@ +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 11A 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 25 17 16 16 23 +R 00 00 00 09 +T 00 00 1A 17 14 16 21 17 12 1E 27 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 04 AC 00 00 FA +R 00 00 00 09 80 09 00 09 +T 00 00 54 +R 00 00 00 09 +T 00 00 54 7B 1B 48 48 48 6B 19 16 2D 17 16 16 2B +R 00 00 00 09 +T 00 00 61 17 14 16 29 17 12 1E 2F 7B 19 27 10 +R 00 00 00 09 +T 00 00 6D +R 00 00 00 09 +T 00 00 6D 07 12 06 13 06 14 06 15 06 16 06 17 56 +R 00 00 00 09 +T 00 00 7A 4A 26 F0 +R 00 00 00 09 +T 00 00 7D +R 00 00 00 09 +T 00 00 7D 1F 18 7B 19 97 7B 11 42 1F 0F 0F 0E 0F +R 00 00 00 09 +T 00 00 8A 0D 0F 0C 0F 0B 0F 0A 0F 09 7B 1A 1B 1B +R 00 00 00 09 +T 00 00 97 48 48 48 6B 19 16 0D 17 16 16 0B 17 14 +R 00 00 00 09 +T 00 00 A4 16 09 17 12 1E 0F 7B 19 27 10 +R 00 00 00 09 +T 00 00 AE +R 00 00 00 09 +T 00 00 AE 58 09 17 09 16 09 15 09 14 09 13 09 12 +R 00 00 00 09 +T 00 00 BB 4A 26 F0 +R 00 00 00 09 +T 00 00 BE +R 00 00 00 09 +T 00 00 BE 1F 18 72 FB 07 1F 0F 7B 06 19 17 6B 0E +R 00 00 00 09 +T 00 00 CB 7B 05 19 16 6B 0D 7B 04 19 15 6B 0C 7B +R 00 00 00 09 +T 00 00 D8 03 19 14 16 01 24 02 90 5C +R 00 00 00 09 +T 00 00 E1 +R 00 00 00 09 +T 00 00 E1 72 F9 12 6B 03 17 01 16 0F 17 07 16 0D +R 00 00 00 09 +T 00 00 EE 17 05 7B 0C 6B 04 0C 1B AC +R 00 00 00 09 +T 00 00 F7 00 00 3E +R 00 00 00 09 80 03 00 09 +T 00 00 FA +R 00 00 00 09 +T 00 00 FA 0C 1A 7B 1A A1 08 24 04 AC +R 00 00 00 09 +T 00 01 03 00 00 0D +R 00 00 00 09 80 03 00 09 +T 00 01 06 +R 00 00 00 09 +T 00 01 06 1E 1F 16 07 EF 06 16 05 EF 04 16 03 EF +R 00 00 00 09 +T 00 01 13 02 16 01 FF 5B 1B 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_mullonglong.sym b/device/lib/stm8-large/_mullonglong.sym new file mode 100644 index 0000000..5af92d1 --- /dev/null +++ b/device/lib/stm8-large/_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 11A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_mulschar.asm b/device/lib/stm8-large/_mulschar.asm new file mode 100644 index 0000000..f9d9db9 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x04, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x05, sp) + ld yl, a + rlc a + clr a + sbc a, #0x00 + ld yh, a + pushw y + pushw x + callf __mulint + addw sp, #4 +; ../_mulschar.c: 34: } + retf +; ../_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, (0x06, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld a, (0x07, sp) + ld (0x02, sp), a + clr (0x01, sp) + ldw y, (0x01, sp) + pushw y + pushw x + callf __mulint +; ../_mulschar.c: 40: } + addw sp, #6 + retf +; ../_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, (0x04, sp) + clrw y + ld yl, a + ld a, (0x05, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + pushw x + pushw y + callf __mulint + addw sp, #4 +; ../_mulschar.c: 46: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_mulschar.lst b/device/lib/stm8-large/_mulschar.lst new file mode 100644 index 0000000..472a5c8 --- /dev/null +++ b/device/lib/stm8-large/_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 04 [ 1] 57 ld a, (0x04, 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 05 [ 1] 63 ld a, (0x05, 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 8Ds00r00r00 [ 5] 71 callf __mulint + 000019 5B 04 [ 2] 72 addw sp, #4 + 73 ; ../_mulschar.c: 34: } + 00001B 87 [ 5] 74 retf + 75 ; ../_mulschar.c: 37: _muluschar (unsigned char x, unsigned char y) + 76 ; ----------------------------------------- + 77 ; function _muluschar + 78 ; ----------------------------------------- + 00001C 79 __muluschar: + 00001C 52 02 [ 2] 80 sub sp, #2 + 81 ; ../_mulschar.c: 39: return ((int)((signed char)x) * (int)y); + 00001E 7B 06 [ 1] 82 ld a, (0x06, sp) + 000020 97 [ 1] 83 ld xl, a + 000021 49 [ 1] 84 rlc a + 000022 4F [ 1] 85 clr a + 000023 A2 00 [ 1] 86 sbc a, #0x00 + 000025 95 [ 1] 87 ld xh, a + 000026 7B 07 [ 1] 88 ld a, (0x07, sp) + 000028 6B 02 [ 1] 89 ld (0x02, sp), a + 00002A 0F 01 [ 1] 90 clr (0x01, sp) + 00002C 16 01 [ 2] 91 ldw y, (0x01, sp) + 00002E 90 89 [ 2] 92 pushw y + 000030 89 [ 2] 93 pushw x + 000031 8Ds00r00r00 [ 5] 94 callf __mulint + 95 ; ../_mulschar.c: 40: } + 000035 5B 06 [ 2] 96 addw sp, #6 + 000037 87 [ 5] 97 retf + 98 ; ../_mulschar.c: 43: _mulsuchar (signed char x, signed char y) + 99 ; ----------------------------------------- + 100 ; function _mulsuchar + 101 ; ----------------------------------------- + 000038 102 __mulsuchar: + 103 ; ../_mulschar.c: 45: return ((int)((unsigned char)x) * (int)y); + 000038 7B 04 [ 1] 104 ld a, (0x04, sp) + 00003A 90 5F [ 1] 105 clrw y + 00003C 90 97 [ 1] 106 ld yl, a + 00003E 7B 05 [ 1] 107 ld a, (0x05, sp) + 000040 97 [ 1] 108 ld xl, a + 000041 49 [ 1] 109 rlc a + 000042 4F [ 1] 110 clr a + 000043 A2 00 [ 1] 111 sbc a, #0x00 + 000045 95 [ 1] 112 ld xh, a + 000046 89 [ 2] 113 pushw x + 000047 90 89 [ 2] 114 pushw y + 000049 8Ds00r00r00 [ 5] 115 callf __mulint + 00004D 5B 04 [ 2] 116 addw sp, #4 + 117 ; ../_mulschar.c: 46: } + 00004F 87 [ 5] 118 retf + 119 .area CODE + 120 .area CONST + 121 .area INITIALIZER + 122 .area CABS (ABS) diff --git a/device/lib/stm8-large/_mulschar.rel b/device/lib/stm8-large/_mulschar.rel new file mode 100644 index 0000000..3850eaf --- /dev/null +++ b/device/lib/stm8-large/_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 50 flags 0 addr 0 +S __mulsuchar Def000038 +S __muluschar Def00001C +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 04 97 49 4F A2 00 95 7B 05 90 97 49 +R 00 00 00 09 +T 00 00 0D 4F A2 00 90 95 90 89 89 8D +R 00 00 00 09 +T 00 00 16 00 00 00 5B 04 87 +R 00 00 00 09 82 03 00 00 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 52 02 7B 06 97 49 4F A2 00 95 7B 07 6B +R 00 00 00 09 +T 00 00 29 02 0F 01 16 01 90 89 89 8D +R 00 00 00 09 +T 00 00 32 00 00 00 5B 06 87 +R 00 00 00 09 82 03 00 00 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 7B 04 90 5F 90 97 7B 05 97 49 4F A2 00 +R 00 00 00 09 +T 00 00 45 95 89 90 89 8D 00 00 00 5B 04 87 +R 00 00 00 09 82 08 00 00 diff --git a/device/lib/stm8-large/_mulschar.sym b/device/lib/stm8-large/_mulschar.sym new file mode 100644 index 0000000..11ebf02 --- /dev/null +++ b/device/lib/stm8-large/_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 000038 GR + 9 __muluschar 00001C 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 50 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_rlslonglong.asm b/device/lib/stm8-large/_rlslonglong.asm new file mode 100644 index 0000000..6c9b486 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x1d, sp) + ldw (0x07, sp), y + ldw y, (0x1b, sp) + ldw (0x05, sp), y + ldw y, (0x19, sp) + ldw (0x03, sp), y + ldw y, (0x17, sp) + ldw (0x01, sp), y + ld a, (0x1f, 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, (0x15, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_rlslonglong.lst b/device/lib/stm8-large/_rlslonglong.lst new file mode 100644 index 0000000..2edf3d6 --- /dev/null +++ b/device/lib/stm8-large/_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 1D [ 2] 56 ldw y, (0x1d, sp) + 000004 17 07 [ 2] 57 ldw (0x07, sp), y + 000006 16 1B [ 2] 58 ldw y, (0x1b, sp) + 000008 17 05 [ 2] 59 ldw (0x05, sp), y + 00000A 16 19 [ 2] 60 ldw y, (0x19, sp) + 00000C 17 03 [ 2] 61 ldw (0x03, sp), y + 00000E 16 17 [ 2] 62 ldw y, (0x17, sp) + 000010 17 01 [ 2] 63 ldw (0x01, sp), y + 000012 7B 1F [ 1] 64 ld a, (0x1f, 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 15 [ 2] 87 ldw x, (0x15, 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 87 [ 5] 98 retf + 99 .area CODE + 100 .area CONST + 101 .area INITIALIZER + 102 .area CABS (ABS) diff --git a/device/lib/stm8-large/_rlslonglong.rel b/device/lib/stm8-large/_rlslonglong.rel new file mode 100644 index 0000000..8bc0769 --- /dev/null +++ b/device/lib/stm8-large/_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 1D 17 07 16 1B 17 05 16 19 17 +R 00 00 00 09 +T 00 00 0D 03 16 17 17 01 7B 1F 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 15 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_rlslonglong.sym b/device/lib/stm8-large/_rlslonglong.sym new file mode 100644 index 0000000..95120a9 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_rlulonglong.asm b/device/lib/stm8-large/_rlulonglong.asm new file mode 100644 index 0000000..47b7dea --- /dev/null +++ b/device/lib/stm8-large/_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, #20 + 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, (0x1e, 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, (0x1e, sp) + sub a, #0x10 + ld (0x1e, 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, (0x1e, 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, (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 +; ../_rlulonglong.c: 57: } + addw sp, #16 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_rlulonglong.lst b/device/lib/stm8-large/_rlulonglong.lst new file mode 100644 index 0000000..9a2adb5 --- /dev/null +++ b/device/lib/stm8-large/_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 14 [ 2] 57 addw y, #20 + 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 1E [ 1] 73 ld a, (0x1e, 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 1E [ 1] 103 ld a, (0x1e, sp) + 000049 A0 10 [ 1] 104 sub a, #0x10 + 00004B 6B 1E [ 1] 105 ld (0x1e, 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 1E [ 1] 113 ld a, (0x1e, 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 14 [ 2] 184 ldw x, (0x14, sp) + 0000C5 16 1C [ 2] 185 ldw y, (0x1c, sp) + 0000C7 EF 06 [ 2] 186 ldw (#6, x), y + 0000C9 16 1A [ 2] 187 ldw y, (0x1a, sp) + 0000CB EF 04 [ 2] 188 ldw (#4, x), y + 0000CD 16 18 [ 2] 189 ldw y, (0x18, sp) + 0000CF EF 02 [ 2] 190 ldw (#2, x), y + 0000D1 16 16 [ 2] 191 ldw y, (0x16, sp) + 0000D3 FF [ 2] 192 ldw (x), y + 193 ; ../_rlulonglong.c: 57: } + 0000D4 5B 10 [ 2] 194 addw sp, #16 + 0000D6 87 [ 5] 195 retf + 196 .area CODE + 197 .area CONST + 198 .area INITIALIZER + 199 .area CABS (ABS) diff --git a/device/lib/stm8-large/_rlulonglong.rel b/device/lib/stm8-large/_rlulonglong.rel new file mode 100644 index 0000000..2ff1327 --- /dev/null +++ b/device/lib/stm8-large/_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 14 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 1E 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 1E A0 10 6B 1E +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 1E 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 14 16 1C EF 06 16 1A EF 04 16 18 EF +R 00 00 00 09 +T 00 00 D0 02 16 16 FF 5B 10 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_rlulonglong.sym b/device/lib/stm8-large/_rlulonglong.sym new file mode 100644 index 0000000..ad9513c --- /dev/null +++ b/device/lib/stm8-large/_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-large/_rrslonglong.asm b/device/lib/stm8-large/_rrslonglong.asm new file mode 100644 index 0000000..0351003 --- /dev/null +++ b/device/lib/stm8-large/_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, #20 + 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, (0x1e, 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, (0x1e, sp) + sub a, #0x10 + ld (0x1e, 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, (0x1e, 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, (0x1e, 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, (0x1e, 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, (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 +; ../_rrslonglong.c: 58: } + addw sp, #16 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_rrslonglong.lst b/device/lib/stm8-large/_rrslonglong.lst new file mode 100644 index 0000000..1ef8d3c --- /dev/null +++ b/device/lib/stm8-large/_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 14 [ 2] 57 addw y, #20 + 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 1E [ 1] 74 ld a, (0x1e, 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 1E [ 1] 113 ld a, (0x1e, sp) + 000053 A0 10 [ 1] 114 sub a, #0x10 + 000055 6B 1E [ 1] 115 ld (0x1e, 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 1E [ 1] 123 ld a, (0x1e, 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 1E [ 1] 147 ld a, (0x1e, 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 1E [ 1] 180 ld a, (0x1e, 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 14 [ 2] 196 ldw x, (0x14, sp) + 0000D9 16 1C [ 2] 197 ldw y, (0x1c, sp) + 0000DB EF 06 [ 2] 198 ldw (#6, x), y + 0000DD 16 1A [ 2] 199 ldw y, (0x1a, sp) + 0000DF EF 04 [ 2] 200 ldw (#4, x), y + 0000E1 16 18 [ 2] 201 ldw y, (0x18, sp) + 0000E3 EF 02 [ 2] 202 ldw (#2, x), y + 0000E5 16 16 [ 2] 203 ldw y, (0x16, sp) + 0000E7 FF [ 2] 204 ldw (x), y + 205 ; ../_rrslonglong.c: 58: } + 0000E8 5B 10 [ 2] 206 addw sp, #16 + 0000EA 87 [ 5] 207 retf + 208 .area CODE + 209 .area CONST + 210 .area INITIALIZER + 211 .area CABS (ABS) diff --git a/device/lib/stm8-large/_rrslonglong.rel b/device/lib/stm8-large/_rrslonglong.rel new file mode 100644 index 0000000..6faf7e0 --- /dev/null +++ b/device/lib/stm8-large/_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 14 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 1E 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 1E A0 10 6B 1E 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 1E 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 1E 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 1E 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 14 16 1C EF 06 16 1A EF 04 16 18 EF +R 00 00 00 09 +T 00 00 E4 02 16 16 FF 5B 10 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_rrslonglong.sym b/device/lib/stm8-large/_rrslonglong.sym new file mode 100644 index 0000000..a44e4ec --- /dev/null +++ b/device/lib/stm8-large/_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-large/_rrulonglong.asm b/device/lib/stm8-large/_rrulonglong.asm new file mode 100644 index 0000000..28acacb --- /dev/null +++ b/device/lib/stm8-large/_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, #20 + 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, (0x1e, 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, (0x1e, sp) + sub a, #0x10 + ld (0x1e, 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, (0x1e, 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, (0x1e, 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, (0x1e, 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, (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 +; ../_rrulonglong.c: 58: } + addw sp, #16 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_rrulonglong.lst b/device/lib/stm8-large/_rrulonglong.lst new file mode 100644 index 0000000..39367c5 --- /dev/null +++ b/device/lib/stm8-large/_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 14 [ 2] 57 addw y, #20 + 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 1E [ 1] 74 ld a, (0x1e, 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 1E [ 1] 103 ld a, (0x1e, sp) + 000047 A0 10 [ 1] 104 sub a, #0x10 + 000049 6B 1E [ 1] 105 ld (0x1e, 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 1E [ 1] 113 ld a, (0x1e, 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 1E [ 1] 137 ld a, (0x1e, 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 1E [ 1] 170 ld a, (0x1e, 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 14 [ 2] 186 ldw x, (0x14, sp) + 0000CD 16 1C [ 2] 187 ldw y, (0x1c, sp) + 0000CF EF 06 [ 2] 188 ldw (#6, x), y + 0000D1 16 1A [ 2] 189 ldw y, (0x1a, sp) + 0000D3 EF 04 [ 2] 190 ldw (#4, x), y + 0000D5 16 18 [ 2] 191 ldw y, (0x18, sp) + 0000D7 EF 02 [ 2] 192 ldw (#2, x), y + 0000D9 16 16 [ 2] 193 ldw y, (0x16, sp) + 0000DB FF [ 2] 194 ldw (x), y + 195 ; ../_rrulonglong.c: 58: } + 0000DC 5B 10 [ 2] 196 addw sp, #16 + 0000DE 87 [ 5] 197 retf + 198 .area CODE + 199 .area CONST + 200 .area INITIALIZER + 201 .area CABS (ABS) diff --git a/device/lib/stm8-large/_rrulonglong.rel b/device/lib/stm8-large/_rrulonglong.rel new file mode 100644 index 0000000..ee613ee --- /dev/null +++ b/device/lib/stm8-large/_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 14 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 1E 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 1E A0 10 6B 1E 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 1E 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 1E 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 1E 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 14 16 1C EF 06 16 1A EF 04 16 18 EF +R 00 00 00 09 +T 00 00 D8 02 16 16 FF 5B 10 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_rrulonglong.sym b/device/lib/stm8-large/_rrulonglong.sym new file mode 100644 index 0000000..6f321f3 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_schar2fs.asm b/device/lib/stm8-large/_schar2fs.asm new file mode 100644 index 0000000..ac5ed8c --- /dev/null +++ b/device/lib/stm8-large/_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, (0x04, sp) + ld xl, a + rlc a + clr a + sbc a, #0x00 + ld xh, a + ld yl, a + ld yh, a + pushw x + pushw y + callf ___slong2fs + addw sp, #4 +; ../_schar2fs.c: 57: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_schar2fs.lst b/device/lib/stm8-large/_schar2fs.lst new file mode 100644 index 0000000..8ecc038 --- /dev/null +++ b/device/lib/stm8-large/_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 04 [ 1] 56 ld a, (0x04, 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 8Ds00r00r00 [ 5] 66 callf ___slong2fs + 000013 5B 04 [ 2] 67 addw sp, #4 + 68 ; ../_schar2fs.c: 57: } + 000015 87 [ 5] 69 retf + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8-large/_schar2fs.rel b/device/lib/stm8-large/_schar2fs.rel new file mode 100644 index 0000000..4f1d52d --- /dev/null +++ b/device/lib/stm8-large/_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 16 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 04 97 49 4F A2 00 95 90 97 90 95 89 +R 00 00 00 09 +T 00 00 0D 90 89 8D 00 00 00 5B 04 87 +R 00 00 00 09 82 06 00 00 diff --git a/device/lib/stm8-large/_schar2fs.sym b/device/lib/stm8-large/_schar2fs.sym new file mode 100644 index 0000000..a5b11e9 --- /dev/null +++ b/device/lib/stm8-large/_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 16 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_sint2fs.asm b/device/lib/stm8-large/_sint2fs.asm new file mode 100644 index 0000000..5742891 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x04, sp) + clrw x + tnzw y + jrpl 00103$ + decw x +00103$: + pushw y + pushw x + callf ___slong2fs + addw sp, #4 +; ../_sint2fs.c: 56: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_sint2fs.lst b/device/lib/stm8-large/_sint2fs.lst new file mode 100644 index 0000000..679b12a --- /dev/null +++ b/device/lib/stm8-large/_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 04 [ 2] 56 ldw y, (0x04, 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 8Ds00r00r00 [ 5] 64 callf ___slong2fs + 00000F 5B 04 [ 2] 65 addw sp, #4 + 66 ; ../_sint2fs.c: 56: } + 000011 87 [ 5] 67 retf + 68 .area CODE + 69 .area CONST + 70 .area INITIALIZER + 71 .area CABS (ABS) diff --git a/device/lib/stm8-large/_sint2fs.rel b/device/lib/stm8-large/_sint2fs.rel new file mode 100644 index 0000000..8089898 --- /dev/null +++ b/device/lib/stm8-large/_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 12 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 04 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 8D 00 00 00 5B 04 87 +R 00 00 00 09 82 07 00 00 diff --git a/device/lib/stm8-large/_sint2fs.sym b/device/lib/stm8-large/_sint2fs.sym new file mode 100644 index 0000000..b6f68c5 --- /dev/null +++ b/device/lib/stm8-large/_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 12 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_slong2fs.asm b/device/lib/stm8-large/_slong2fs.asm new file mode 100644 index 0000000..4687f35 --- /dev/null +++ b/device/lib/stm8-large/_slong2fs.asm @@ -0,0 +1,88 @@ +;-------------------------------------------------------- +; 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 (0x04, sp) + jrpl 00102$ +; ../_slong2fs.c: 81: return -__ulong2fs(-sl); + ldw y, (0x06, sp) + negw y + ldw x, (0x04, sp) + jrnc 00112$ + incw x +00112$: + negw x + pushw y + pushw x + callf ___ulong2fs + addw sp, #4 + sllw y + ccf + rrcw y + jra 00104$ +00102$: +; ../_slong2fs.c: 83: return __ulong2fs(sl); + ldw x, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + callf ___ulong2fs + addw sp, #4 +00104$: +; ../_slong2fs.c: 84: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_slong2fs.lst b/device/lib/stm8-large/_slong2fs.lst new file mode 100644 index 0000000..cc78989 --- /dev/null +++ b/device/lib/stm8-large/_slong2fs.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 _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 04 [ 1] 56 tnz (0x04, sp) + 000002 2A 1A [ 1] 57 jrpl 00102$ + 58 ; ../_slong2fs.c: 81: return -__ulong2fs(-sl); + 000004 16 06 [ 2] 59 ldw y, (0x06, sp) + 000006 90 50 [ 2] 60 negw y + 000008 1E 04 [ 2] 61 ldw x, (0x04, 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 8Ds00r00r00 [ 5] 68 callf ___ulong2fs + 000015 5B 04 [ 2] 69 addw sp, #4 + 000017 90 58 [ 2] 70 sllw y + 000019 8C [ 1] 71 ccf + 00001A 90 56 [ 2] 72 rrcw y + 00001C 20 0C [ 2] 73 jra 00104$ + 00001E 74 00102$: + 75 ; ../_slong2fs.c: 83: return __ulong2fs(sl); + 00001E 1E 06 [ 2] 76 ldw x, (0x06, sp) + 000020 89 [ 2] 77 pushw x + 000021 1E 06 [ 2] 78 ldw x, (0x06, sp) + 000023 89 [ 2] 79 pushw x + 000024 8Ds00r00r00 [ 5] 80 callf ___ulong2fs + 000028 5B 04 [ 2] 81 addw sp, #4 + 00002A 82 00104$: + 83 ; ../_slong2fs.c: 84: } + 00002A 87 [ 5] 84 retf + 85 .area CODE + 86 .area CONST + 87 .area INITIALIZER + 88 .area CABS (ABS) diff --git a/device/lib/stm8-large/_slong2fs.rel b/device/lib/stm8-large/_slong2fs.rel new file mode 100644 index 0000000..a73b32f --- /dev/null +++ b/device/lib/stm8-large/_slong2fs.rel @@ -0,0 +1,36 @@ +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 2B 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 04 2A 1A 16 06 90 50 1E 04 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 8D 00 00 00 5B 04 90 58 8C +R 00 00 00 09 82 08 00 00 +T 00 00 1A 90 56 20 0C +R 00 00 00 09 +T 00 00 1E +R 00 00 00 09 +T 00 00 1E 1E 06 89 1E 06 89 8D 00 00 00 5B 04 +R 00 00 00 09 82 0A 00 00 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_slong2fs.sym b/device/lib/stm8-large/_slong2fs.sym new file mode 100644 index 0000000..946799d --- /dev/null +++ b/device/lib/stm8-large/_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 2B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_startup.asm b/device/lib/stm8-large/_startup.asm new file mode 100644 index 0000000..60f288d --- /dev/null +++ b/device/lib/stm8-large/_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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_startup.lst b/device/lib/stm8-large/_startup.lst new file mode 100644 index 0000000..20b88fb --- /dev/null +++ b/device/lib/stm8-large/_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 87 [ 5] 57 retf + 58 .area CODE + 59 .area CONST + 60 .area INITIALIZER + 61 .area CABS (ABS) diff --git a/device/lib/stm8-large/_startup.rel b/device/lib/stm8-large/_startup.rel new file mode 100644 index 0000000..b26b400 --- /dev/null +++ b/device/lib/stm8-large/_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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_startup.sym b/device/lib/stm8-large/_startup.sym new file mode 100644 index 0000000..fd727c6 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_strcat.asm b/device/lib/stm8-large/_strcat.asm new file mode 100644 index 0000000..851279f --- /dev/null +++ b/device/lib/stm8-large/_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, (0x04, 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, (0x06, 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, (0x04, sp) +; ../_strcat.c: 41: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strcat.lst b/device/lib/stm8-large/_strcat.lst new file mode 100644 index 0000000..8091cbf --- /dev/null +++ b/device/lib/stm8-large/_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 04 [ 2] 55 ldw x, (0x04, 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 06 [ 2] 65 ldw y, (0x06, 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 04 [ 2] 74 ldw x, (0x04, sp) + 75 ; ../_strcat.c: 41: } + 000015 87 [ 5] 76 retf + 77 .area CODE + 78 .area CONST + 79 .area INITIALIZER + 80 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strcat.rel b/device/lib/stm8-large/_strcat.rel new file mode 100644 index 0000000..6697155 --- /dev/null +++ b/device/lib/stm8-large/_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 04 +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 06 +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 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strcat.sym b/device/lib/stm8-large/_strcat.sym new file mode 100644 index 0000000..f51b52f --- /dev/null +++ b/device/lib/stm8-large/_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-large/_strchr.asm b/device/lib/stm8-large/_strchr.asm new file mode 100644 index 0000000..98fa86c --- /dev/null +++ b/device/lib/stm8-large/_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, (0x05, sp) +00102$: + ld a, (x) + ld (0x01, sp), a + clrw y + ld a, (0x01, sp) + ld yl, a + exgw x, y + cpw x, (0x07, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strchr.lst b/device/lib/stm8-large/_strchr.lst new file mode 100644 index 0000000..b889ba0 --- /dev/null +++ b/device/lib/stm8-large/_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 05 [ 2] 56 ldw x, (0x05, 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 07 [ 2] 64 cpw x, (0x07, 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 87 [ 5] 89 retf + 90 .area CODE + 91 .area CONST + 92 .area INITIALIZER + 93 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strchr.rel b/device/lib/stm8-large/_strchr.rel new file mode 100644 index 0000000..d998a7a --- /dev/null +++ b/device/lib/stm8-large/_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 05 +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 07 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strchr.sym b/device/lib/stm8-large/_strchr.sym new file mode 100644 index 0000000..7cf507b --- /dev/null +++ b/device/lib/stm8-large/_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-large/_strcmp.asm b/device/lib/stm8-large/_strcmp.asm new file mode 100644 index 0000000..d20d229 --- /dev/null +++ b/device/lib/stm8-large/_strcmp.asm @@ -0,0 +1,94 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strcmp + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strcmp +;-------------------------------------------------------- +; 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 +; ../_strcmp.c: 34: int strcmp ( const char * asrc, const char * adst ) +; ----------------------------------------- +; function strcmp +; ----------------------------------------- +_strcmp: + sub sp, #8 +; ../_strcmp.c: 40: const char * src = asrc; + ldw y, (0x0c, sp) + ldw (0x01, sp), y +; ../_strcmp.c: 41: const char * dst = adst; + ldw y, (0x0e, sp) + ldw (0x03, sp), y +; ../_strcmp.c: 43: while( ! (*src - *dst) && *dst) +00102$: + ldw x, (0x01, sp) + ld a, (x) + clrw x + ld xl, a + ldw y, (0x03, sp) + ld a, (y) + ld (0x06, sp), a + clr (0x05, sp) + subw x, (0x05, sp) + ldw (0x07, sp), x + jrne 00104$ + tnz a + jreq 00104$ +; ../_strcmp.c: 44: ++src, ++dst; + ldw x, (0x01, sp) + incw x + ldw (0x07, sp), x + ldw (0x01, sp), x + ldw x, (0x03, sp) + incw x + ldw (0x03, sp), x + jra 00102$ +00104$: +; ../_strcmp.c: 46: return *src - *dst; + ldw x, (0x07, sp) +; ../_strcmp.c: 55: } + addw sp, #8 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strcmp.lst b/device/lib/stm8-large/_strcmp.lst new file mode 100644 index 0000000..8ce4824 --- /dev/null +++ b/device/lib/stm8-large/_strcmp.lst @@ -0,0 +1,94 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module _strcmp + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strcmp + 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 ; ../_strcmp.c: 34: int strcmp ( const char * asrc, const char * adst ) + 50 ; ----------------------------------------- + 51 ; function strcmp + 52 ; ----------------------------------------- + 000000 53 _strcmp: + 000000 52 08 [ 2] 54 sub sp, #8 + 55 ; ../_strcmp.c: 40: const char * src = asrc; + 000002 16 0C [ 2] 56 ldw y, (0x0c, sp) + 000004 17 01 [ 2] 57 ldw (0x01, sp), y + 58 ; ../_strcmp.c: 41: const char * dst = adst; + 000006 16 0E [ 2] 59 ldw y, (0x0e, sp) + 000008 17 03 [ 2] 60 ldw (0x03, sp), y + 61 ; ../_strcmp.c: 43: while( ! (*src - *dst) && *dst) + 00000A 62 00102$: + 00000A 1E 01 [ 2] 63 ldw x, (0x01, sp) + 00000C F6 [ 1] 64 ld a, (x) + 00000D 5F [ 1] 65 clrw x + 00000E 97 [ 1] 66 ld xl, a + 00000F 16 03 [ 2] 67 ldw y, (0x03, sp) + 000011 90 F6 [ 1] 68 ld a, (y) + 000013 6B 06 [ 1] 69 ld (0x06, sp), a + 000015 0F 05 [ 1] 70 clr (0x05, sp) + 000017 72 F0 05 [ 2] 71 subw x, (0x05, sp) + 00001A 1F 07 [ 2] 72 ldw (0x07, sp), x + 00001C 26 11 [ 1] 73 jrne 00104$ + 00001E 4D [ 1] 74 tnz a + 00001F 27 0E [ 1] 75 jreq 00104$ + 76 ; ../_strcmp.c: 44: ++src, ++dst; + 000021 1E 01 [ 2] 77 ldw x, (0x01, sp) + 000023 5C [ 1] 78 incw x + 000024 1F 07 [ 2] 79 ldw (0x07, sp), x + 000026 1F 01 [ 2] 80 ldw (0x01, sp), x + 000028 1E 03 [ 2] 81 ldw x, (0x03, sp) + 00002A 5C [ 1] 82 incw x + 00002B 1F 03 [ 2] 83 ldw (0x03, sp), x + 00002D 20 DB [ 2] 84 jra 00102$ + 00002F 85 00104$: + 86 ; ../_strcmp.c: 46: return *src - *dst; + 00002F 1E 07 [ 2] 87 ldw x, (0x07, sp) + 88 ; ../_strcmp.c: 55: } + 000031 5B 08 [ 2] 89 addw sp, #8 + 000033 87 [ 5] 90 retf + 91 .area CODE + 92 .area CONST + 93 .area INITIALIZER + 94 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strcmp.rel b/device/lib/stm8-large/_strcmp.rel new file mode 100644 index 0000000..68adae0 --- /dev/null +++ b/device/lib/stm8-large/_strcmp.rel @@ -0,0 +1,33 @@ +XH3 +H B areas 2 global symbols +M _strcmp +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 34 flags 0 addr 0 +S _strcmp 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 0C 17 01 16 0E 17 03 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 1E 01 F6 5F 97 16 03 90 F6 6B 06 0F 05 +R 00 00 00 09 +T 00 00 17 72 F0 05 1F 07 26 11 4D 27 0E 1E 01 5C +R 00 00 00 09 +T 00 00 24 1F 07 1F 01 1E 03 5C 1F 03 20 DB +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 1E 07 5B 08 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strcmp.sym b/device/lib/stm8-large/_strcmp.sym new file mode 100644 index 0000000..a228b40 --- /dev/null +++ b/device/lib/stm8-large/_strcmp.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 _strcmp 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-large/_strcpy.asm b/device/lib/stm8-large/_strcpy.asm new file mode 100644 index 0000000..0eec522 --- /dev/null +++ b/device/lib/stm8-large/_strcpy.asm @@ -0,0 +1,73 @@ +;-------------------------------------------------------- +; File Created by SDCC : free open source ANSI-C Compiler +; Version 3.9.3 #11345 (Linux) +;-------------------------------------------------------- + .module _strcpy + .optsdcc -mstm8 + +;-------------------------------------------------------- +; Public variables in this module +;-------------------------------------------------------- + .globl _strcpy +;-------------------------------------------------------- +; 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 +; ../_strcpy.c: 34: char * strcpy ( char * d, const char * s ) +; ----------------------------------------- +; function strcpy +; ----------------------------------------- +_strcpy: +; ../_strcpy.c: 37: register char * to = d; + ldw y, (0x04, sp) +; ../_strcpy.c: 38: register const char * from = s; + ldw x, (0x06, sp) +; ../_strcpy.c: 40: while (*to++ = *from++) ; +00101$: + ld a, (x) + incw x + ld (y), a + incw y + tnz a + jrne 00101$ +; ../_strcpy.c: 42: return d; + ldw x, (0x04, sp) +; ../_strcpy.c: 50: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strcpy.lst b/device/lib/stm8-large/_strcpy.lst new file mode 100644 index 0000000..3ccb0e1 --- /dev/null +++ b/device/lib/stm8-large/_strcpy.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 _strcpy + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _strcpy + 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 ; ../_strcpy.c: 34: char * strcpy ( char * d, const char * s ) + 50 ; ----------------------------------------- + 51 ; function strcpy + 52 ; ----------------------------------------- + 000000 53 _strcpy: + 54 ; ../_strcpy.c: 37: register char * to = d; + 000000 16 04 [ 2] 55 ldw y, (0x04, sp) + 56 ; ../_strcpy.c: 38: register const char * from = s; + 000002 1E 06 [ 2] 57 ldw x, (0x06, sp) + 58 ; ../_strcpy.c: 40: while (*to++ = *from++) ; + 000004 59 00101$: + 000004 F6 [ 1] 60 ld a, (x) + 000005 5C [ 1] 61 incw x + 000006 90 F7 [ 1] 62 ld (y), a + 000008 90 5C [ 1] 63 incw y + 00000A 4D [ 1] 64 tnz a + 00000B 26 F7 [ 1] 65 jrne 00101$ + 66 ; ../_strcpy.c: 42: return d; + 00000D 1E 04 [ 2] 67 ldw x, (0x04, sp) + 68 ; ../_strcpy.c: 50: } + 00000F 87 [ 5] 69 retf + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strcpy.rel b/device/lib/stm8-large/_strcpy.rel new file mode 100644 index 0000000..12851d0 --- /dev/null +++ b/device/lib/stm8-large/_strcpy.rel @@ -0,0 +1,25 @@ +XH3 +H B areas 2 global symbols +M _strcpy +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 10 flags 0 addr 0 +S _strcpy Def000000 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 16 04 1E 06 +R 00 00 00 09 +T 00 00 04 +R 00 00 00 09 +T 00 00 04 F6 5C 90 F7 90 5C 4D 26 F7 1E 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strcpy.sym b/device/lib/stm8-large/_strcpy.sym new file mode 100644 index 0000000..d8171fd --- /dev/null +++ b/device/lib/stm8-large/_strcpy.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 _strcpy 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 10 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_strcspn.asm b/device/lib/stm8-large/_strcspn.asm new file mode 100644 index 0000000..47e1130 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x06, 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, (0x0c, sp) + pushw x + callf _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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strcspn.lst b/device/lib/stm8-large/_strcspn.lst new file mode 100644 index 0000000..68c8f4b --- /dev/null +++ b/device/lib/stm8-large/_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 06 [ 2] 59 ldw y, (0x06, 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 1C [ 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 0C [ 2] 70 ldw x, (0x0c, sp) + 000014 89 [ 2] 71 pushw x + 000015 8Ds00r00r00 [ 5] 72 callf _strchr + 000019 5B 04 [ 2] 73 addw sp, #4 + 00001B 90 85 [ 2] 74 popw y + 00001D 5D [ 2] 75 tnzw x + 00001E 26 09 [ 1] 76 jrne 00106$ + 77 ; ../_strcspn.c: 40: count++; + 000020 1E 01 [ 2] 78 ldw x, (0x01, sp) + 000022 5C [ 1] 79 incw x + 000023 1F 01 [ 2] 80 ldw (0x01, sp), x + 81 ; ../_strcspn.c: 41: string++; + 000025 90 5C [ 1] 82 incw y + 000027 20 DE [ 2] 83 jra 00104$ + 000029 84 00106$: + 85 ; ../_strcspn.c: 44: return count; + 000029 1E 01 [ 2] 86 ldw x, (0x01, sp) + 87 ; ../_strcspn.c: 45: } + 00002B 5B 02 [ 2] 88 addw sp, #2 + 00002D 87 [ 5] 89 retf + 90 .area CODE + 91 .area CONST + 92 .area INITIALIZER + 93 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strcspn.rel b/device/lib/stm8-large/_strcspn.rel new file mode 100644 index 0000000..0e05a32 --- /dev/null +++ b/device/lib/stm8-large/_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 2E 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 06 +R 00 00 00 09 +T 00 00 07 +R 00 00 00 09 +T 00 00 07 90 F6 97 4D 27 1C 4F 95 90 89 89 1E 0C +R 00 00 00 09 +T 00 00 14 89 8D 00 00 00 5B 04 90 85 5D 26 09 1E +R 00 00 00 09 82 05 00 01 +T 00 00 21 01 5C 1F 01 90 5C 20 DE +R 00 00 00 09 +T 00 00 29 +R 00 00 00 09 +T 00 00 29 1E 01 5B 02 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strcspn.sym b/device/lib/stm8-large/_strcspn.sym new file mode 100644 index 0000000..ac18db4 --- /dev/null +++ b/device/lib/stm8-large/_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 2E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_strlen.asm b/device/lib/stm8-large/_strlen.asm new file mode 100644 index 0000000..69629a6 --- /dev/null +++ b/device/lib/stm8-large/_strlen.asm @@ -0,0 +1,72 @@ +;-------------------------------------------------------- +; 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, (0x04, sp) +00101$: + ld a, (y) + incw y + tnz a + jreq 00103$ +; ../_strlen.c: 40: i++ ; + incw x + jra 00101$ +00103$: +; ../_strlen.c: 42: return i; +; ../_strlen.c: 43: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strlen.lst b/device/lib/stm8-large/_strlen.lst new file mode 100644 index 0000000..3c20886 --- /dev/null +++ b/device/lib/stm8-large/_strlen.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 _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 04 [ 2] 56 ldw y, (0x04, 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 27 03 [ 1] 61 jreq 00103$ + 62 ; ../_strlen.c: 40: i++ ; + 00000A 5C [ 1] 63 incw x + 00000B 20 F6 [ 2] 64 jra 00101$ + 00000D 65 00103$: + 66 ; ../_strlen.c: 42: return i; + 67 ; ../_strlen.c: 43: } + 00000D 87 [ 5] 68 retf + 69 .area CODE + 70 .area CONST + 71 .area INITIALIZER + 72 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strlen.rel b/device/lib/stm8-large/_strlen.rel new file mode 100644 index 0000000..84ab940 --- /dev/null +++ b/device/lib/stm8-large/_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 E 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 04 +R 00 00 00 09 +T 00 00 03 +R 00 00 00 09 +T 00 00 03 90 F6 90 5C 4D 27 03 5C 20 F6 +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strlen.sym b/device/lib/stm8-large/_strlen.sym new file mode 100644 index 0000000..0f65ae7 --- /dev/null +++ b/device/lib/stm8-large/_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 E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_strncat.asm b/device/lib/stm8-large/_strncat.asm new file mode 100644 index 0000000..1183d93 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0e, 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 (0x0e, sp), x +; ../_strncat.c: 39: while (count--) + ldw y, (0x10, sp) + ldw (0x05, sp), y + ldw y, (0x0e, sp) + ldw (0x07, sp), y + ldw y, (0x12, 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 (0x0e, 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, (0x0e, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strncat.lst b/device/lib/stm8-large/_strncat.lst new file mode 100644 index 0000000..f5bde3a --- /dev/null +++ b/device/lib/stm8-large/_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 0E [ 2] 56 ldw y, (0x0e, 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 0E [ 2] 67 ldw (0x0e, sp), x + 68 ; ../_strncat.c: 39: while (count--) + 00000F 16 10 [ 2] 69 ldw y, (0x10, sp) + 000011 17 05 [ 2] 70 ldw (0x05, sp), y + 000013 16 0E [ 2] 71 ldw y, (0x0e, sp) + 000015 17 07 [ 2] 72 ldw (0x07, sp), y + 000017 16 12 [ 2] 73 ldw y, (0x12, 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 0E [ 2] 94 ldw (0x0e, 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 0E [ 2] 102 ldw y, (0x0e, 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 87 [ 5] 111 retf + 112 .area CODE + 113 .area CONST + 114 .area INITIALIZER + 115 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strncat.rel b/device/lib/stm8-large/_strncat.rel new file mode 100644 index 0000000..5275d06 --- /dev/null +++ b/device/lib/stm8-large/_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 0E 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 0E 16 10 17 05 16 +R 00 00 00 09 +T 00 00 14 0E 17 07 16 12 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 0E 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 0E 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strncat.sym b/device/lib/stm8-large/_strncat.sym new file mode 100644 index 0000000..7690e64 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_strncmp.asm b/device/lib/stm8-large/_strncmp.asm new file mode 100644 index 0000000..c5fea04 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0d, sp) +; ../_strncmp.c: 36: while (--count && *first && *first == *last) { + jreq 00108$ + ldw y, (0x09, sp) + ldw (0x02, sp), y + ldw y, (0x0b, sp) + ldw (0x04, sp), y + ldw y, (0x0d, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strncmp.lst b/device/lib/stm8-large/_strncmp.lst new file mode 100644 index 0000000..16b1ae6 --- /dev/null +++ b/device/lib/stm8-large/_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 0D [ 2] 57 ldw x, (0x0d, sp) + 58 ; ../_strncmp.c: 36: while (--count && *first && *first == *last) { + 000004 27 38 [ 1] 59 jreq 00108$ + 000006 16 09 [ 2] 60 ldw y, (0x09, sp) + 000008 17 02 [ 2] 61 ldw (0x02, sp), y + 00000A 16 0B [ 2] 62 ldw y, (0x0b, sp) + 00000C 17 04 [ 2] 63 ldw (0x04, sp), y + 00000E 16 0D [ 2] 64 ldw y, (0x0d, 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 87 [ 5] 100 retf + 101 .area CODE + 102 .area CONST + 103 .area INITIALIZER + 104 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strncmp.rel b/device/lib/stm8-large/_strncmp.rel new file mode 100644 index 0000000..4fa1642 --- /dev/null +++ b/device/lib/stm8-large/_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 0D 27 38 16 09 17 02 16 0B 17 +R 00 00 00 09 +T 00 00 0D 04 16 0D +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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strncmp.sym b/device/lib/stm8-large/_strncmp.sym new file mode 100644 index 0000000..1b00c4a --- /dev/null +++ b/device/lib/stm8-large/_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-large/_strncpy.asm b/device/lib/stm8-large/_strncpy.asm new file mode 100644 index 0000000..22dfe58 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0a, sp) + ldw (0x01, sp), y +; ../_strncpy.c: 37: while ( n && *s ) + ldw y, (0x0e, sp) + ldw (0x05, sp), y + ldw y, (0x0c, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strncpy.lst b/device/lib/stm8-large/_strncpy.lst new file mode 100644 index 0000000..4ca9f2c --- /dev/null +++ b/device/lib/stm8-large/_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 0A [ 2] 56 ldw y, (0x0a, sp) + 000004 17 01 [ 2] 57 ldw (0x01, sp), y + 58 ; ../_strncpy.c: 37: while ( n && *s ) + 000006 16 0E [ 2] 59 ldw y, (0x0e, sp) + 000008 17 05 [ 2] 60 ldw (0x05, sp), y + 00000A 16 0C [ 2] 61 ldw y, (0x0c, 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 87 [ 5] 100 retf + 101 .area CODE + 102 .area CONST + 103 .area INITIALIZER + 104 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strncpy.rel b/device/lib/stm8-large/_strncpy.rel new file mode 100644 index 0000000..6b7012d --- /dev/null +++ b/device/lib/stm8-large/_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 0A 17 01 16 0E 17 05 16 0C 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strncpy.sym b/device/lib/stm8-large/_strncpy.sym new file mode 100644 index 0000000..0d065a3 --- /dev/null +++ b/device/lib/stm8-large/_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-large/_strpbrk.asm b/device/lib/stm8-large/_strpbrk.asm new file mode 100644 index 0000000..90ba709 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0a, 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, (0x0a, sp) + pushw x + callf _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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strpbrk.lst b/device/lib/stm8-large/_strpbrk.lst new file mode 100644 index 0000000..5f56474 --- /dev/null +++ b/device/lib/stm8-large/_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 0A [ 2] 60 ldw y, (0x0a, 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 20 [ 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 0A [ 2] 72 ldw x, (0x0a, sp) + 000015 89 [ 2] 73 pushw x + 000016 8Ds00r00r00 [ 5] 74 callf _strchr + 00001A 5B 04 [ 2] 75 addw sp, #4 + 76 ; ../_strpbrk.c: 38: if (p != NULL && (ret == NULL || p < ret)) { + 00001C 5D [ 2] 77 tnzw x + 00001D 27 0A [ 1] 78 jreq 00102$ + 00001F 16 01 [ 2] 79 ldw y, (0x01, sp) + 000021 27 04 [ 1] 80 jreq 00101$ + 000023 13 01 [ 2] 81 cpw x, (0x01, sp) + 000025 24 02 [ 1] 82 jrnc 00102$ + 000027 83 00101$: + 84 ; ../_strpbrk.c: 39: ret = p; + 000027 1F 01 [ 2] 85 ldw (0x01, sp), x + 000029 86 00102$: + 87 ; ../_strpbrk.c: 41: control++; + 000029 1E 03 [ 2] 88 ldw x, (0x03, sp) + 00002B 5C [ 1] 89 incw x + 00002C 1F 03 [ 2] 90 ldw (0x03, sp), x + 00002E 20 D9 [ 2] 91 jra 00105$ + 000030 92 00107$: + 93 ; ../_strpbrk.c: 44: return (ret); + 000030 1E 01 [ 2] 94 ldw x, (0x01, sp) + 95 ; ../_strpbrk.c: 45: } + 000032 5B 04 [ 2] 96 addw sp, #4 + 000034 87 [ 5] 97 retf + 98 .area CODE + 99 .area CONST + 100 .area INITIALIZER + 101 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strpbrk.rel b/device/lib/stm8-large/_strpbrk.rel new file mode 100644 index 0000000..93d2226 --- /dev/null +++ b/device/lib/stm8-large/_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 35 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 0A 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 20 4F 95 89 1E 0A 89 +R 00 00 00 09 +T 00 00 16 8D 00 00 00 5B 04 5D 27 0A 16 01 27 04 +R 00 00 00 09 82 04 00 01 +T 00 00 23 13 01 24 02 +R 00 00 00 09 +T 00 00 27 +R 00 00 00 09 +T 00 00 27 1F 01 +R 00 00 00 09 +T 00 00 29 +R 00 00 00 09 +T 00 00 29 1E 03 5C 1F 03 20 D9 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 1E 01 5B 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strpbrk.sym b/device/lib/stm8-large/_strpbrk.sym new file mode 100644 index 0000000..5ebae9b --- /dev/null +++ b/device/lib/stm8-large/_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 35 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_strrchr.asm b/device/lib/stm8-large/_strrchr.asm new file mode 100644 index 0000000..5317803 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x06, 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, (0x08, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strrchr.lst b/device/lib/stm8-large/_strrchr.lst new file mode 100644 index 0000000..6da6fda --- /dev/null +++ b/device/lib/stm8-large/_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 06 [ 2] 56 ldw y, (0x06, 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 08 [ 2] 73 cpw x, (0x08, 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 87 [ 5] 98 retf + 99 .area CODE + 100 .area CONST + 101 .area INITIALIZER + 102 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strrchr.rel b/device/lib/stm8-large/_strrchr.rel new file mode 100644 index 0000000..bda1d41 --- /dev/null +++ b/device/lib/stm8-large/_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 06 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 08 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strrchr.sym b/device/lib/stm8-large/_strrchr.sym new file mode 100644 index 0000000..051cded --- /dev/null +++ b/device/lib/stm8-large/_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-large/_strspn.asm b/device/lib/stm8-large/_strspn.asm new file mode 100644 index 0000000..92a22de --- /dev/null +++ b/device/lib/stm8-large/_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, (0x06, 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, (0x0c, sp) + pushw x + callf _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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strspn.lst b/device/lib/stm8-large/_strspn.lst new file mode 100644 index 0000000..d936f21 --- /dev/null +++ b/device/lib/stm8-large/_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 06 [ 2] 59 ldw y, (0x06, 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 1C [ 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 0C [ 2] 70 ldw x, (0x0c, sp) + 000014 89 [ 2] 71 pushw x + 000015 8Ds00r00r00 [ 5] 72 callf _strchr + 000019 5B 04 [ 2] 73 addw sp, #4 + 00001B 90 85 [ 2] 74 popw y + 00001D 5D [ 2] 75 tnzw x + 00001E 27 09 [ 1] 76 jreq 00106$ + 77 ; ../_strspn.c: 38: count++ ; + 000020 1E 01 [ 2] 78 ldw x, (0x01, sp) + 000022 5C [ 1] 79 incw x + 000023 1F 01 [ 2] 80 ldw (0x01, sp), x + 81 ; ../_strspn.c: 41: string++ ; + 000025 90 5C [ 1] 82 incw y + 000027 20 DE [ 2] 83 jra 00104$ + 000029 84 00106$: + 85 ; ../_strspn.c: 44: return count ; + 000029 1E 01 [ 2] 86 ldw x, (0x01, sp) + 87 ; ../_strspn.c: 45: } + 00002B 5B 02 [ 2] 88 addw sp, #2 + 00002D 87 [ 5] 89 retf + 90 .area CODE + 91 .area CONST + 92 .area INITIALIZER + 93 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strspn.rel b/device/lib/stm8-large/_strspn.rel new file mode 100644 index 0000000..3a8a8e7 --- /dev/null +++ b/device/lib/stm8-large/_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 2E 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 06 +R 00 00 00 09 +T 00 00 07 +R 00 00 00 09 +T 00 00 07 90 F6 97 4D 27 1C 4F 95 90 89 89 1E 0C +R 00 00 00 09 +T 00 00 14 89 8D 00 00 00 5B 04 90 85 5D 27 09 1E +R 00 00 00 09 82 05 00 01 +T 00 00 21 01 5C 1F 01 90 5C 20 DE +R 00 00 00 09 +T 00 00 29 +R 00 00 00 09 +T 00 00 29 1E 01 5B 02 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strspn.sym b/device/lib/stm8-large/_strspn.sym new file mode 100644 index 0000000..f1c3e87 --- /dev/null +++ b/device/lib/stm8-large/_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 2E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_strstr.asm b/device/lib/stm8-large/_strstr.asm new file mode 100644 index 0000000..5b7ac3f --- /dev/null +++ b/device/lib/stm8-large/_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, (0x11, sp) + ldw (0x01, sp), y +; ../_strstr.c: 37: if (!*str2) + ldw y, (0x13, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strstr.lst b/device/lib/stm8-large/_strstr.lst new file mode 100644 index 0000000..439da6f --- /dev/null +++ b/device/lib/stm8-large/_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 11 [ 2] 56 ldw y, (0x11, sp) + 000004 17 01 [ 2] 57 ldw (0x01, sp), y + 58 ; ../_strstr.c: 37: if (!*str2) + 000006 16 13 [ 2] 59 ldw y, (0x13, 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 87 [ 5] 130 retf + 131 .area CODE + 132 .area CONST + 133 .area INITIALIZER + 134 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strstr.rel b/device/lib/stm8-large/_strstr.rel new file mode 100644 index 0000000..4b05b31 --- /dev/null +++ b/device/lib/stm8-large/_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 11 17 01 16 13 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strstr.sym b/device/lib/stm8-large/_strstr.sym new file mode 100644 index 0000000..b5464dc --- /dev/null +++ b/device/lib/stm8-large/_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-large/_strtok.asm b/device/lib/stm8-large/_strtok.asm new file mode 100644 index 0000000..65e96fb --- /dev/null +++ b/device/lib/stm8-large/_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, (0x06, 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, (0x0a, sp) + pushw x + callf _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, (0x0a, sp) + pushw x + callf _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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_strtok.lst b/device/lib/stm8-large/_strtok.lst new file mode 100644 index 0000000..bcf90cc --- /dev/null +++ b/device/lib/stm8-large/_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 06 [ 2] 60 ldw x, (0x06, 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 5D [ 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 18 [ 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 0A [ 2] 79 ldw x, (0x0a, sp) + 00001C 89 [ 2] 80 pushw x + 00001D 8Ds00r00r00 [ 5] 81 callf _strchr + 000021 5B 04 [ 2] 82 addw sp, #4 + 000023 5D [ 2] 83 tnzw x + 000024 27 09 [ 1] 84 jreq 00110$ + 85 ; ../_strtok.c: 48: s++; + 000026 CEu00u00 [ 2] 86 ldw x, _strtok_s_65536_26+0 + 000029 5C [ 1] 87 incw x + 00002A CFu00u00 [ 2] 88 ldw _strtok_s_65536_26+0, x + 00002D 20 E2 [ 2] 89 jra 00108$ + 90 ; ../_strtok.c: 50: break; + 00002F 91 00110$: + 92 ; ../_strtok.c: 53: s1 = s; + 00002F CEu00u00 [ 2] 93 ldw x, _strtok_s_65536_26+0 + 000032 1F 01 [ 2] 94 ldw (0x01, sp), x + 95 ; ../_strtok.c: 55: while (*s) { + 000034 96 00113$: + 97 ; ../_strtok.c: 46: while (*s) { + 000034 CEu00u00 [ 2] 98 ldw x, _strtok_s_65536_26+0 + 99 ; ../_strtok.c: 55: while (*s) { + 000037 F6 [ 1] 100 ld a, (x) + 000038 27 27 [ 1] 101 jreq 00115$ + 102 ; ../_strtok.c: 56: if (strchr(control,*s)) { + 00003A 5F [ 1] 103 clrw x + 00003B 97 [ 1] 104 ld xl, a + 00003C 89 [ 2] 105 pushw x + 00003D 1E 0A [ 2] 106 ldw x, (0x0a, sp) + 00003F 89 [ 2] 107 pushw x + 000040 8Ds00r00r00 [ 5] 108 callf _strchr + 000044 5B 04 [ 2] 109 addw sp, #4 + 000046 5D [ 2] 110 tnzw x + 000047 27 0F [ 1] 111 jreq 00112$ + 112 ; ../_strtok.c: 57: *s++ = '\0'; + 000049 CEu00u00 [ 2] 113 ldw x, _strtok_s_65536_26+0 + 00004C 7F [ 1] 114 clr (x) + 00004D CEu00u00 [ 2] 115 ldw x, _strtok_s_65536_26+0 + 000050 5C [ 1] 116 incw x + 000051 CFu00u00 [ 2] 117 ldw _strtok_s_65536_26+0, x + 118 ; ../_strtok.c: 58: return s1; + 000054 1E 01 [ 2] 119 ldw x, (0x01, sp) + 000056 20 16 [ 2] 120 jra 00119$ + 000058 121 00112$: + 122 ; ../_strtok.c: 60: s++ ; + 000058 CEu00u00 [ 2] 123 ldw x, _strtok_s_65536_26+0 + 00005B 5C [ 1] 124 incw x + 00005C CFu00u00 [ 2] 125 ldw _strtok_s_65536_26+0, x + 00005F 20 D3 [ 2] 126 jra 00113$ + 000061 127 00115$: + 128 ; ../_strtok.c: 63: s = NULL; + 000061 5F [ 1] 129 clrw x + 000062 CFu00u00 [ 2] 130 ldw _strtok_s_65536_26+0, x + 131 ; ../_strtok.c: 65: if (*s1) + 000065 1E 01 [ 2] 132 ldw x, (0x01, sp) + 000067 F6 [ 1] 133 ld a, (x) + 000068 27 03 [ 1] 134 jreq 00117$ + 135 ; ../_strtok.c: 66: return s1; + 00006A 1E 01 [ 2] 136 ldw x, (0x01, sp) + 137 ; ../_strtok.c: 68: return NULL; + 00006C 21 138 .byte 0x21 + 00006D 139 00117$: + 00006D 5F [ 1] 140 clrw x + 00006E 141 00119$: + 142 ; ../_strtok.c: 69: } + 00006E 5B 02 [ 2] 143 addw sp, #2 + 000070 87 [ 5] 144 retf + 145 .area CODE + 146 .area CONST + 147 .area INITIALIZER + 148 .area CABS (ABS) diff --git a/device/lib/stm8-large/_strtok.rel b/device/lib/stm8-large/_strtok.rel new file mode 100644 index 0000000..ac50616 --- /dev/null +++ b/device/lib/stm8-large/_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 71 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 06 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 5D +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 18 5F 97 89 1E 0A 89 8D +R 00 00 00 09 10 04 00 01 +T 00 00 1E 00 00 00 5B 04 5D 27 09 CE 00 00 5C CF +R 00 00 00 09 82 03 00 01 10 0C 00 01 +T 00 00 2B 00 00 20 E2 +R 00 00 00 09 10 03 00 01 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F CE 00 00 1F 01 +R 00 00 00 09 10 04 00 01 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 CE 00 00 F6 27 27 5F 97 89 1E 0A 89 8D +R 00 00 00 09 10 04 00 01 +T 00 00 41 00 00 00 5B 04 5D 27 0F CE 00 00 7F CE +R 00 00 00 09 82 03 00 01 10 0C 00 01 +T 00 00 4E 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 58 +R 00 00 00 09 +T 00 00 58 CE 00 00 5C CF 00 00 20 D3 +R 00 00 00 09 10 04 00 01 10 08 00 01 +T 00 00 61 +R 00 00 00 09 +T 00 00 61 5F CF 00 00 1E 01 F6 27 03 1E 01 21 +R 00 00 00 09 10 05 00 01 +T 00 00 6D +R 00 00 00 09 +T 00 00 6D 5F +R 00 00 00 09 +T 00 00 6E +R 00 00 00 09 +T 00 00 6E 5B 02 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_strtok.sym b/device/lib/stm8-large/_strtok.sym new file mode 100644 index 0000000..57c140c --- /dev/null +++ b/device/lib/stm8-large/_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 71 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_uchar2fs.asm b/device/lib/stm8-large/_uchar2fs.asm new file mode 100644 index 0000000..35c93a7 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x04, sp) + ld xl, a + clrw y + pushw x + pushw y + callf ___ulong2fs + addw sp, #4 +; ../_uchar2fs.c: 57: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_uchar2fs.lst b/device/lib/stm8-large/_uchar2fs.lst new file mode 100644 index 0000000..39f565c --- /dev/null +++ b/device/lib/stm8-large/_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 04 [ 1] 57 ld a, (0x04, 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 8Ds00r00r00 [ 5] 62 callf ___ulong2fs + 00000D 5B 04 [ 2] 63 addw sp, #4 + 64 ; ../_uchar2fs.c: 57: } + 00000F 87 [ 5] 65 retf + 66 .area CODE + 67 .area CONST + 68 .area INITIALIZER + 69 .area CABS (ABS) diff --git a/device/lib/stm8-large/_uchar2fs.rel b/device/lib/stm8-large/_uchar2fs.rel new file mode 100644 index 0000000..a027f89 --- /dev/null +++ b/device/lib/stm8-large/_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 10 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 04 97 90 5F 89 90 89 8D +R 00 00 00 09 +T 00 00 0A 00 00 00 5B 04 87 +R 00 00 00 09 82 03 00 00 diff --git a/device/lib/stm8-large/_uchar2fs.sym b/device/lib/stm8-large/_uchar2fs.sym new file mode 100644 index 0000000..2d11738 --- /dev/null +++ b/device/lib/stm8-large/_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 10 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_uint2fs.asm b/device/lib/stm8-large/_uint2fs.asm new file mode 100644 index 0000000..2401675 --- /dev/null +++ b/device/lib/stm8-large/_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, (0x04, sp) + clrw x + pushw y + pushw x + callf ___ulong2fs + addw sp, #4 +; ../_uint2fs.c: 56: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_uint2fs.lst b/device/lib/stm8-large/_uint2fs.lst new file mode 100644 index 0000000..b4fe573 --- /dev/null +++ b/device/lib/stm8-large/_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 04 [ 2] 56 ldw y, (0x04, sp) + 000002 5F [ 1] 57 clrw x + 000003 90 89 [ 2] 58 pushw y + 000005 89 [ 2] 59 pushw x + 000006 8Ds00r00r00 [ 5] 60 callf ___ulong2fs + 00000A 5B 04 [ 2] 61 addw sp, #4 + 62 ; ../_uint2fs.c: 56: } + 00000C 87 [ 5] 63 retf + 64 .area CODE + 65 .area CONST + 66 .area INITIALIZER + 67 .area CABS (ABS) diff --git a/device/lib/stm8-large/_uint2fs.rel b/device/lib/stm8-large/_uint2fs.rel new file mode 100644 index 0000000..0f23197 --- /dev/null +++ b/device/lib/stm8-large/_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 D 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 04 5F 90 89 89 8D 00 00 00 5B 04 87 +R 00 00 00 09 82 0A 00 00 diff --git a/device/lib/stm8-large/_uint2fs.sym b/device/lib/stm8-large/_uint2fs.sym new file mode 100644 index 0000000..20ee599 --- /dev/null +++ b/device/lib/stm8-large/_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 D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/_ulong2fs.asm b/device/lib/stm8-large/_ulong2fs.asm new file mode 100644 index 0000000..c3ed4aa --- /dev/null +++ b/device/lib/stm8-large/_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, (0x0e, sp) + jrne 00115$ +; ../_ulong2fs.c: 90: return 0.0; + ldw x, (0x0c, sp) + jrne 00115$ + clrw y + jra 00111$ +; ../_ulong2fs.c: 93: while (a < HIDDEN) +00115$: + ld a, #0x96 +00103$: + ldw x, (0x0c, sp) + cpw x, #0x0080 + jrnc 00118$ +; ../_ulong2fs.c: 95: a <<= 1; + sll (0x0f, sp) + rlc (0x0e, sp) + rlc (0x0d, sp) + rlc (0x0c, sp) +; ../_ulong2fs.c: 96: exp--; + dec a + jra 00103$ +; ../_ulong2fs.c: 99: while (a & NORM) +00118$: +00108$: + tnz (0x0c, sp) + jreq 00110$ +; ../_ulong2fs.c: 102: if (a & 1) + push a + ld a, (0x10, sp) + srl a + pop a + jrnc 00107$ +; ../_ulong2fs.c: 103: a += 2; + ldw x, (0x0e, sp) + addw x, #0x0002 + ldw y, (0x0c, sp) + jrnc 00150$ + incw y +00150$: + ldw (0x0e, sp), x + ldw (0x0c, sp), y +00107$: +; ../_ulong2fs.c: 104: a >>= 1; + srl (0x0c, sp) + rrc (0x0d, sp) + rrc (0x0e, sp) + rrc (0x0f, sp) +; ../_ulong2fs.c: 105: exp++; + inc a + jra 00108$ +00110$: +; ../_ulong2fs.c: 108: a &= ~HIDDEN ; + push a + ldw y, (0x0f, sp) + ld a, (0x0e, sp) + and a, #0x7f + ld xl, a + ld a, (0x0d, sp) + ld xh, a + pop a + ldw (0x0e, sp), y + ldw (0x0c, 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, (0x0f, sp) + ld yl, a + ld a, (0x07, sp) + or a, (0x0e, sp) + ld yh, a + ld a, xl + or a, (0x0d, sp) + rlwa x + or a, (0x0c, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/_ulong2fs.lst b/device/lib/stm8-large/_ulong2fs.lst new file mode 100644 index 0000000..9c272a6 --- /dev/null +++ b/device/lib/stm8-large/_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 0E [ 2] 56 ldw x, (0x0e, sp) + 000004 26 08 [ 1] 57 jrne 00115$ + 58 ; ../_ulong2fs.c: 90: return 0.0; + 000006 1E 0C [ 2] 59 ldw x, (0x0c, 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 0C [ 2] 67 ldw x, (0x0c, 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 0F [ 1] 71 sll (0x0f, sp) + 000019 09 0E [ 1] 72 rlc (0x0e, sp) + 00001B 09 0D [ 1] 73 rlc (0x0d, sp) + 00001D 09 0C [ 1] 74 rlc (0x0c, 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 0C [ 1] 81 tnz (0x0c, sp) + 000024 27 21 [ 1] 82 jreq 00110$ + 83 ; ../_ulong2fs.c: 102: if (a & 1) + 000026 88 [ 1] 84 push a + 000027 7B 10 [ 1] 85 ld a, (0x10, 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 0E [ 2] 90 ldw x, (0x0e, sp) + 00002F 1C 00 02 [ 2] 91 addw x, #0x0002 + 000032 16 0C [ 2] 92 ldw y, (0x0c, sp) + 000034 24 02 [ 1] 93 jrnc 00150$ + 000036 90 5C [ 1] 94 incw y + 000038 95 00150$: + 000038 1F 0E [ 2] 96 ldw (0x0e, sp), x + 00003A 17 0C [ 2] 97 ldw (0x0c, sp), y + 00003C 98 00107$: + 99 ; ../_ulong2fs.c: 104: a >>= 1; + 00003C 04 0C [ 1] 100 srl (0x0c, sp) + 00003E 06 0D [ 1] 101 rrc (0x0d, sp) + 000040 06 0E [ 1] 102 rrc (0x0e, sp) + 000042 06 0F [ 1] 103 rrc (0x0f, 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 0F [ 2] 110 ldw y, (0x0f, sp) + 00004A 7B 0E [ 1] 111 ld a, (0x0e, sp) + 00004C A4 7F [ 1] 112 and a, #0x7f + 00004E 97 [ 1] 113 ld xl, a + 00004F 7B 0D [ 1] 114 ld a, (0x0d, sp) + 000051 95 [ 1] 115 ld xh, a + 000052 84 [ 1] 116 pop a + 000053 17 0E [ 2] 117 ldw (0x0e, sp), y + 000055 1F 0C [ 2] 118 ldw (0x0c, 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 0F [ 1] 130 or a, (0x0f, sp) + 000067 90 97 [ 1] 131 ld yl, a + 000069 7B 07 [ 1] 132 ld a, (0x07, sp) + 00006B 1A 0E [ 1] 133 or a, (0x0e, sp) + 00006D 90 95 [ 1] 134 ld yh, a + 00006F 9F [ 1] 135 ld a, xl + 000070 1A 0D [ 1] 136 or a, (0x0d, sp) + 000072 02 [ 1] 137 rlwa x + 000073 1A 0C [ 1] 138 or a, (0x0c, 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 87 [ 5] 148 retf + 149 .area CODE + 150 .area CONST + 151 .area INITIALIZER + 152 .area CABS (ABS) diff --git a/device/lib/stm8-large/_ulong2fs.rel b/device/lib/stm8-large/_ulong2fs.rel new file mode 100644 index 0000000..bc922c3 --- /dev/null +++ b/device/lib/stm8-large/_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 0E 26 08 1E 0C 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 0C A3 00 80 24 0B 08 0F 09 0E 09 0D +R 00 00 00 09 +T 00 00 1D 09 0C 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 0C 27 21 88 7B 10 44 84 24 0F 1E 0E +R 00 00 00 09 +T 00 00 2F 1C 00 02 16 0C 24 02 90 5C +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1F 0E 17 0C +R 00 00 00 09 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 04 0C 06 0D 06 0E 06 0F 4C 20 DB +R 00 00 00 09 +T 00 00 47 +R 00 00 00 09 +T 00 00 47 88 16 0F 7B 0E A4 7F 97 7B 0D 95 84 17 +R 00 00 00 09 +T 00 00 54 0E 1F 0C 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 0F 90 97 7B 07 1A +R 00 00 00 09 +T 00 00 6C 0E 90 95 9F 1A 0D 02 1A 0C 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/_ulong2fs.sym b/device/lib/stm8-large/_ulong2fs.sym new file mode 100644 index 0000000..2072ea2 --- /dev/null +++ b/device/lib/stm8-large/_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-large/abs.asm b/device/lib/stm8-large/abs.asm new file mode 100644 index 0000000..cb00499 --- /dev/null +++ b/device/lib/stm8-large/abs.asm @@ -0,0 +1,68 @@ +;-------------------------------------------------------- +; 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 (0x04, sp) + jrpl 00103$ + ldw x, (0x04, sp) + negw x + .byte 0xc5 +00103$: + ldw x, (0x04, sp) +00104$: +; ../abs.c: 57: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/abs.lst b/device/lib/stm8-large/abs.lst new file mode 100644 index 0000000..54346a8 --- /dev/null +++ b/device/lib/stm8-large/abs.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 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 04 [ 1] 55 tnz (0x04, sp) + 000002 2A 04 [ 1] 56 jrpl 00103$ + 000004 1E 04 [ 2] 57 ldw x, (0x04, sp) + 000006 50 [ 2] 58 negw x + 000007 C5 59 .byte 0xc5 + 000008 60 00103$: + 000008 1E 04 [ 2] 61 ldw x, (0x04, sp) + 00000A 62 00104$: + 63 ; ../abs.c: 57: } + 00000A 87 [ 5] 64 retf + 65 .area CODE + 66 .area CONST + 67 .area INITIALIZER + 68 .area CABS (ABS) diff --git a/device/lib/stm8-large/abs.rel b/device/lib/stm8-large/abs.rel new file mode 100644 index 0000000..975f702 --- /dev/null +++ b/device/lib/stm8-large/abs.rel @@ -0,0 +1,29 @@ +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 04 2A 04 1E 04 50 C5 +R 00 00 00 09 +T 00 00 08 +R 00 00 00 09 +T 00 00 08 1E 04 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/abs.sym b/device/lib/stm8-large/abs.sym new file mode 100644 index 0000000..bd3f17a --- /dev/null +++ b/device/lib/stm8-large/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-large/acosf.asm b/device/lib/stm8-large/acosf.asm new file mode 100644 index 0000000..9c9c273 --- /dev/null +++ b/device/lib/stm8-large/acosf.asm @@ -0,0 +1,113 @@ +;-------------------------------------------------------- +; 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, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___fseq + addw sp, #8 + tnz a + jreq 00108$ + clrw x + clrw y + jra 00110$ +00108$: +; ../acosf.c: 39: else if (x ==-1.0) return PI; + clrw x + pushw x + push #0x80 + push #0xbf + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___fseq + addw sp, #8 + tnz a + jreq 00105$ + ldw x, #0x0fdb + ldw y, #0x4049 + jra 00110$ +00105$: +; ../acosf.c: 40: else if (x == 0.0) return HALF_PI; + ldw x, (0x06, sp) + jrne 00102$ + ldw x, (0x04, sp) + sllw x + jrne 00102$ + ldw x, #0x0fdb + ldw y, #0x3fc9 + jra 00110$ +00102$: +; ../acosf.c: 41: else return asincosf(x, true); + push #0x01 + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf _asincosf + addw sp, #5 +00110$: +; ../acosf.c: 42: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/acosf.lst b/device/lib/stm8-large/acosf.lst new file mode 100644 index 0000000..1556282 --- /dev/null +++ b/device/lib/stm8-large/acosf.lst @@ -0,0 +1,113 @@ + 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 0A [ 2] 60 ldw x, (0x0a, sp) + 000008 89 [ 2] 61 pushw x + 000009 1E 0A [ 2] 62 ldw x, (0x0a, sp) + 00000B 89 [ 2] 63 pushw x + 00000C 8Ds00r00r00 [ 5] 64 callf ___fseq + 000010 5B 08 [ 2] 65 addw sp, #8 + 000012 4D [ 1] 66 tnz a + 000013 27 05 [ 1] 67 jreq 00108$ + 000015 5F [ 1] 68 clrw x + 000016 90 5F [ 1] 69 clrw y + 000018 20 3E [ 2] 70 jra 00110$ + 00001A 71 00108$: + 72 ; ../acosf.c: 39: else if (x ==-1.0) return PI; + 00001A 5F [ 1] 73 clrw x + 00001B 89 [ 2] 74 pushw x + 00001C 4B 80 [ 1] 75 push #0x80 + 00001E 4B BF [ 1] 76 push #0xbf + 000020 1E 0A [ 2] 77 ldw x, (0x0a, sp) + 000022 89 [ 2] 78 pushw x + 000023 1E 0A [ 2] 79 ldw x, (0x0a, sp) + 000025 89 [ 2] 80 pushw x + 000026 8Ds00r00r00 [ 5] 81 callf ___fseq + 00002A 5B 08 [ 2] 82 addw sp, #8 + 00002C 4D [ 1] 83 tnz a + 00002D 27 09 [ 1] 84 jreq 00105$ + 00002F AE 0F DB [ 2] 85 ldw x, #0x0fdb + 000032 90 AE 40 49 [ 2] 86 ldw y, #0x4049 + 000036 20 20 [ 2] 87 jra 00110$ + 000038 88 00105$: + 89 ; ../acosf.c: 40: else if (x == 0.0) return HALF_PI; + 000038 1E 06 [ 2] 90 ldw x, (0x06, sp) + 00003A 26 0E [ 1] 91 jrne 00102$ + 00003C 1E 04 [ 2] 92 ldw x, (0x04, sp) + 00003E 58 [ 2] 93 sllw x + 00003F 26 09 [ 1] 94 jrne 00102$ + 000041 AE 0F DB [ 2] 95 ldw x, #0x0fdb + 000044 90 AE 3F C9 [ 2] 96 ldw y, #0x3fc9 + 000048 20 0E [ 2] 97 jra 00110$ + 00004A 98 00102$: + 99 ; ../acosf.c: 41: else return asincosf(x, true); + 00004A 4B 01 [ 1] 100 push #0x01 + 00004C 1E 07 [ 2] 101 ldw x, (0x07, sp) + 00004E 89 [ 2] 102 pushw x + 00004F 1E 07 [ 2] 103 ldw x, (0x07, sp) + 000051 89 [ 2] 104 pushw x + 000052 8Ds00r00r00 [ 5] 105 callf _asincosf + 000056 5B 05 [ 2] 106 addw sp, #5 + 000058 107 00110$: + 108 ; ../acosf.c: 42: } + 000058 87 [ 5] 109 retf + 110 .area CODE + 111 .area CONST + 112 .area INITIALIZER + 113 .area CABS (ABS) diff --git a/device/lib/stm8-large/acosf.rel b/device/lib/stm8-large/acosf.rel new file mode 100644 index 0000000..f2b1689 --- /dev/null +++ b/device/lib/stm8-large/acosf.rel @@ -0,0 +1,49 @@ +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 59 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 0A 89 1E 0A 89 8D +R 00 00 00 09 +T 00 00 0D 00 00 00 5B 08 4D 27 05 5F 90 5F 20 3E +R 00 00 00 09 82 03 00 00 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 5F 89 4B 80 4B BF 1E 0A 89 1E 0A 89 8D +R 00 00 00 09 +T 00 00 27 00 00 00 5B 08 4D 27 09 AE 0F DB 90 AE +R 00 00 00 09 82 03 00 00 +T 00 00 34 40 49 20 20 +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1E 06 26 0E 1E 04 58 26 09 AE 0F DB 90 +R 00 00 00 09 +T 00 00 45 AE 3F C9 20 0E +R 00 00 00 09 +T 00 00 4A +R 00 00 00 09 +T 00 00 4A 4B 01 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 53 00 00 00 5B 05 +R 00 00 00 09 82 03 00 02 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/acosf.sym b/device/lib/stm8-large/acosf.sym new file mode 100644 index 0000000..32ba183 --- /dev/null +++ b/device/lib/stm8-large/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 59 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/aligned_alloc.asm b/device/lib/stm8-large/aligned_alloc.asm new file mode 100644 index 0000000..5a0f00d --- /dev/null +++ b/device/lib/stm8-large/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, (0x06, sp) + pushw x + callf _malloc + addw sp, #2 +; ./../../include/stdlib.h: 90: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/aligned_alloc.lst b/device/lib/stm8-large/aligned_alloc.lst new file mode 100644 index 0000000..f57dd9e --- /dev/null +++ b/device/lib/stm8-large/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 06 [ 2] 56 ldw x, (0x06, sp) + 000002 89 [ 2] 57 pushw x + 000003 8Ds00r00r00 [ 5] 58 callf _malloc + 000007 5B 02 [ 2] 59 addw sp, #2 + 60 ; ./../../include/stdlib.h: 90: } + 000009 87 [ 5] 61 retf + 62 .area CODE + 63 .area CONST + 64 .area INITIALIZER + 65 .area CABS (ABS) diff --git a/device/lib/stm8-large/aligned_alloc.rel b/device/lib/stm8-large/aligned_alloc.rel new file mode 100644 index 0000000..8176835 --- /dev/null +++ b/device/lib/stm8-large/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 A 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 06 89 8D 00 00 00 5B 02 87 +R 00 00 00 09 82 07 00 00 diff --git a/device/lib/stm8-large/aligned_alloc.sym b/device/lib/stm8-large/aligned_alloc.sym new file mode 100644 index 0000000..ca773d9 --- /dev/null +++ b/device/lib/stm8-large/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 A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/asincosf.asm b/device/lib/stm8-large/asincosf.asm new file mode 100644 index 0000000..3902bdd --- /dev/null +++ b/device/lib/stm8-large/asincosf.asm @@ -0,0 +1,445 @@ +;-------------------------------------------------------- +; 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, (0x19, sp) + ld (0x11, sp), a +; ../asincosf.c: 56: y = fabsf(x); + ldw x, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + callf _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 + callf ___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 + jpf 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 + callf ___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 + callf ___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 + jpf 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 + callf ___fssub + addw sp, #8 +; ../asincosf.c: 72: g = ldexpf(g, -1); + push #0xff + push #0xff + pushw x + pushw y + callf _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 + callf _sqrtf + addw sp, #4 +; ../asincosf.c: 74: y = -(y + y); + pushw x + pushw y + pushw x + pushw y + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0x6b + push #0x16 + push #0x6f + push #0x3f + pushw x + pushw y + callf ___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 + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0xf0 + push #0x50 + push #0xb3 + push #0x40 + pushw x + pushw y + callf ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf ___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, (0x1c, sp) + pushw x + ldw x, (0x1c, sp) + pushw x +; ../asincosf.c: 86: r = (b[i] + r) + b[i]; + callf ___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 (0x19, sp) + jrne 00152$ + jpf 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) + clr a + adc a, #((_asincosf_b_65536_26 + 0) >> 16) + 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 + callf ___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 + callf ___fsadd + addw sp, #8 + ldw (0x0f, sp), x + ldw (0x0d, sp), y + jpf 00116$ +00110$: +; ../asincosf.c: 88: r = (a[i] - r) + a[i]; + ldw x, (0x0b, sp) + addw x, #(_asincosf_a_65536_26 + 0) + clr a + adc a, #((_asincosf_a_65536_26 + 0) >> 16) + 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 + callf ___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 + callf ___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) + clr a + adc a, #((_asincosf_a_65536_26 + 0) >> 16) + 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 + callf ___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 + callf ___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 + retf + .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-large/asincosf.lst b/device/lib/stm8-large/asincosf.lst new file mode 100644 index 0000000..90b7da4 --- /dev/null +++ b/device/lib/stm8-large/asincosf.lst @@ -0,0 +1,445 @@ + 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 19 [ 1] 59 ld a, (0x19, sp) + 000004 6B 11 [ 1] 60 ld (0x11, sp), a + 61 ; ../asincosf.c: 56: y = fabsf(x); + 000006 1E 17 [ 2] 62 ldw x, (0x17, sp) + 000008 89 [ 2] 63 pushw x + 000009 1E 17 [ 2] 64 ldw x, (0x17, sp) + 00000B 89 [ 2] 65 pushw x + 00000C 8Ds00r00r00 [ 5] 66 callf _fabsf + 000010 5B 04 [ 2] 67 addw sp, #4 + 000012 1F 03 [ 2] 68 ldw (0x03, sp), x + 000014 17 01 [ 2] 69 ldw (0x01, sp), y + 70 ; ../asincosf.c: 57: if (y < EPS) + 000016 5F [ 1] 71 clrw x + 000017 89 [ 2] 72 pushw x + 000018 4B 80 [ 1] 73 push #0x80 + 00001A 4B 39 [ 1] 74 push #0x39 + 00001C 1E 07 [ 2] 75 ldw x, (0x07, sp) + 00001E 89 [ 2] 76 pushw x + 00001F 1E 07 [ 2] 77 ldw x, (0x07, sp) + 000021 89 [ 2] 78 pushw x + 000022 8Ds00r00r00 [ 5] 79 callf ___fslt + 000026 5B 08 [ 2] 80 addw sp, #8 + 000028 6B 10 [ 1] 81 ld (0x10, sp), a + 00002A 27 0C [ 1] 82 jreq 00107$ + 83 ; ../asincosf.c: 59: r = y; + 00002C 16 03 [ 2] 84 ldw y, (0x03, sp) + 00002E 17 0F [ 2] 85 ldw (0x0f, sp), y + 000030 16 01 [ 2] 86 ldw y, (0x01, sp) + 000032 17 0D [ 2] 87 ldw (0x0d, sp), y + 000034 ACs00r01r78 [ 2] 88 jpf 00108$ + 000038 89 00107$: + 90 ; ../asincosf.c: 63: if (y > 0.5) + 000038 1E 03 [ 2] 91 ldw x, (0x03, sp) + 00003A 89 [ 2] 92 pushw x + 00003B 1E 03 [ 2] 93 ldw x, (0x03, sp) + 00003D 89 [ 2] 94 pushw x + 00003E 5F [ 1] 95 clrw x + 00003F 89 [ 2] 96 pushw x + 000040 4B 00 [ 1] 97 push #0x00 + 000042 4B 3F [ 1] 98 push #0x3f + 000044 8Ds00r00r00 [ 5] 99 callf ___fslt + 000048 5B 08 [ 2] 100 addw sp, #8 + 00004A 4D [ 1] 101 tnz a + 00004B 27 70 [ 1] 102 jreq 00104$ + 103 ; ../asincosf.c: 65: quartPI = !isacos; + 00004D 7B 11 [ 1] 104 ld a, (0x11, sp) + 00004F A0 01 [ 1] 105 sub a, #0x01 + 000051 4F [ 1] 106 clr a + 000052 49 [ 1] 107 rlc a + 000053 6B 11 [ 1] 108 ld (0x11, sp), a + 109 ; ../asincosf.c: 66: if (y > 1.0) + 000055 1E 03 [ 2] 110 ldw x, (0x03, sp) + 000057 89 [ 2] 111 pushw x + 000058 1E 03 [ 2] 112 ldw x, (0x03, sp) + 00005A 89 [ 2] 113 pushw x + 00005B 5F [ 1] 114 clrw x + 00005C 89 [ 2] 115 pushw x + 00005D 4B 80 [ 1] 116 push #0x80 + 00005F 4B 3F [ 1] 117 push #0x3f + 000061 8Ds00r00r00 [ 5] 118 callf ___fslt + 000065 5B 08 [ 2] 119 addw sp, #8 + 000067 4D [ 1] 120 tnz a + 000068 27 0D [ 1] 121 jreq 00102$ + 122 ; ../asincosf.c: 68: errno = EDOM; + 00006A AE 00 21 [ 2] 123 ldw x, #0x0021 + 00006D CFu00u00 [ 2] 124 ldw _errno+0, x + 125 ; ../asincosf.c: 69: return 0.0; + 000070 5F [ 1] 126 clrw x + 000071 90 5F [ 1] 127 clrw y + 000073 ACs00r02r91 [ 2] 128 jpf 00117$ + 000077 129 00102$: + 130 ; ../asincosf.c: 71: g = (0.5 - y) + 0.5; + 000077 1E 03 [ 2] 131 ldw x, (0x03, sp) + 000079 89 [ 2] 132 pushw x + 00007A 1E 03 [ 2] 133 ldw x, (0x03, sp) + 00007C 89 [ 2] 134 pushw x + 00007D 5F [ 1] 135 clrw x + 00007E 89 [ 2] 136 pushw x + 00007F 4B 80 [ 1] 137 push #0x80 + 000081 4B 3F [ 1] 138 push #0x3f + 000083 8Ds00r00r00 [ 5] 139 callf ___fssub + 000087 5B 08 [ 2] 140 addw sp, #8 + 141 ; ../asincosf.c: 72: g = ldexpf(g, -1); + 000089 4B FF [ 1] 142 push #0xff + 00008B 4B FF [ 1] 143 push #0xff + 00008D 89 [ 2] 144 pushw x + 00008E 90 89 [ 2] 145 pushw y + 000090 8Ds00r00r00 [ 5] 146 callf _ldexpf + 000094 5B 06 [ 2] 147 addw sp, #6 + 000096 1F 07 [ 2] 148 ldw (0x07, sp), x + 000098 17 05 [ 2] 149 ldw (0x05, sp), y + 150 ; ../asincosf.c: 73: y = sqrtf(g); + 00009A 1E 07 [ 2] 151 ldw x, (0x07, sp) + 00009C 89 [ 2] 152 pushw x + 00009D 1E 07 [ 2] 153 ldw x, (0x07, sp) + 00009F 89 [ 2] 154 pushw x + 0000A0 8Ds00r00r00 [ 5] 155 callf _sqrtf + 0000A4 5B 04 [ 2] 156 addw sp, #4 + 157 ; ../asincosf.c: 74: y = -(y + y); + 0000A6 89 [ 2] 158 pushw x + 0000A7 90 89 [ 2] 159 pushw y + 0000A9 89 [ 2] 160 pushw x + 0000AA 90 89 [ 2] 161 pushw y + 0000AC 8Ds00r00r00 [ 5] 162 callf ___fsadd + 0000B0 5B 08 [ 2] 163 addw sp, #8 + 0000B2 90 58 [ 2] 164 sllw y + 0000B4 8C [ 1] 165 ccf + 0000B5 90 56 [ 2] 166 rrcw y + 0000B7 1F 03 [ 2] 167 ldw (0x03, sp), x + 0000B9 17 01 [ 2] 168 ldw (0x01, sp), y + 0000BB 20 16 [ 2] 169 jra 00105$ + 0000BD 170 00104$: + 171 ; ../asincosf.c: 78: g = y * y; + 0000BD 1E 03 [ 2] 172 ldw x, (0x03, sp) + 0000BF 89 [ 2] 173 pushw x + 0000C0 1E 03 [ 2] 174 ldw x, (0x03, sp) + 0000C2 89 [ 2] 175 pushw x + 0000C3 1E 07 [ 2] 176 ldw x, (0x07, sp) + 0000C5 89 [ 2] 177 pushw x + 0000C6 1E 07 [ 2] 178 ldw x, (0x07, sp) + 0000C8 89 [ 2] 179 pushw x + 0000C9 8Ds00r00r00 [ 5] 180 callf ___fsmul + 0000CD 5B 08 [ 2] 181 addw sp, #8 + 0000CF 1F 07 [ 2] 182 ldw (0x07, sp), x + 0000D1 17 05 [ 2] 183 ldw (0x05, sp), y + 0000D3 184 00105$: + 185 ; ../asincosf.c: 80: r = y + y * ((P(g) * g) / Q(g)); + 0000D3 1E 07 [ 2] 186 ldw x, (0x07, sp) + 0000D5 89 [ 2] 187 pushw x + 0000D6 1E 07 [ 2] 188 ldw x, (0x07, sp) + 0000D8 89 [ 2] 189 pushw x + 0000D9 4B 65 [ 1] 190 push #0x65 + 0000DB 4B 20 [ 1] 191 push #0x20 + 0000DD 4B 01 [ 1] 192 push #0x01 + 0000DF 4B BF [ 1] 193 push #0xbf + 0000E1 8Ds00r00r00 [ 5] 194 callf ___fsmul + 0000E5 5B 08 [ 2] 195 addw sp, #8 + 0000E7 4B 6B [ 1] 196 push #0x6b + 0000E9 4B 16 [ 1] 197 push #0x16 + 0000EB 4B 6F [ 1] 198 push #0x6f + 0000ED 4B 3F [ 1] 199 push #0x3f + 0000EF 89 [ 2] 200 pushw x + 0000F0 90 89 [ 2] 201 pushw y + 0000F2 8Ds00r00r00 [ 5] 202 callf ___fsadd + 0000F6 5B 08 [ 2] 203 addw sp, #8 + 0000F8 1F 0F [ 2] 204 ldw (0x0f, sp), x + 0000FA 1E 07 [ 2] 205 ldw x, (0x07, sp) + 0000FC 89 [ 2] 206 pushw x + 0000FD 1E 07 [ 2] 207 ldw x, (0x07, sp) + 0000FF 89 [ 2] 208 pushw x + 000100 1E 13 [ 2] 209 ldw x, (0x13, sp) + 000102 89 [ 2] 210 pushw x + 000103 90 89 [ 2] 211 pushw y + 000105 8Ds00r00r00 [ 5] 212 callf ___fsmul + 000109 5B 08 [ 2] 213 addw sp, #8 + 00010B 1F 0B [ 2] 214 ldw (0x0b, sp), x + 00010D 17 09 [ 2] 215 ldw (0x09, sp), y + 00010F 4B 0B [ 1] 216 push #0x0b + 000111 4B 8D [ 1] 217 push #0x8d + 000113 4B B1 [ 1] 218 push #0xb1 + 000115 4B C0 [ 1] 219 push #0xc0 + 000117 1E 0B [ 2] 220 ldw x, (0x0b, sp) + 000119 89 [ 2] 221 pushw x + 00011A 1E 0B [ 2] 222 ldw x, (0x0b, sp) + 00011C 89 [ 2] 223 pushw x + 00011D 8Ds00r00r00 [ 5] 224 callf ___fsadd + 000121 5B 08 [ 2] 225 addw sp, #8 + 000123 1F 0F [ 2] 226 ldw (0x0f, sp), x + 000125 1E 07 [ 2] 227 ldw x, (0x07, sp) + 000127 89 [ 2] 228 pushw x + 000128 1E 07 [ 2] 229 ldw x, (0x07, sp) + 00012A 89 [ 2] 230 pushw x + 00012B 1E 13 [ 2] 231 ldw x, (0x13, sp) + 00012D 89 [ 2] 232 pushw x + 00012E 90 89 [ 2] 233 pushw y + 000130 8Ds00r00r00 [ 5] 234 callf ___fsmul + 000134 5B 08 [ 2] 235 addw sp, #8 + 000136 4B F0 [ 1] 236 push #0xf0 + 000138 4B 50 [ 1] 237 push #0x50 + 00013A 4B B3 [ 1] 238 push #0xb3 + 00013C 4B 40 [ 1] 239 push #0x40 + 00013E 89 [ 2] 240 pushw x + 00013F 90 89 [ 2] 241 pushw y + 000141 8Ds00r00r00 [ 5] 242 callf ___fsadd + 000145 5B 08 [ 2] 243 addw sp, #8 + 000147 89 [ 2] 244 pushw x + 000148 90 89 [ 2] 245 pushw y + 00014A 1E 0F [ 2] 246 ldw x, (0x0f, sp) + 00014C 89 [ 2] 247 pushw x + 00014D 1E 0F [ 2] 248 ldw x, (0x0f, sp) + 00014F 89 [ 2] 249 pushw x + 000150 8Ds00r00r00 [ 5] 250 callf ___fsdiv + 000154 5B 08 [ 2] 251 addw sp, #8 + 000156 89 [ 2] 252 pushw x + 000157 90 89 [ 2] 253 pushw y + 000159 1E 07 [ 2] 254 ldw x, (0x07, sp) + 00015B 89 [ 2] 255 pushw x + 00015C 1E 07 [ 2] 256 ldw x, (0x07, sp) + 00015E 89 [ 2] 257 pushw x + 00015F 8Ds00r00r00 [ 5] 258 callf ___fsmul + 000163 5B 08 [ 2] 259 addw sp, #8 + 000165 89 [ 2] 260 pushw x + 000166 90 89 [ 2] 261 pushw y + 000168 1E 07 [ 2] 262 ldw x, (0x07, sp) + 00016A 89 [ 2] 263 pushw x + 00016B 1E 07 [ 2] 264 ldw x, (0x07, sp) + 00016D 89 [ 2] 265 pushw x + 00016E 8Ds00r00r00 [ 5] 266 callf ___fsadd + 000172 5B 08 [ 2] 267 addw sp, #8 + 000174 1F 0F [ 2] 268 ldw (0x0f, sp), x + 000176 17 0D [ 2] 269 ldw (0x0d, sp), y + 000178 270 00108$: + 271 ; ../asincosf.c: 82: i = quartPI; + 000178 7B 11 [ 1] 272 ld a, (0x11, sp) + 273 ; ../asincosf.c: 85: if (x < 0.0) + 00017A 88 [ 1] 274 push a + 00017B 5F [ 1] 275 clrw x + 00017C 89 [ 2] 276 pushw x + 00017D 5F [ 1] 277 clrw x + 00017E 89 [ 2] 278 pushw x + 00017F 1E 1C [ 2] 279 ldw x, (0x1c, sp) + 000181 89 [ 2] 280 pushw x + 000182 1E 1C [ 2] 281 ldw x, (0x1c, sp) + 000184 89 [ 2] 282 pushw x + 283 ; ../asincosf.c: 86: r = (b[i] + r) + b[i]; + 000185 8Ds00r00r00 [ 5] 284 callf ___fslt + 000189 5B 08 [ 2] 285 addw sp, #8 + 00018B 6B 12 [ 1] 286 ld (0x12, sp), a + 00018D 84 [ 1] 287 pop a + 00018E 41 [ 1] 288 exg a, xl + 00018F A6 04 [ 1] 289 ld a, #0x04 + 000191 41 [ 1] 290 exg a, xl + 000192 42 [ 4] 291 mul x, a + 000193 1F 0B [ 2] 292 ldw (0x0b, sp), x + 293 ; ../asincosf.c: 83: if (isacos) + 000195 0D 19 [ 1] 294 tnz (0x19, sp) + 000197 26 04 [ 1] 295 jrne 00152$ + 000199 ACs00r02r2F [ 2] 296 jpf 00115$ + 00019D 297 00152$: + 298 ; ../asincosf.c: 85: if (x < 0.0) + 00019D 0D 11 [ 1] 299 tnz (0x11, sp) + 00019F 27 48 [ 1] 300 jreq 00110$ + 301 ; ../asincosf.c: 86: r = (b[i] + r) + b[i]; + 0001A1 1E 0B [ 2] 302 ldw x, (0x0b, sp) + 0001A3 1Cr00r08 [ 2] 303 addw x, #(_asincosf_b_65536_26 + 0) + 0001A6 4F [ 1] 304 clr a + 0001A7 A9s00 [ 1] 305 adc a, #((_asincosf_b_65536_26 + 0) >> 16) + 0001A9 90 93 [ 1] 306 ldw y, x + 0001AB 90 EE 02 [ 2] 307 ldw y, (0x2, y) + 0001AE 17 0B [ 2] 308 ldw (0x0b, sp), y + 0001B0 FE [ 2] 309 ldw x, (x) + 0001B1 1F 09 [ 2] 310 ldw (0x09, sp), x + 0001B3 90 89 [ 2] 311 pushw y + 0001B5 1E 11 [ 2] 312 ldw x, (0x11, sp) + 0001B7 89 [ 2] 313 pushw x + 0001B8 1E 11 [ 2] 314 ldw x, (0x11, sp) + 0001BA 89 [ 2] 315 pushw x + 0001BB 1E 11 [ 2] 316 ldw x, (0x11, sp) + 0001BD 89 [ 2] 317 pushw x + 0001BE 1E 11 [ 2] 318 ldw x, (0x11, sp) + 0001C0 89 [ 2] 319 pushw x + 0001C1 8Ds00r00r00 [ 5] 320 callf ___fsadd + 0001C5 5B 08 [ 2] 321 addw sp, #8 + 0001C7 1F 12 [ 2] 322 ldw (0x12, sp), x + 0001C9 17 10 [ 2] 323 ldw (0x10, sp), y + 0001CB 90 85 [ 2] 324 popw y + 0001CD 16 0B [ 2] 325 ldw y, (0x0b, sp) + 0001CF 90 89 [ 2] 326 pushw y + 0001D1 16 0B [ 2] 327 ldw y, (0x0b, sp) + 0001D3 90 89 [ 2] 328 pushw y + 0001D5 1E 14 [ 2] 329 ldw x, (0x14, sp) + 0001D7 89 [ 2] 330 pushw x + 0001D8 1E 14 [ 2] 331 ldw x, (0x14, sp) + 0001DA 89 [ 2] 332 pushw x + 0001DB 8Ds00r00r00 [ 5] 333 callf ___fsadd + 0001DF 5B 08 [ 2] 334 addw sp, #8 + 0001E1 1F 0F [ 2] 335 ldw (0x0f, sp), x + 0001E3 17 0D [ 2] 336 ldw (0x0d, sp), y + 0001E5 ACs00r02r8D [ 2] 337 jpf 00116$ + 0001E9 338 00110$: + 339 ; ../asincosf.c: 88: r = (a[i] - r) + a[i]; + 0001E9 1E 0B [ 2] 340 ldw x, (0x0b, sp) + 0001EB 1Cr00r00 [ 2] 341 addw x, #(_asincosf_a_65536_26 + 0) + 0001EE 4F [ 1] 342 clr a + 0001EF A9s00 [ 1] 343 adc a, #((_asincosf_a_65536_26 + 0) >> 16) + 0001F1 90 93 [ 1] 344 ldw y, x + 0001F3 90 EE 02 [ 2] 345 ldw y, (0x2, y) + 0001F6 17 0B [ 2] 346 ldw (0x0b, sp), y + 0001F8 FE [ 2] 347 ldw x, (x) + 0001F9 1F 09 [ 2] 348 ldw (0x09, sp), x + 0001FB 90 89 [ 2] 349 pushw y + 0001FD 1E 11 [ 2] 350 ldw x, (0x11, sp) + 0001FF 89 [ 2] 351 pushw x + 000200 1E 11 [ 2] 352 ldw x, (0x11, sp) + 000202 89 [ 2] 353 pushw x + 000203 1E 11 [ 2] 354 ldw x, (0x11, sp) + 000205 89 [ 2] 355 pushw x + 000206 1E 11 [ 2] 356 ldw x, (0x11, sp) + 000208 89 [ 2] 357 pushw x + 000209 8Ds00r00r00 [ 5] 358 callf ___fssub + 00020D 5B 08 [ 2] 359 addw sp, #8 + 00020F 1F 12 [ 2] 360 ldw (0x12, sp), x + 000211 17 10 [ 2] 361 ldw (0x10, sp), y + 000213 90 85 [ 2] 362 popw y + 000215 16 0B [ 2] 363 ldw y, (0x0b, sp) + 000217 90 89 [ 2] 364 pushw y + 000219 16 0B [ 2] 365 ldw y, (0x0b, sp) + 00021B 90 89 [ 2] 366 pushw y + 00021D 1E 14 [ 2] 367 ldw x, (0x14, sp) + 00021F 89 [ 2] 368 pushw x + 000220 1E 14 [ 2] 369 ldw x, (0x14, sp) + 000222 89 [ 2] 370 pushw x + 000223 8Ds00r00r00 [ 5] 371 callf ___fsadd + 000227 5B 08 [ 2] 372 addw sp, #8 + 000229 1F 0F [ 2] 373 ldw (0x0f, sp), x + 00022B 17 0D [ 2] 374 ldw (0x0d, sp), y + 00022D 20 5E [ 2] 375 jra 00116$ + 00022F 376 00115$: + 377 ; ../asincosf.c: 92: r = (a[i] + r) + a[i]; + 00022F 1E 0B [ 2] 378 ldw x, (0x0b, sp) + 000231 1Cr00r00 [ 2] 379 addw x, #(_asincosf_a_65536_26 + 0) + 000234 4F [ 1] 380 clr a + 000235 A9s00 [ 1] 381 adc a, #((_asincosf_a_65536_26 + 0) >> 16) + 000237 90 93 [ 1] 382 ldw y, x + 000239 90 EE 02 [ 2] 383 ldw y, (0x2, y) + 00023C 17 0B [ 2] 384 ldw (0x0b, sp), y + 00023E FE [ 2] 385 ldw x, (x) + 00023F 1F 09 [ 2] 386 ldw (0x09, sp), x + 000241 90 89 [ 2] 387 pushw y + 000243 1E 11 [ 2] 388 ldw x, (0x11, sp) + 000245 89 [ 2] 389 pushw x + 000246 1E 11 [ 2] 390 ldw x, (0x11, sp) + 000248 89 [ 2] 391 pushw x + 000249 1E 11 [ 2] 392 ldw x, (0x11, sp) + 00024B 89 [ 2] 393 pushw x + 00024C 1E 11 [ 2] 394 ldw x, (0x11, sp) + 00024E 89 [ 2] 395 pushw x + 00024F 8Ds00r00r00 [ 5] 396 callf ___fsadd + 000253 5B 08 [ 2] 397 addw sp, #8 + 000255 1F 11 [ 2] 398 ldw (0x11, sp), x + 000257 17 0F [ 2] 399 ldw (0x0f, sp), y + 000259 90 85 [ 2] 400 popw y + 00025B 16 0B [ 2] 401 ldw y, (0x0b, sp) + 00025D 90 89 [ 2] 402 pushw y + 00025F 16 0B [ 2] 403 ldw y, (0x0b, sp) + 000261 90 89 [ 2] 404 pushw y + 000263 1E 13 [ 2] 405 ldw x, (0x13, sp) + 000265 89 [ 2] 406 pushw x + 000266 1E 13 [ 2] 407 ldw x, (0x13, sp) + 000268 89 [ 2] 408 pushw x + 000269 8Ds00r00r00 [ 5] 409 callf ___fsadd + 00026D 5B 08 [ 2] 410 addw sp, #8 + 00026F 1F 0F [ 2] 411 ldw (0x0f, sp), x + 000271 17 0D [ 2] 412 ldw (0x0d, sp), y + 413 ; ../asincosf.c: 93: if (x < 0.0) + 000273 0D 11 [ 1] 414 tnz (0x11, sp) + 000275 27 16 [ 1] 415 jreq 00116$ + 416 ; ../asincosf.c: 94: r = -r; + 000277 16 0F [ 2] 417 ldw y, (0x0f, sp) + 000279 17 0A [ 2] 418 ldw (0x0a, sp), y + 00027B 7B 0E [ 1] 419 ld a, (0x0e, sp) + 00027D 6B 09 [ 1] 420 ld (0x09, sp), a + 00027F 7B 0D [ 1] 421 ld a, (0x0d, sp) + 000281 A8 80 [ 1] 422 xor a, #0x80 + 000283 6B 0D [ 1] 423 ld (0x0d, sp), a + 000285 16 0A [ 2] 424 ldw y, (0x0a, sp) + 000287 17 0F [ 2] 425 ldw (0x0f, sp), y + 000289 7B 09 [ 1] 426 ld a, (0x09, sp) + 00028B 6B 0E [ 1] 427 ld (0x0e, sp), a + 00028D 428 00116$: + 429 ; ../asincosf.c: 96: return r; + 00028D 1E 0F [ 2] 430 ldw x, (0x0f, sp) + 00028F 16 0D [ 2] 431 ldw y, (0x0d, sp) + 000291 432 00117$: + 433 ; ../asincosf.c: 97: } + 000291 5B 11 [ 2] 434 addw sp, #17 + 000293 87 [ 5] 435 retf + 436 .area CODE + 437 .area CONST + 000000 438 _asincosf_a_65536_26: + 000000 00 00 00 00 439 .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00 + 000004 3F 49 0F DB 440 .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01 + 000008 441 _asincosf_b_65536_26: + 000008 3F C9 0F DB 442 .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00 + 00000C 3F 49 0F DB 443 .byte #0x3f, #0x49, #0x0f, #0xdb ; 7.853982e-01 + 444 .area INITIALIZER + 445 .area CABS (ABS) diff --git a/device/lib/stm8-large/asincosf.rel b/device/lib/stm8-large/asincosf.rel new file mode 100644 index 0000000..c37ed67 --- /dev/null +++ b/device/lib/stm8-large/asincosf.rel @@ -0,0 +1,176 @@ +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 294 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 19 6B 11 1E 17 89 1E 17 89 8D +R 00 00 00 09 +T 00 00 0D 00 00 00 5B 04 1F 03 17 01 5F 89 4B 80 +R 00 00 00 09 82 03 00 07 +T 00 00 1A 4B 39 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 23 00 00 00 5B 08 6B 10 27 0C 16 03 17 0F +R 00 00 00 09 82 03 00 04 +T 00 00 30 16 01 17 0D AC 00 01 78 +R 00 00 00 09 80 08 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 1E 03 89 1E 03 89 5F 89 4B 00 4B 3F 8D +R 00 00 00 09 +T 00 00 45 00 00 00 5B 08 4D 27 70 7B 11 A0 01 4F +R 00 00 00 09 82 03 00 04 +T 00 00 52 49 6B 11 1E 03 89 1E 03 89 5F 89 4B 80 +R 00 00 00 09 +T 00 00 5F 4B 3F 8D 00 00 00 5B 08 4D 27 0D AE +R 00 00 00 09 82 06 00 04 +T 00 00 6B 00 21 CF 00 00 5F 90 5F AC +R 00 00 00 09 12 06 00 02 +T 00 00 74 00 02 91 +R 00 00 00 09 80 03 00 09 +T 00 00 77 +R 00 00 00 09 +T 00 00 77 1E 03 89 1E 03 89 5F 89 4B 80 4B 3F 8D +R 00 00 00 09 +T 00 00 84 00 00 00 5B 08 4B FF 4B FF 89 90 89 8D +R 00 00 00 09 82 03 00 00 +T 00 00 91 00 00 00 5B 06 1F 07 17 05 1E 07 89 1E +R 00 00 00 09 82 03 00 08 +T 00 00 9E 07 89 8D 00 00 00 5B 04 89 90 89 89 90 +R 00 00 00 09 82 06 00 03 +T 00 00 AB 89 8D 00 00 00 5B 08 90 58 8C 90 56 1F +R 00 00 00 09 82 05 00 06 +T 00 00 B8 03 17 01 20 16 +R 00 00 00 09 +T 00 00 BD +R 00 00 00 09 +T 00 00 BD 1E 03 89 1E 03 89 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 CA 00 00 00 5B 08 1F 07 17 05 +R 00 00 00 09 82 03 00 01 +T 00 00 D3 +R 00 00 00 09 +T 00 00 D3 1E 07 89 1E 07 89 4B 65 4B 20 4B 01 4B +R 00 00 00 09 +T 00 00 E0 BF 8D 00 00 00 5B 08 4B 6B 4B 16 4B 6F +R 00 00 00 09 82 05 00 01 +T 00 00 ED 4B 3F 89 90 89 8D 00 00 00 5B 08 1F 0F +R 00 00 00 09 82 09 00 06 +T 00 00 FA 1E 07 89 1E 07 89 1E 13 89 90 89 8D +R 00 00 00 09 +T 00 01 06 00 00 00 5B 08 1F 0B 17 09 4B 0B 4B 8D +R 00 00 00 09 82 03 00 01 +T 00 01 13 4B B1 4B C0 1E 0B 89 1E 0B 89 8D +R 00 00 00 09 +T 00 01 1E 00 00 00 5B 08 1F 0F 1E 07 89 1E 07 89 +R 00 00 00 09 82 03 00 06 +T 00 01 2B 1E 13 89 90 89 8D 00 00 00 5B 08 4B F0 +R 00 00 00 09 82 09 00 01 +T 00 01 38 4B 50 4B B3 4B 40 89 90 89 8D +R 00 00 00 09 +T 00 01 42 00 00 00 5B 08 89 90 89 1E 0F 89 1E 0F +R 00 00 00 09 82 03 00 06 +T 00 01 4F 89 8D 00 00 00 5B 08 89 90 89 1E 07 89 +R 00 00 00 09 82 05 00 09 +T 00 01 5C 1E 07 89 8D 00 00 00 5B 08 89 90 89 1E +R 00 00 00 09 82 07 00 01 +T 00 01 69 07 89 1E 07 89 8D 00 00 00 5B 08 1F 0F +R 00 00 00 09 82 09 00 06 +T 00 01 76 17 0D +R 00 00 00 09 +T 00 01 78 +R 00 00 00 09 +T 00 01 78 7B 11 88 5F 89 5F 89 1E 1C 89 1E 1C 89 +R 00 00 00 09 +T 00 01 85 8D 00 00 00 5B 08 6B 12 84 41 A6 04 41 +R 00 00 00 09 82 04 00 04 +T 00 01 92 42 1F 0B 0D 19 26 04 AC +R 00 00 00 09 +T 00 01 9A 00 02 2F +R 00 00 00 09 80 03 00 09 +T 00 01 9D +R 00 00 00 09 +T 00 01 9D 0D 11 27 48 1E 0B 1C 00 08 4F A9 +R 00 00 00 09 00 0A 00 07 +T 00 01 A8 00 00 08 90 93 90 EE 02 17 0B FE 1F 09 +R 00 00 00 09 F3 01 03 00 07 +T 00 01 B3 90 89 1E 11 89 1E 11 89 1E 11 89 1E 11 +R 00 00 00 09 +T 00 01 C0 89 8D 00 00 00 5B 08 1F 12 17 10 90 85 +R 00 00 00 09 82 05 00 06 +T 00 01 CD 16 0B 90 89 16 0B 90 89 1E 14 89 1E 14 +R 00 00 00 09 +T 00 01 DA 89 8D 00 00 00 5B 08 1F 0F 17 0D AC +R 00 00 00 09 82 05 00 06 +T 00 01 E6 00 02 8D +R 00 00 00 09 80 03 00 09 +T 00 01 E9 +R 00 00 00 09 +T 00 01 E9 1E 0B 1C 00 00 4F A9 00 00 00 90 93 90 +R 00 00 00 09 00 06 00 07 F3 01 0A 00 07 +T 00 01 F4 EE 02 17 0B FE 1F 09 90 89 1E 11 89 1E +R 00 00 00 09 +T 00 02 01 11 89 1E 11 89 1E 11 89 8D +R 00 00 00 09 +T 00 02 0A 00 00 00 5B 08 1F 12 17 10 90 85 16 0B +R 00 00 00 09 82 03 00 00 +T 00 02 17 90 89 16 0B 90 89 1E 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 02 24 00 00 00 5B 08 1F 0F 17 0D 20 5E +R 00 00 00 09 82 03 00 06 +T 00 02 2F +R 00 00 00 09 +T 00 02 2F 1E 0B 1C 00 00 4F A9 00 00 00 90 93 90 +R 00 00 00 09 00 06 00 07 F3 01 0A 00 07 +T 00 02 3A EE 02 17 0B FE 1F 09 90 89 1E 11 89 1E +R 00 00 00 09 +T 00 02 47 11 89 1E 11 89 1E 11 89 8D +R 00 00 00 09 +T 00 02 50 00 00 00 5B 08 1F 11 17 0F 90 85 16 0B +R 00 00 00 09 82 03 00 06 +T 00 02 5D 90 89 16 0B 90 89 1E 13 89 1E 13 89 8D +R 00 00 00 09 +T 00 02 6A 00 00 00 5B 08 1F 0F 17 0D 0D 11 27 16 +R 00 00 00 09 82 03 00 06 +T 00 02 77 16 0F 17 0A 7B 0E 6B 09 7B 0D A8 80 6B +R 00 00 00 09 +T 00 02 84 0D 16 0A 17 0F 7B 09 6B 0E +R 00 00 00 09 +T 00 02 8D +R 00 00 00 09 +T 00 02 8D 1E 0F 16 0D +R 00 00 00 09 +T 00 02 91 +R 00 00 00 09 +T 00 02 91 5B 11 87 +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-large/asincosf.sym b/device/lib/stm8-large/asincosf.sym new file mode 100644 index 0000000..d4fb243 --- /dev/null +++ b/device/lib/stm8-large/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 294 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/asinf.asm b/device/lib/stm8-large/asinf.asm new file mode 100644 index 0000000..d8e4682 --- /dev/null +++ b/device/lib/stm8-large/asinf.asm @@ -0,0 +1,113 @@ +;-------------------------------------------------------- +; 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, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___fseq + addw sp, #8 + tnz a + jreq 00108$ + ldw x, #0x0fdb + ldw y, #0x3fc9 + jra 00110$ +00108$: +; ../asinf.c: 39: else if (x ==-1.0) return -HALF_PI; + clrw x + pushw x + push #0x80 + push #0xbf + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___fseq + addw sp, #8 + tnz a + jreq 00105$ + ldw x, #0x0fdb + ldw y, #0xbfc9 + jra 00110$ +00105$: +; ../asinf.c: 40: else if (x == 0.0) return 0.0; + ldw x, (0x06, sp) + jrne 00102$ + ldw x, (0x04, sp) + sllw x + jrne 00102$ + clrw x + clrw y + jra 00110$ +00102$: +; ../asinf.c: 41: else return asincosf(x, false); + push #0x00 + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf _asincosf + addw sp, #5 +00110$: +; ../asinf.c: 42: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/asinf.lst b/device/lib/stm8-large/asinf.lst new file mode 100644 index 0000000..aa3d0eb --- /dev/null +++ b/device/lib/stm8-large/asinf.lst @@ -0,0 +1,113 @@ + 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 0A [ 2] 60 ldw x, (0x0a, sp) + 000008 89 [ 2] 61 pushw x + 000009 1E 0A [ 2] 62 ldw x, (0x0a, sp) + 00000B 89 [ 2] 63 pushw x + 00000C 8Ds00r00r00 [ 5] 64 callf ___fseq + 000010 5B 08 [ 2] 65 addw sp, #8 + 000012 4D [ 1] 66 tnz a + 000013 27 09 [ 1] 67 jreq 00108$ + 000015 AE 0F DB [ 2] 68 ldw x, #0x0fdb + 000018 90 AE 3F C9 [ 2] 69 ldw y, #0x3fc9 + 00001C 20 3A [ 2] 70 jra 00110$ + 00001E 71 00108$: + 72 ; ../asinf.c: 39: else if (x ==-1.0) return -HALF_PI; + 00001E 5F [ 1] 73 clrw x + 00001F 89 [ 2] 74 pushw x + 000020 4B 80 [ 1] 75 push #0x80 + 000022 4B BF [ 1] 76 push #0xbf + 000024 1E 0A [ 2] 77 ldw x, (0x0a, sp) + 000026 89 [ 2] 78 pushw x + 000027 1E 0A [ 2] 79 ldw x, (0x0a, sp) + 000029 89 [ 2] 80 pushw x + 00002A 8Ds00r00r00 [ 5] 81 callf ___fseq + 00002E 5B 08 [ 2] 82 addw sp, #8 + 000030 4D [ 1] 83 tnz a + 000031 27 09 [ 1] 84 jreq 00105$ + 000033 AE 0F DB [ 2] 85 ldw x, #0x0fdb + 000036 90 AE BF C9 [ 2] 86 ldw y, #0xbfc9 + 00003A 20 1C [ 2] 87 jra 00110$ + 00003C 88 00105$: + 89 ; ../asinf.c: 40: else if (x == 0.0) return 0.0; + 00003C 1E 06 [ 2] 90 ldw x, (0x06, sp) + 00003E 26 0A [ 1] 91 jrne 00102$ + 000040 1E 04 [ 2] 92 ldw x, (0x04, sp) + 000042 58 [ 2] 93 sllw x + 000043 26 05 [ 1] 94 jrne 00102$ + 000045 5F [ 1] 95 clrw x + 000046 90 5F [ 1] 96 clrw y + 000048 20 0E [ 2] 97 jra 00110$ + 00004A 98 00102$: + 99 ; ../asinf.c: 41: else return asincosf(x, false); + 00004A 4B 00 [ 1] 100 push #0x00 + 00004C 1E 07 [ 2] 101 ldw x, (0x07, sp) + 00004E 89 [ 2] 102 pushw x + 00004F 1E 07 [ 2] 103 ldw x, (0x07, sp) + 000051 89 [ 2] 104 pushw x + 000052 8Ds00r00r00 [ 5] 105 callf _asincosf + 000056 5B 05 [ 2] 106 addw sp, #5 + 000058 107 00110$: + 108 ; ../asinf.c: 42: } + 000058 87 [ 5] 109 retf + 110 .area CODE + 111 .area CONST + 112 .area INITIALIZER + 113 .area CABS (ABS) diff --git a/device/lib/stm8-large/asinf.rel b/device/lib/stm8-large/asinf.rel new file mode 100644 index 0000000..3822b74 --- /dev/null +++ b/device/lib/stm8-large/asinf.rel @@ -0,0 +1,51 @@ +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 59 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 0A 89 1E 0A 89 8D +R 00 00 00 09 +T 00 00 0D 00 00 00 5B 08 4D 27 09 AE 0F DB 90 AE +R 00 00 00 09 82 03 00 00 +T 00 00 1A 3F C9 20 3A +R 00 00 00 09 +T 00 00 1E +R 00 00 00 09 +T 00 00 1E 5F 89 4B 80 4B BF 1E 0A 89 1E 0A 89 8D +R 00 00 00 09 +T 00 00 2B 00 00 00 5B 08 4D 27 09 AE 0F DB 90 AE +R 00 00 00 09 82 03 00 00 +T 00 00 38 BF C9 20 1C +R 00 00 00 09 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 1E 06 26 0A 1E 04 58 26 05 5F 90 5F 20 +R 00 00 00 09 +T 00 00 49 0E +R 00 00 00 09 +T 00 00 4A +R 00 00 00 09 +T 00 00 4A 4B 00 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 53 00 00 00 5B 05 +R 00 00 00 09 82 03 00 02 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/asinf.sym b/device/lib/stm8-large/asinf.sym new file mode 100644 index 0000000..1ac49ed --- /dev/null +++ b/device/lib/stm8-large/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 59 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/atan2f.asm b/device/lib/stm8-large/atan2f.asm new file mode 100644 index 0000000..0cfdee3 --- /dev/null +++ b/device/lib/stm8-large/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, (0x10, sp) + jrne 00102$ + ldw x, (0x0e, sp) + sllw x + jrne 00102$ + ldw x, (0x14, sp) + jrne 00102$ + ldw x, (0x12, 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 + jpf 00109$ +00102$: +; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x)) + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf _fabsf + addw sp, #4 + ldw (0x04, sp), x + ldw (0x02, sp), y + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + callf _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, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x +; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x)) + callf ___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 + callf ___fslt + addw sp, #8 + ld (0x09, sp), a + jrne 00107$ +; ../atan2f.c: 46: r=atanf(x/y); + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + callf _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, (0x18, sp) + pushw x + ldw x, (0x18, sp) + pushw x + callf ___fslt + addw sp, #8 + tnz a + jrne 00150$ + jpf 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 + callf ___fsadd + addw sp, #8 + ldw (0x08, sp), x + ldw (0x06, sp), y + jra 00108$ +00107$: +; ../atan2f.c: 51: r=-atanf(y/x); + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x18, sp) + pushw x + ldw x, (0x18, sp) + pushw x + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + callf _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 + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/atan2f.lst b/device/lib/stm8-large/atan2f.lst new file mode 100644 index 0000000..9a4c5ab --- /dev/null +++ b/device/lib/stm8-large/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 10 [ 2] 58 ldw x, (0x10, sp) + 000004 26 1B [ 1] 59 jrne 00102$ + 000006 1E 0E [ 2] 60 ldw x, (0x0e, sp) + 000008 58 [ 2] 61 sllw x + 000009 26 16 [ 1] 62 jrne 00102$ + 00000B 1E 14 [ 2] 63 ldw x, (0x14, sp) + 00000D 26 12 [ 1] 64 jrne 00102$ + 00000F 1E 12 [ 2] 65 ldw x, (0x12, sp) + 000011 58 [ 2] 66 sllw x + 000012 26 0D [ 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 ACs00r01r2B [ 2] 74 jpf 00109$ + 000021 75 00102$: + 76 ; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x)) + 000021 1E 14 [ 2] 77 ldw x, (0x14, sp) + 000023 89 [ 2] 78 pushw x + 000024 1E 14 [ 2] 79 ldw x, (0x14, sp) + 000026 89 [ 2] 80 pushw x + 000027 8Ds00r00r00 [ 5] 81 callf _fabsf + 00002B 5B 04 [ 2] 82 addw sp, #4 + 00002D 1F 04 [ 2] 83 ldw (0x04, sp), x + 00002F 17 02 [ 2] 84 ldw (0x02, sp), y + 000031 1E 10 [ 2] 85 ldw x, (0x10, sp) + 000033 89 [ 2] 86 pushw x + 000034 1E 10 [ 2] 87 ldw x, (0x10, sp) + 000036 89 [ 2] 88 pushw x + 000037 8Ds00r00r00 [ 5] 89 callf _fabsf + 00003B 5B 04 [ 2] 90 addw sp, #4 + 00003D 1F 08 [ 2] 91 ldw (0x08, sp), x + 00003F 17 06 [ 2] 92 ldw (0x06, sp), y + 93 ; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI); + 000041 5F [ 1] 94 clrw x + 000042 89 [ 2] 95 pushw x + 000043 5F [ 1] 96 clrw x + 000044 89 [ 2] 97 pushw x + 000045 1E 14 [ 2] 98 ldw x, (0x14, sp) + 000047 89 [ 2] 99 pushw x + 000048 1E 14 [ 2] 100 ldw x, (0x14, sp) + 00004A 89 [ 2] 101 pushw x + 102 ; ../atan2f.c: 44: if(fabsf(y)>=fabsf(x)) + 00004B 8Ds00r00r00 [ 5] 103 callf ___fslt + 00004F 5B 08 [ 2] 104 addw sp, #8 + 000051 6B 0A [ 1] 105 ld (0x0a, sp), a + 000053 1E 08 [ 2] 106 ldw x, (0x08, sp) + 000055 89 [ 2] 107 pushw x + 000056 1E 08 [ 2] 108 ldw x, (0x08, sp) + 000058 89 [ 2] 109 pushw x + 000059 1E 08 [ 2] 110 ldw x, (0x08, sp) + 00005B 89 [ 2] 111 pushw x + 00005C 1E 08 [ 2] 112 ldw x, (0x08, sp) + 00005E 89 [ 2] 113 pushw x + 00005F 8Ds00r00r00 [ 5] 114 callf ___fslt + 000063 5B 08 [ 2] 115 addw sp, #8 + 000065 6B 09 [ 1] 116 ld (0x09, sp), a + 000067 26 68 [ 1] 117 jrne 00107$ + 118 ; ../atan2f.c: 46: r=atanf(x/y); + 000069 1E 14 [ 2] 119 ldw x, (0x14, sp) + 00006B 89 [ 2] 120 pushw x + 00006C 1E 14 [ 2] 121 ldw x, (0x14, sp) + 00006E 89 [ 2] 122 pushw x + 00006F 1E 14 [ 2] 123 ldw x, (0x14, sp) + 000071 89 [ 2] 124 pushw x + 000072 1E 14 [ 2] 125 ldw x, (0x14, sp) + 000074 89 [ 2] 126 pushw x + 000075 8Ds00r00r00 [ 5] 127 callf ___fsdiv + 000079 5B 08 [ 2] 128 addw sp, #8 + 00007B 89 [ 2] 129 pushw x + 00007C 90 89 [ 2] 130 pushw y + 00007E 8Ds00r00r00 [ 5] 131 callf _atanf + 000082 5B 04 [ 2] 132 addw sp, #4 + 000084 1F 08 [ 2] 133 ldw (0x08, sp), x + 000086 17 06 [ 2] 134 ldw (0x06, sp), y + 135 ; ../atan2f.c: 47: if(y<0.0) r+=(x>=0?PI:-PI); + 000088 5F [ 1] 136 clrw x + 000089 89 [ 2] 137 pushw x + 00008A 5F [ 1] 138 clrw x + 00008B 89 [ 2] 139 pushw x + 00008C 1E 18 [ 2] 140 ldw x, (0x18, sp) + 00008E 89 [ 2] 141 pushw x + 00008F 1E 18 [ 2] 142 ldw x, (0x18, sp) + 000091 89 [ 2] 143 pushw x + 000092 8Ds00r00r00 [ 5] 144 callf ___fslt + 000096 5B 08 [ 2] 145 addw sp, #8 + 000098 4D [ 1] 146 tnz a + 000099 26 04 [ 1] 147 jrne 00150$ + 00009B ACs00r01r27 [ 2] 148 jpf 00108$ + 00009F 149 00150$: + 00009F 0D 0A [ 1] 150 tnz (0x0a, sp) + 0000A1 26 0C [ 1] 151 jrne 00111$ + 0000A3 AE 0F DB [ 2] 152 ldw x, #0x0fdb + 0000A6 1F 04 [ 2] 153 ldw (0x04, sp), x + 0000A8 AE 40 49 [ 2] 154 ldw x, #0x4049 + 0000AB 1F 02 [ 2] 155 ldw (0x02, sp), x + 0000AD 20 0A [ 2] 156 jra 00112$ + 0000AF 157 00111$: + 0000AF AE 0F DB [ 2] 158 ldw x, #0x0fdb + 0000B2 1F 04 [ 2] 159 ldw (0x04, sp), x + 0000B4 AE C0 49 [ 2] 160 ldw x, #0xc049 + 0000B7 1F 02 [ 2] 161 ldw (0x02, sp), x + 0000B9 162 00112$: + 0000B9 1E 04 [ 2] 163 ldw x, (0x04, sp) + 0000BB 89 [ 2] 164 pushw x + 0000BC 1E 04 [ 2] 165 ldw x, (0x04, sp) + 0000BE 89 [ 2] 166 pushw x + 0000BF 1E 0C [ 2] 167 ldw x, (0x0c, sp) + 0000C1 89 [ 2] 168 pushw x + 0000C2 1E 0C [ 2] 169 ldw x, (0x0c, sp) + 0000C4 89 [ 2] 170 pushw x + 0000C5 8Ds00r00r00 [ 5] 171 callf ___fsadd + 0000C9 5B 08 [ 2] 172 addw sp, #8 + 0000CB 1F 08 [ 2] 173 ldw (0x08, sp), x + 0000CD 17 06 [ 2] 174 ldw (0x06, sp), y + 0000CF 20 56 [ 2] 175 jra 00108$ + 0000D1 176 00107$: + 177 ; ../atan2f.c: 51: r=-atanf(y/x); + 0000D1 1E 10 [ 2] 178 ldw x, (0x10, sp) + 0000D3 89 [ 2] 179 pushw x + 0000D4 1E 10 [ 2] 180 ldw x, (0x10, sp) + 0000D6 89 [ 2] 181 pushw x + 0000D7 1E 18 [ 2] 182 ldw x, (0x18, sp) + 0000D9 89 [ 2] 183 pushw x + 0000DA 1E 18 [ 2] 184 ldw x, (0x18, sp) + 0000DC 89 [ 2] 185 pushw x + 0000DD 8Ds00r00r00 [ 5] 186 callf ___fsdiv + 0000E1 5B 08 [ 2] 187 addw sp, #8 + 0000E3 89 [ 2] 188 pushw x + 0000E4 90 89 [ 2] 189 pushw y + 0000E6 8Ds00r00r00 [ 5] 190 callf _atanf + 0000EA 5B 04 [ 2] 191 addw sp, #4 + 0000EC 51 [ 1] 192 exgw x, y + 0000ED 58 [ 2] 193 sllw x + 0000EE 8C [ 1] 194 ccf + 0000EF 56 [ 2] 195 rrcw x + 0000F0 17 08 [ 2] 196 ldw (0x08, sp), y + 0000F2 1F 06 [ 2] 197 ldw (0x06, sp), x + 198 ; ../atan2f.c: 52: r+=(x<0.0?-HALF_PI:HALF_PI); + 0000F4 7B 0A [ 1] 199 ld a, (0x0a, sp) + 0000F6 27 0A [ 1] 200 jreq 00113$ + 0000F8 AE 0F DB [ 2] 201 ldw x, #0x0fdb + 0000FB 1F 04 [ 2] 202 ldw (0x04, sp), x + 0000FD AE BF C9 [ 2] 203 ldw x, #0xbfc9 + 000100 20 08 [ 2] 204 jra 00114$ + 000102 205 00113$: + 000102 AE 0F DB [ 2] 206 ldw x, #0x0fdb + 000105 1F 04 [ 2] 207 ldw (0x04, sp), x + 000107 AE 3F C9 [ 2] 208 ldw x, #0x3fc9 + 00010A 209 00114$: + 00010A 16 04 [ 2] 210 ldw y, (0x04, sp) + 00010C 90 89 [ 2] 211 pushw y + 00010E 89 [ 2] 212 pushw x + 00010F 1E 0C [ 2] 213 ldw x, (0x0c, sp) + 000111 89 [ 2] 214 pushw x + 000112 1E 0C [ 2] 215 ldw x, (0x0c, sp) + 000114 89 [ 2] 216 pushw x + 000115 8Ds00r00r00 [ 5] 217 callf ___fsadd + 000119 5B 08 [ 2] 218 addw sp, #8 + 00011B 1F 03 [ 2] 219 ldw (0x03, sp), x + 00011D 17 01 [ 2] 220 ldw (0x01, sp), y + 00011F 16 03 [ 2] 221 ldw y, (0x03, sp) + 000121 17 08 [ 2] 222 ldw (0x08, sp), y + 000123 16 01 [ 2] 223 ldw y, (0x01, sp) + 000125 17 06 [ 2] 224 ldw (0x06, sp), y + 000127 225 00108$: + 226 ; ../atan2f.c: 54: return r; + 000127 1E 08 [ 2] 227 ldw x, (0x08, sp) + 000129 16 06 [ 2] 228 ldw y, (0x06, sp) + 00012B 229 00109$: + 230 ; ../atan2f.c: 55: } + 00012B 5B 0A [ 2] 231 addw sp, #10 + 00012D 87 [ 5] 232 retf + 233 .area CODE + 234 .area CONST + 235 .area INITIALIZER + 236 .area CABS (ABS) diff --git a/device/lib/stm8-large/atan2f.rel b/device/lib/stm8-large/atan2f.rel new file mode 100644 index 0000000..2704fe8 --- /dev/null +++ b/device/lib/stm8-large/atan2f.rel @@ -0,0 +1,103 @@ +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 12E 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 10 26 1B 1E 0E 58 26 16 1E 14 +R 00 00 00 09 +T 00 00 0D 26 12 1E 12 58 26 0D AE 00 21 CF 00 00 +R 00 00 00 09 12 0E 00 00 +T 00 00 1A 5F 90 5F AC 00 01 2B +R 00 00 00 09 80 07 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 1E 14 89 1E 14 89 8D 00 00 00 5B 04 1F +R 00 00 00 09 82 0A 00 04 +T 00 00 2E 04 17 02 1E 10 89 1E 10 89 8D +R 00 00 00 09 +T 00 00 38 00 00 00 5B 04 1F 08 17 06 5F 89 5F 89 +R 00 00 00 09 82 03 00 04 +T 00 00 45 1E 14 89 1E 14 89 8D 00 00 00 5B 08 6B +R 00 00 00 09 82 0A 00 01 +T 00 00 52 0A 1E 08 89 1E 08 89 1E 08 89 1E 08 89 +R 00 00 00 09 +T 00 00 5F 8D 00 00 00 5B 08 6B 09 26 68 1E 14 89 +R 00 00 00 09 82 04 00 01 +T 00 00 6C 1E 14 89 1E 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 00 76 00 00 00 5B 08 89 90 89 8D +R 00 00 00 09 82 03 00 06 +T 00 00 7F 00 00 00 5B 04 1F 08 17 06 5F 89 5F 89 +R 00 00 00 09 82 03 00 05 +T 00 00 8C 1E 18 89 1E 18 89 8D 00 00 00 5B 08 4D +R 00 00 00 09 82 0A 00 01 +T 00 00 99 26 04 AC 00 01 27 +R 00 00 00 09 80 06 00 09 +T 00 00 9F +R 00 00 00 09 +T 00 00 9F 0D 0A 26 0C AE 0F DB 1F 04 AE 40 49 1F +R 00 00 00 09 +T 00 00 AC 02 20 0A +R 00 00 00 09 +T 00 00 AF +R 00 00 00 09 +T 00 00 AF AE 0F DB 1F 04 AE C0 49 1F 02 +R 00 00 00 09 +T 00 00 B9 +R 00 00 00 09 +T 00 00 B9 1E 04 89 1E 04 89 1E 0C 89 1E 0C 89 8D +R 00 00 00 09 +T 00 00 C6 00 00 00 5B 08 1F 08 17 06 20 56 +R 00 00 00 09 82 03 00 03 +T 00 00 D1 +R 00 00 00 09 +T 00 00 D1 1E 10 89 1E 10 89 1E 18 89 1E 18 89 8D +R 00 00 00 09 +T 00 00 DE 00 00 00 5B 08 89 90 89 8D +R 00 00 00 09 82 03 00 06 +T 00 00 E7 00 00 00 5B 04 51 58 8C 56 17 08 1F 06 +R 00 00 00 09 82 03 00 05 +T 00 00 F4 7B 0A 27 0A AE 0F DB 1F 04 AE BF C9 20 +R 00 00 00 09 +T 00 01 01 08 +R 00 00 00 09 +T 00 01 02 +R 00 00 00 09 +T 00 01 02 AE 0F DB 1F 04 AE 3F C9 +R 00 00 00 09 +T 00 01 0A +R 00 00 00 09 +T 00 01 0A 16 04 90 89 89 1E 0C 89 1E 0C 89 8D +R 00 00 00 09 +T 00 01 16 00 00 00 5B 08 1F 03 17 01 16 03 17 08 +R 00 00 00 09 82 03 00 03 +T 00 01 23 16 01 17 06 +R 00 00 00 09 +T 00 01 27 +R 00 00 00 09 +T 00 01 27 1E 08 16 06 +R 00 00 00 09 +T 00 01 2B +R 00 00 00 09 +T 00 01 2B 5B 0A 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/atan2f.sym b/device/lib/stm8-large/atan2f.sym new file mode 100644 index 0000000..4fc2a31 --- /dev/null +++ b/device/lib/stm8-large/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 12E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/atanf.asm b/device/lib/stm8-large/atanf.asm new file mode 100644 index 0000000..3e7b8f9 --- /dev/null +++ b/device/lib/stm8-large/atanf.asm @@ -0,0 +1,340 @@ +;-------------------------------------------------------- +; 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, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf _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 + callf ___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 + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x80 + push #0x3f + pushw x + pushw y + callf ___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 + callf ___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 + callf ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + callf ___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 + callf _fabsf + addw sp, #4 + push #0x00 + push #0x00 + push #0x80 + push #0x39 + pushw x + pushw y + callf ___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 + jpf 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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0xf6 + push #0x10 + push #0xf1 + push #0xbe + pushw x + pushw y + callf ___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 + callf ___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 + callf ___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 + callf ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x09, sp) + pushw x + ldw x, (0x09, sp) + pushw x + callf ___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) + clr a + adc a, #((_atanf_a_65536_26 + 0) >> 16) + 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 + callf ___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, (0x1d, sp) + push a + ld a, (0x1d, sp) + push a + ld a, (0x1d, sp) + push a + ld a, (0x1d, sp) + push a + callf ___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 + retf + .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-large/atanf.lst b/device/lib/stm8-large/atanf.lst new file mode 100644 index 0000000..c1bd7a3 --- /dev/null +++ b/device/lib/stm8-large/atanf.lst @@ -0,0 +1,340 @@ + 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 14 [ 2] 60 ldw x, (0x14, sp) + 000007 89 [ 2] 61 pushw x + 000008 1E 14 [ 2] 62 ldw x, (0x14, sp) + 00000A 89 [ 2] 63 pushw x + 00000B 8Ds00r00r00 [ 5] 64 callf _fabsf + 00000F 5B 04 [ 2] 65 addw sp, #4 + 000011 1F 05 [ 2] 66 ldw (0x05, sp), x + 000013 17 03 [ 2] 67 ldw (0x03, sp), y + 68 ; ../atanf.c: 62: if(f>1.0) + 000015 1E 05 [ 2] 69 ldw x, (0x05, sp) + 000017 89 [ 2] 70 pushw x + 000018 1E 05 [ 2] 71 ldw x, (0x05, sp) + 00001A 89 [ 2] 72 pushw x + 00001B 5F [ 1] 73 clrw x + 00001C 89 [ 2] 74 pushw x + 00001D 4B 80 [ 1] 75 push #0x80 + 00001F 4B 3F [ 1] 76 push #0x3f + 000021 8Ds00r00r00 [ 5] 77 callf ___fslt + 000025 5B 08 [ 2] 78 addw sp, #8 + 000027 4D [ 1] 79 tnz a + 000028 27 1B [ 1] 80 jreq 00102$ + 81 ; ../atanf.c: 64: f=1.0/f; + 00002A 1E 05 [ 2] 82 ldw x, (0x05, sp) + 00002C 89 [ 2] 83 pushw x + 00002D 1E 05 [ 2] 84 ldw x, (0x05, sp) + 00002F 89 [ 2] 85 pushw x + 000030 5F [ 1] 86 clrw x + 000031 89 [ 2] 87 pushw x + 000032 4B 80 [ 1] 88 push #0x80 + 000034 4B 3F [ 1] 89 push #0x3f + 000036 8Ds00r00r00 [ 5] 90 callf ___fsdiv + 00003A 5B 08 [ 2] 91 addw sp, #8 + 00003C 1F 05 [ 2] 92 ldw (0x05, sp), x + 00003E 17 03 [ 2] 93 ldw (0x03, sp), y + 94 ; ../atanf.c: 65: n=2; + 000040 AE 00 02 [ 2] 95 ldw x, #0x0002 + 000043 1F 01 [ 2] 96 ldw (0x01, sp), x + 000045 97 00102$: + 98 ; ../atanf.c: 67: if(f>K1) + 000045 1E 05 [ 2] 99 ldw x, (0x05, sp) + 000047 89 [ 2] 100 pushw x + 000048 1E 05 [ 2] 101 ldw x, (0x05, sp) + 00004A 89 [ 2] 102 pushw x + 00004B 4B A3 [ 1] 103 push #0xa3 + 00004D 4B 30 [ 1] 104 push #0x30 + 00004F 4B 89 [ 1] 105 push #0x89 + 000051 4B 3E [ 1] 106 push #0x3e + 000053 8Ds00r00r00 [ 5] 107 callf ___fslt + 000057 5B 08 [ 2] 108 addw sp, #8 + 000059 4D [ 1] 109 tnz a + 00005A 27 68 [ 1] 110 jreq 00104$ + 111 ; ../atanf.c: 69: f=((K2*f-1.0)+f)/(K3+f); + 00005C 1E 05 [ 2] 112 ldw x, (0x05, sp) + 00005E 89 [ 2] 113 pushw x + 00005F 1E 05 [ 2] 114 ldw x, (0x05, sp) + 000061 89 [ 2] 115 pushw x + 000062 4B AF [ 1] 116 push #0xaf + 000064 4B 67 [ 1] 117 push #0x67 + 000066 4B 3B [ 1] 118 push #0x3b + 000068 4B 3F [ 1] 119 push #0x3f + 00006A 8Ds00r00r00 [ 5] 120 callf ___fsmul + 00006E 5B 08 [ 2] 121 addw sp, #8 + 000070 4B 00 [ 1] 122 push #0x00 + 000072 4B 00 [ 1] 123 push #0x00 + 000074 4B 80 [ 1] 124 push #0x80 + 000076 4B 3F [ 1] 125 push #0x3f + 000078 89 [ 2] 126 pushw x + 000079 90 89 [ 2] 127 pushw y + 00007B 8Ds00r00r00 [ 5] 128 callf ___fssub + 00007F 5B 08 [ 2] 129 addw sp, #8 + 000081 1F 0D [ 2] 130 ldw (0x0d, sp), x + 000083 1E 05 [ 2] 131 ldw x, (0x05, sp) + 000085 89 [ 2] 132 pushw x + 000086 1E 05 [ 2] 133 ldw x, (0x05, sp) + 000088 89 [ 2] 134 pushw x + 000089 1E 11 [ 2] 135 ldw x, (0x11, sp) + 00008B 89 [ 2] 136 pushw x + 00008C 90 89 [ 2] 137 pushw y + 00008E 8Ds00r00r00 [ 5] 138 callf ___fsadd + 000092 5B 08 [ 2] 139 addw sp, #8 + 000094 1F 0D [ 2] 140 ldw (0x0d, sp), x + 000096 17 0B [ 2] 141 ldw (0x0b, sp), y + 000098 4B D7 [ 1] 142 push #0xd7 + 00009A 4B B3 [ 1] 143 push #0xb3 + 00009C 4B DD [ 1] 144 push #0xdd + 00009E 4B 3F [ 1] 145 push #0x3f + 0000A0 1E 09 [ 2] 146 ldw x, (0x09, sp) + 0000A2 89 [ 2] 147 pushw x + 0000A3 1E 09 [ 2] 148 ldw x, (0x09, sp) + 0000A5 89 [ 2] 149 pushw x + 0000A6 8Ds00r00r00 [ 5] 150 callf ___fsadd + 0000AA 5B 08 [ 2] 151 addw sp, #8 + 0000AC 89 [ 2] 152 pushw x + 0000AD 90 89 [ 2] 153 pushw y + 0000AF 1E 11 [ 2] 154 ldw x, (0x11, sp) + 0000B1 89 [ 2] 155 pushw x + 0000B2 1E 11 [ 2] 156 ldw x, (0x11, sp) + 0000B4 89 [ 2] 157 pushw x + 0000B5 8Ds00r00r00 [ 5] 158 callf ___fsdiv + 0000B9 5B 08 [ 2] 159 addw sp, #8 + 0000BB 1F 05 [ 2] 160 ldw (0x05, sp), x + 0000BD 17 03 [ 2] 161 ldw (0x03, sp), y + 162 ; ../atanf.c: 73: n++; + 0000BF 1E 01 [ 2] 163 ldw x, (0x01, sp) + 0000C1 5C [ 1] 164 incw x + 0000C2 1F 01 [ 2] 165 ldw (0x01, sp), x + 0000C4 166 00104$: + 167 ; ../atanf.c: 75: if(fabsf(f)<EPS) r=f; + 0000C4 1E 05 [ 2] 168 ldw x, (0x05, sp) + 0000C6 89 [ 2] 169 pushw x + 0000C7 1E 05 [ 2] 170 ldw x, (0x05, sp) + 0000C9 89 [ 2] 171 pushw x + 0000CA 8Ds00r00r00 [ 5] 172 callf _fabsf + 0000CE 5B 04 [ 2] 173 addw sp, #4 + 0000D0 4B 00 [ 1] 174 push #0x00 + 0000D2 4B 00 [ 1] 175 push #0x00 + 0000D4 4B 80 [ 1] 176 push #0x80 + 0000D6 4B 39 [ 1] 177 push #0x39 + 0000D8 89 [ 2] 178 pushw x + 0000D9 90 89 [ 2] 179 pushw y + 0000DB 8Ds00r00r00 [ 5] 180 callf ___fslt + 0000DF 5B 08 [ 2] 181 addw sp, #8 + 0000E1 6B 0E [ 1] 182 ld (0x0e, sp), a + 0000E3 27 0C [ 1] 183 jreq 00106$ + 0000E5 16 05 [ 2] 184 ldw y, (0x05, sp) + 0000E7 17 0D [ 2] 185 ldw (0x0d, sp), y + 0000E9 16 03 [ 2] 186 ldw y, (0x03, sp) + 0000EB 17 0B [ 2] 187 ldw (0x0b, sp), y + 0000ED ACs00r01r8C [ 2] 188 jpf 00107$ + 0000F1 189 00106$: + 190 ; ../atanf.c: 78: g=f*f; + 0000F1 1E 05 [ 2] 191 ldw x, (0x05, sp) + 0000F3 89 [ 2] 192 pushw x + 0000F4 1E 05 [ 2] 193 ldw x, (0x05, sp) + 0000F6 89 [ 2] 194 pushw x + 0000F7 1E 09 [ 2] 195 ldw x, (0x09, sp) + 0000F9 89 [ 2] 196 pushw x + 0000FA 1E 09 [ 2] 197 ldw x, (0x09, sp) + 0000FC 89 [ 2] 198 pushw x + 0000FD 8Ds00r00r00 [ 5] 199 callf ___fsmul + 000101 5B 08 [ 2] 200 addw sp, #8 + 000103 1F 09 [ 2] 201 ldw (0x09, sp), x + 000105 17 07 [ 2] 202 ldw (0x07, sp), y + 203 ; ../atanf.c: 79: r=f+P(g,f)/Q(g); + 000107 1E 09 [ 2] 204 ldw x, (0x09, sp) + 000109 89 [ 2] 205 pushw x + 00010A 1E 09 [ 2] 206 ldw x, (0x09, sp) + 00010C 89 [ 2] 207 pushw x + 00010D 4B 91 [ 1] 208 push #0x91 + 00010F 4B 86 [ 1] 209 push #0x86 + 000111 4B 50 [ 1] 210 push #0x50 + 000113 4B BD [ 1] 211 push #0xbd + 000115 8Ds00r00r00 [ 5] 212 callf ___fsmul + 000119 5B 08 [ 2] 213 addw sp, #8 + 00011B 4B F6 [ 1] 214 push #0xf6 + 00011D 4B 10 [ 1] 215 push #0x10 + 00011F 4B F1 [ 1] 216 push #0xf1 + 000121 4B BE [ 1] 217 push #0xbe + 000123 89 [ 2] 218 pushw x + 000124 90 89 [ 2] 219 pushw y + 000126 8Ds00r00r00 [ 5] 220 callf ___fsadd + 00012A 5B 08 [ 2] 221 addw sp, #8 + 00012C 1F 0D [ 2] 222 ldw (0x0d, sp), x + 00012E 1E 09 [ 2] 223 ldw x, (0x09, sp) + 000130 89 [ 2] 224 pushw x + 000131 1E 09 [ 2] 225 ldw x, (0x09, sp) + 000133 89 [ 2] 226 pushw x + 000134 1E 11 [ 2] 227 ldw x, (0x11, sp) + 000136 89 [ 2] 228 pushw x + 000137 90 89 [ 2] 229 pushw y + 000139 8Ds00r00r00 [ 5] 230 callf ___fsmul + 00013D 5B 08 [ 2] 231 addw sp, #8 + 00013F 1F 0D [ 2] 232 ldw (0x0d, sp), x + 000141 1E 05 [ 2] 233 ldw x, (0x05, sp) + 000143 89 [ 2] 234 pushw x + 000144 1E 05 [ 2] 235 ldw x, (0x05, sp) + 000146 89 [ 2] 236 pushw x + 000147 1E 11 [ 2] 237 ldw x, (0x11, sp) + 000149 89 [ 2] 238 pushw x + 00014A 90 89 [ 2] 239 pushw y + 00014C 8Ds00r00r00 [ 5] 240 callf ___fsmul + 000150 5B 08 [ 2] 241 addw sp, #8 + 000152 1F 0D [ 2] 242 ldw (0x0d, sp), x + 000154 17 0B [ 2] 243 ldw (0x0b, sp), y + 000156 4B D3 [ 1] 244 push #0xd3 + 000158 4B CC [ 1] 245 push #0xcc + 00015A 4B B4 [ 1] 246 push #0xb4 + 00015C 4B 3F [ 1] 247 push #0x3f + 00015E 1E 0D [ 2] 248 ldw x, (0x0d, sp) + 000160 89 [ 2] 249 pushw x + 000161 1E 0D [ 2] 250 ldw x, (0x0d, sp) + 000163 89 [ 2] 251 pushw x + 000164 8Ds00r00r00 [ 5] 252 callf ___fsadd + 000168 5B 08 [ 2] 253 addw sp, #8 + 00016A 89 [ 2] 254 pushw x + 00016B 90 89 [ 2] 255 pushw y + 00016D 1E 11 [ 2] 256 ldw x, (0x11, sp) + 00016F 89 [ 2] 257 pushw x + 000170 1E 11 [ 2] 258 ldw x, (0x11, sp) + 000172 89 [ 2] 259 pushw x + 000173 8Ds00r00r00 [ 5] 260 callf ___fsdiv + 000177 5B 08 [ 2] 261 addw sp, #8 + 000179 89 [ 2] 262 pushw x + 00017A 90 89 [ 2] 263 pushw y + 00017C 1E 09 [ 2] 264 ldw x, (0x09, sp) + 00017E 89 [ 2] 265 pushw x + 00017F 1E 09 [ 2] 266 ldw x, (0x09, sp) + 000181 89 [ 2] 267 pushw x + 000182 8Ds00r00r00 [ 5] 268 callf ___fsadd + 000186 5B 08 [ 2] 269 addw sp, #8 + 000188 1F 0D [ 2] 270 ldw (0x0d, sp), x + 00018A 17 0B [ 2] 271 ldw (0x0b, sp), y + 00018C 272 00107$: + 273 ; ../atanf.c: 81: if(n>1) r=-r; + 00018C 1E 01 [ 2] 274 ldw x, (0x01, sp) + 00018E A3 00 01 [ 2] 275 cpw x, #0x0001 + 000191 2D 0B [ 1] 276 jrsle 00109$ + 000193 16 0D [ 2] 277 ldw y, (0x0d, sp) + 000195 1E 0B [ 2] 278 ldw x, (0x0b, sp) + 000197 58 [ 2] 279 sllw x + 000198 8C [ 1] 280 ccf + 000199 56 [ 2] 281 rrcw x + 00019A 17 0D [ 2] 282 ldw (0x0d, sp), y + 00019C 1F 0B [ 2] 283 ldw (0x0b, sp), x + 00019E 284 00109$: + 285 ; ../atanf.c: 82: r+=a[n]; + 00019E 1E 01 [ 2] 286 ldw x, (0x01, sp) + 0001A0 58 [ 2] 287 sllw x + 0001A1 58 [ 2] 288 sllw x + 0001A2 1Cr00r00 [ 2] 289 addw x, #(_atanf_a_65536_26 + 0) + 0001A5 4F [ 1] 290 clr a + 0001A6 A9s00 [ 1] 291 adc a, #((_atanf_a_65536_26 + 0) >> 16) + 0001A8 90 93 [ 1] 292 ldw y, x + 0001AA 90 EE 02 [ 2] 293 ldw y, (0x2, y) + 0001AD FE [ 2] 294 ldw x, (x) + 0001AE 90 89 [ 2] 295 pushw y + 0001B0 89 [ 2] 296 pushw x + 0001B1 1E 11 [ 2] 297 ldw x, (0x11, sp) + 0001B3 89 [ 2] 298 pushw x + 0001B4 1E 11 [ 2] 299 ldw x, (0x11, sp) + 0001B6 89 [ 2] 300 pushw x + 0001B7 8Ds00r00r00 [ 5] 301 callf ___fsadd + 0001BB 5B 08 [ 2] 302 addw sp, #8 + 303 ; ../atanf.c: 83: if(x<0.0) r=-r; + 0001BD 89 [ 2] 304 pushw x + 0001BE 90 89 [ 2] 305 pushw y + 0001C0 4B 00 [ 1] 306 push #0x00 + 0001C2 4B 00 [ 1] 307 push #0x00 + 0001C4 4B 00 [ 1] 308 push #0x00 + 0001C6 4B 00 [ 1] 309 push #0x00 + 0001C8 7B 1D [ 1] 310 ld a, (0x1d, sp) + 0001CA 88 [ 1] 311 push a + 0001CB 7B 1D [ 1] 312 ld a, (0x1d, sp) + 0001CD 88 [ 1] 313 push a + 0001CE 7B 1D [ 1] 314 ld a, (0x1d, sp) + 0001D0 88 [ 1] 315 push a + 0001D1 7B 1D [ 1] 316 ld a, (0x1d, sp) + 0001D3 88 [ 1] 317 push a + 0001D4 8Ds00r00r00 [ 5] 318 callf ___fslt + 0001D8 5B 08 [ 2] 319 addw sp, #8 + 0001DA 90 85 [ 2] 320 popw y + 0001DC 85 [ 2] 321 popw x + 0001DD 4D [ 1] 322 tnz a + 0001DE 27 05 [ 1] 323 jreq 00111$ + 0001E0 90 58 [ 2] 324 sllw y + 0001E2 8C [ 1] 325 ccf + 0001E3 90 56 [ 2] 326 rrcw y + 0001E5 327 00111$: + 328 ; ../atanf.c: 84: return r; + 329 ; ../atanf.c: 85: } + 0001E5 5B 0E [ 2] 330 addw sp, #14 + 0001E7 87 [ 5] 331 retf + 332 .area CODE + 333 .area CONST + 000000 334 _atanf_a_65536_26: + 000000 00 00 00 00 335 .byte #0x00, #0x00, #0x00, #0x00 ; 0.000000e+00 + 000004 3F 06 0A 92 336 .byte #0x3f, #0x06, #0x0a, #0x92 ; 5.235988e-01 + 000008 3F C9 0F DB 337 .byte #0x3f, #0xc9, #0x0f, #0xdb ; 1.570796e+00 + 00000C 3F 86 0A 92 338 .byte #0x3f, #0x86, #0x0a, #0x92 ; 1.047198e+00 + 339 .area INITIALIZER + 340 .area CABS (ABS) diff --git a/device/lib/stm8-large/atanf.rel b/device/lib/stm8-large/atanf.rel new file mode 100644 index 0000000..61fad2a --- /dev/null +++ b/device/lib/stm8-large/atanf.rel @@ -0,0 +1,131 @@ +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 1E8 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 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 00 0C 00 00 00 5B 04 1F 05 17 03 1E 05 89 1E +R 00 00 00 09 82 03 00 05 +T 00 00 19 05 89 5F 89 4B 80 4B 3F 8D +R 00 00 00 09 +T 00 00 22 00 00 00 5B 08 4D 27 1B 1E 05 89 1E 05 +R 00 00 00 09 82 03 00 02 +T 00 00 2F 89 5F 89 4B 80 4B 3F 8D +R 00 00 00 09 +T 00 00 37 00 00 00 5B 08 1F 05 17 03 AE 00 02 1F +R 00 00 00 09 82 03 00 06 +T 00 00 44 01 +R 00 00 00 09 +T 00 00 45 +R 00 00 00 09 +T 00 00 45 1E 05 89 1E 05 89 4B A3 4B 30 4B 89 4B +R 00 00 00 09 +T 00 00 52 3E 8D 00 00 00 5B 08 4D 27 68 1E 05 89 +R 00 00 00 09 82 05 00 02 +T 00 00 5F 1E 05 89 4B AF 4B 67 4B 3B 4B 3F 8D +R 00 00 00 09 +T 00 00 6B 00 00 00 5B 08 4B 00 4B 00 4B 80 4B 3F +R 00 00 00 09 82 03 00 01 +T 00 00 78 89 90 89 8D 00 00 00 5B 08 1F 0D 1E 05 +R 00 00 00 09 82 07 00 00 +T 00 00 85 89 1E 05 89 1E 11 89 90 89 8D +R 00 00 00 09 +T 00 00 8F 00 00 00 5B 08 1F 0D 17 0B 4B D7 4B B3 +R 00 00 00 09 82 03 00 04 +T 00 00 9C 4B DD 4B 3F 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 00 A7 00 00 00 5B 08 89 90 89 1E 11 89 1E 11 +R 00 00 00 09 82 03 00 04 +T 00 00 B4 89 8D 00 00 00 5B 08 1F 05 17 03 1E 01 +R 00 00 00 09 82 05 00 06 +T 00 00 C1 5C 1F 01 +R 00 00 00 09 +T 00 00 C4 +R 00 00 00 09 +T 00 00 C4 1E 05 89 1E 05 89 8D 00 00 00 5B 04 4B +R 00 00 00 09 82 0A 00 05 +T 00 00 D1 00 4B 00 4B 80 4B 39 89 90 89 8D +R 00 00 00 09 +T 00 00 DC 00 00 00 5B 08 6B 0E 27 0C 16 05 17 0D +R 00 00 00 09 82 03 00 02 +T 00 00 E9 16 03 17 0B AC 00 01 8C +R 00 00 00 09 80 08 00 09 +T 00 00 F1 +R 00 00 00 09 +T 00 00 F1 1E 05 89 1E 05 89 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 00 FE 00 00 00 5B 08 1F 09 17 07 1E 09 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 0B 09 89 4B 91 4B 86 4B 50 4B BD 8D +R 00 00 00 09 +T 00 01 16 00 00 00 5B 08 4B F6 4B 10 4B F1 4B BE +R 00 00 00 09 82 03 00 01 +T 00 01 23 89 90 89 8D 00 00 00 5B 08 1F 0D 1E 09 +R 00 00 00 09 82 07 00 04 +T 00 01 30 89 1E 09 89 1E 11 89 90 89 8D +R 00 00 00 09 +T 00 01 3A 00 00 00 5B 08 1F 0D 1E 05 89 1E 05 89 +R 00 00 00 09 82 03 00 01 +T 00 01 47 1E 11 89 90 89 8D 00 00 00 5B 08 1F 0D +R 00 00 00 09 82 09 00 01 +T 00 01 54 17 0B 4B D3 4B CC 4B B4 4B 3F 1E 0D 89 +R 00 00 00 09 +T 00 01 61 1E 0D 89 8D 00 00 00 5B 08 89 90 89 1E +R 00 00 00 09 82 07 00 04 +T 00 01 6E 11 89 1E 11 89 8D 00 00 00 5B 08 89 90 +R 00 00 00 09 82 09 00 06 +T 00 01 7B 89 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 01 83 00 00 00 5B 08 1F 0D 17 0B +R 00 00 00 09 82 03 00 04 +T 00 01 8C +R 00 00 00 09 +T 00 01 8C 1E 01 A3 00 01 2D 0B 16 0D 1E 0B 58 8C +R 00 00 00 09 +T 00 01 99 56 17 0D 1F 0B +R 00 00 00 09 +T 00 01 9E +R 00 00 00 09 +T 00 01 9E 1E 01 58 58 1C 00 00 4F A9 00 00 00 90 +R 00 00 00 09 00 08 00 07 F3 01 0C 00 07 +T 00 01 A9 93 90 EE 02 FE 90 89 89 1E 11 89 1E 11 +R 00 00 00 09 +T 00 01 B6 89 8D 00 00 00 5B 08 89 90 89 4B 00 4B +R 00 00 00 09 82 05 00 04 +T 00 01 C3 00 4B 00 4B 00 7B 1D 88 7B 1D 88 7B 1D +R 00 00 00 09 +T 00 01 D0 88 7B 1D 88 8D 00 00 00 5B 08 90 85 85 +R 00 00 00 09 82 08 00 02 +T 00 01 DD 4D 27 05 90 58 8C 90 56 +R 00 00 00 09 +T 00 01 E5 +R 00 00 00 09 +T 00 01 E5 5B 0E 87 +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-large/atanf.sym b/device/lib/stm8-large/atanf.sym new file mode 100644 index 0000000..aa83852 --- /dev/null +++ b/device/lib/stm8-large/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 1E8 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/atoi.asm b/device/lib/stm8-large/atoi.asm new file mode 100644 index 0000000..af5aa3a --- /dev/null +++ b/device/lib/stm8-large/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, (0x0b, 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 (0x0b, 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 (0x0b, sp), y +; ../atoi.c: 47: while (isdigit (*nptr)) +00129$: + ldw y, (0x0b, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/atoi.lst b/device/lib/stm8-large/atoi.lst new file mode 100644 index 0000000..f6c7c4a --- /dev/null +++ b/device/lib/stm8-large/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 0B [ 2] 59 ldw y, (0x0b, 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 0B [ 2] 77 ldw (0x0b, 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 0B [ 2] 96 ldw (0x0b, sp), y + 97 ; ../atoi.c: 47: while (isdigit (*nptr)) + 000034 98 00129$: + 000034 16 0B [ 2] 99 ldw y, (0x0b, 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 87 [ 5] 141 retf + 142 .area CODE + 143 .area CONST + 144 .area INITIALIZER + 145 .area CABS (ABS) diff --git a/device/lib/stm8-large/atoi.rel b/device/lib/stm8-large/atoi.rel new file mode 100644 index 0000000..75f009f --- /dev/null +++ b/device/lib/stm8-large/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 0B +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 0B 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 0B +R 00 00 00 09 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 16 0B 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/atoi.sym b/device/lib/stm8-large/atoi.sym new file mode 100644 index 0000000..dd8a1af --- /dev/null +++ b/device/lib/stm8-large/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-large/atol.asm b/device/lib/stm8-large/atol.asm new file mode 100644 index 0000000..e62e190 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0d, 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 (0x0d, 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 (0x0d, sp), x +; ../atol.c: 47: while (isdigit (*nptr)) +00129$: + ldw y, (0x0d, 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 + callf __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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/atol.lst b/device/lib/stm8-large/atol.lst new file mode 100644 index 0000000..bc7afe6 --- /dev/null +++ b/device/lib/stm8-large/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 0D [ 2] 60 ldw y, (0x0d, 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 0D [ 2] 80 ldw (0x0d, 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 0D [ 2] 98 ldw (0x0d, sp), x + 99 ; ../atol.c: 47: while (isdigit (*nptr)) + 000038 100 00129$: + 000038 16 0D [ 2] 101 ldw y, (0x0d, 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 3F [ 1] 110 jrc 00109$ + 000047 7B 07 [ 1] 111 ld a, (0x07, sp) + 000049 A1 39 [ 1] 112 cp a, #0x39 + 00004B 22 39 [ 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 8Ds00r00r00 [ 5] 123 callf __mullong + 00005D 5B 08 [ 2] 124 addw sp, #8 + 00005F 1F 03 [ 2] 125 ldw (0x03, sp), x + 000061 17 01 [ 2] 126 ldw (0x01, sp), y + 000063 1E 08 [ 2] 127 ldw x, (0x08, sp) + 000065 5C [ 1] 128 incw x + 000066 1F 08 [ 2] 129 ldw (0x08, sp), x + 000068 5F [ 1] 130 clrw x + 000069 7B 06 [ 1] 131 ld a, (0x06, sp) + 00006B 97 [ 1] 132 ld xl, a + 00006C 1D 00 30 [ 2] 133 subw x, #0x0030 + 00006F 51 [ 1] 134 exgw x, y + 000070 5F [ 1] 135 clrw x + 000071 90 5D [ 2] 136 tnzw y + 000073 2A 01 [ 1] 137 jrpl 00177$ + 000075 5A [ 2] 138 decw x + 000076 139 00177$: + 000076 72 F9 03 [ 2] 140 addw y, (0x03, sp) + 000079 9F [ 1] 141 ld a, xl + 00007A 19 02 [ 1] 142 adc a, (0x02, sp) + 00007C 02 [ 1] 143 rlwa x + 00007D 19 01 [ 1] 144 adc a, (0x01, sp) + 00007F 95 [ 1] 145 ld xh, a + 000080 17 03 [ 2] 146 ldw (0x03, sp), y + 000082 1F 01 [ 2] 147 ldw (0x01, sp), x + 000084 20 B6 [ 2] 148 jra 00107$ + 000086 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. + 000086 0D 05 [ 1] 151 tnz (0x05, sp) + 000088 27 10 [ 1] 152 jreq 00120$ + 00008A 16 03 [ 2] 153 ldw y, (0x03, sp) + 00008C 90 50 [ 2] 154 negw y + 00008E 1E 01 [ 2] 155 ldw x, (0x01, sp) + 000090 24 01 [ 1] 156 jrnc 00179$ + 000092 5C [ 1] 157 incw x + 000093 158 00179$: + 000093 50 [ 2] 159 negw x + 000094 17 08 [ 2] 160 ldw (0x08, sp), y + 000096 1F 06 [ 2] 161 ldw (0x06, sp), x + 000098 20 08 [ 2] 162 jra 00121$ + 00009A 163 00120$: + 00009A 16 03 [ 2] 164 ldw y, (0x03, sp) + 00009C 17 08 [ 2] 165 ldw (0x08, sp), y + 00009E 16 01 [ 2] 166 ldw y, (0x01, sp) + 0000A0 17 06 [ 2] 167 ldw (0x06, sp), y + 0000A2 168 00121$: + 0000A2 1E 08 [ 2] 169 ldw x, (0x08, sp) + 0000A4 16 06 [ 2] 170 ldw y, (0x06, sp) + 171 ; ../atol.c: 51: } + 0000A6 5B 09 [ 2] 172 addw sp, #9 + 0000A8 87 [ 5] 173 retf + 174 .area CODE + 175 .area CONST + 176 .area INITIALIZER + 177 .area CABS (ABS) diff --git a/device/lib/stm8-large/atol.rel b/device/lib/stm8-large/atol.rel new file mode 100644 index 0000000..5bdc8ab --- /dev/null +++ b/device/lib/stm8-large/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 A9 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 0D 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 0D 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 0D +R 00 00 00 09 +T 00 00 38 +R 00 00 00 09 +T 00 00 38 16 0D 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 3F 7B 07 +R 00 00 00 09 +T 00 00 49 A1 39 22 39 1E 03 89 1E 03 89 4B 0A 5F +R 00 00 00 09 +T 00 00 56 89 4B 00 8D 00 00 00 5B 08 1F 03 17 01 +R 00 00 00 09 82 07 00 01 +T 00 00 63 1E 08 5C 1F 08 5F 7B 06 97 1D 00 30 51 +R 00 00 00 09 +T 00 00 70 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 76 +R 00 00 00 09 +T 00 00 76 72 F9 03 9F 19 02 02 19 01 95 17 03 1F +R 00 00 00 09 +T 00 00 83 01 20 B6 +R 00 00 00 09 +T 00 00 86 +R 00 00 00 09 +T 00 00 86 0D 05 27 10 16 03 90 50 1E 01 24 01 5C +R 00 00 00 09 +T 00 00 93 +R 00 00 00 09 +T 00 00 93 50 17 08 1F 06 20 08 +R 00 00 00 09 +T 00 00 9A +R 00 00 00 09 +T 00 00 9A 16 03 17 08 16 01 17 06 +R 00 00 00 09 +T 00 00 A2 +R 00 00 00 09 +T 00 00 A2 1E 08 16 06 5B 09 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/atol.sym b/device/lib/stm8-large/atol.sym new file mode 100644 index 0000000..ac92aa8 --- /dev/null +++ b/device/lib/stm8-large/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 A9 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/atoll.asm b/device/lib/stm8-large/atoll.asm new file mode 100644 index 0000000..c64dace --- /dev/null +++ b/device/lib/stm8-large/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-large/atoll.lst b/device/lib/stm8-large/atoll.lst new file mode 100644 index 0000000..fe5b8cd --- /dev/null +++ b/device/lib/stm8-large/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-large/atoll.rel b/device/lib/stm8-large/atoll.rel new file mode 100644 index 0000000..23c8fda --- /dev/null +++ b/device/lib/stm8-large/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-large/atoll.sym b/device/lib/stm8-large/atoll.sym new file mode 100644 index 0000000..141f02b --- /dev/null +++ b/device/lib/stm8-large/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-large/bsearch.asm b/device/lib/stm8-large/bsearch.asm new file mode 100644 index 0000000..26ed868 --- /dev/null +++ b/device/lib/stm8-large/bsearch.asm @@ -0,0 +1,124 @@ +;-------------------------------------------------------- +; 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, (0x10, sp) + ldw (0x01, sp), x +00109$: +; ../bsearch.c: 35: const char *middle = left + nmemb / 2 * size; + ldw x, (0x12, sp) + jreq 00107$ + srlw x + ldw (0x03, sp), x + ldw x, (0x14, sp) + pushw x + ldw x, (0x05, sp) + pushw x + callf __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, (0x10, sp) + pushw x + push #(00134$) + push #(00134$ >> 8) + push #(00134$ >> 16) + ldw x, (0x1e, sp) + pushw x + ld a, (0x1f, sp) + push a + retf +00134$: + 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 (0x12, 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, (0x14, sp) + ldw (0x01, sp), x +; ../bsearch.c: 43: nmemb = (nmemb - 1) / 2; + ldw x, (0x12, sp) + decw x + srlw x + ldw (0x12, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/bsearch.lst b/device/lib/stm8-large/bsearch.lst new file mode 100644 index 0000000..48dff07 --- /dev/null +++ b/device/lib/stm8-large/bsearch.lst @@ -0,0 +1,124 @@ + 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 10 [ 2] 56 ldw x, (0x10, 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 12 [ 2] 60 ldw x, (0x12, sp) + 000008 27 4E [ 1] 61 jreq 00107$ + 00000A 54 [ 2] 62 srlw x + 00000B 1F 03 [ 2] 63 ldw (0x03, sp), x + 00000D 1E 14 [ 2] 64 ldw x, (0x14, sp) + 00000F 89 [ 2] 65 pushw x + 000010 1E 05 [ 2] 66 ldw x, (0x05, sp) + 000012 89 [ 2] 67 pushw x + 000013 8Ds00r00r00 [ 5] 68 callf __mulint + 000017 5B 04 [ 2] 69 addw sp, #4 + 000019 72 FB 01 [ 2] 70 addw x, (0x01, sp) + 71 ; ../bsearch.c: 36: int c = (*compar)(key, middle); + 00001C 1F 05 [ 2] 72 ldw (0x05, sp), x + 00001E 1F 07 [ 2] 73 ldw (0x07, sp), x + 000020 89 [ 2] 74 pushw x + 000021 1E 10 [ 2] 75 ldw x, (0x10, sp) + 000023 89 [ 2] 76 pushw x + 000024 4Br31 [ 1] 77 push #(00134$) + 000026 4Bs00 [ 1] 78 push #(00134$ >> 8) + 000028 4Bs00 [ 1] 79 push #(00134$ >> 16) + 00002A 1E 1E [ 2] 80 ldw x, (0x1e, sp) + 00002C 89 [ 2] 81 pushw x + 00002D 7B 1F [ 1] 82 ld a, (0x1f, sp) + 00002F 88 [ 1] 83 push a + 000030 87 [ 5] 84 retf + 000031 85 00134$: + 000031 5B 04 [ 2] 86 addw sp, #4 + 000033 1F 09 [ 2] 87 ldw (0x09, sp), x + 88 ; ../bsearch.c: 38: if(c < 0) + 000035 0D 09 [ 1] 89 tnz (0x09, sp) + 000037 2A 06 [ 1] 90 jrpl 00105$ + 91 ; ../bsearch.c: 39: nmemb = nmemb / 2; + 000039 16 03 [ 2] 92 ldw y, (0x03, sp) + 00003B 17 12 [ 2] 93 ldw (0x12, sp), y + 00003D 20 C7 [ 2] 94 jra 00109$ + 00003F 95 00105$: + 96 ; ../bsearch.c: 40: else if(c > 0) + 00003F 1E 09 [ 2] 97 ldw x, (0x09, sp) + 000041 A3 00 00 [ 2] 98 cpw x, #0x0000 + 000044 2D 0F [ 1] 99 jrsle 00102$ + 100 ; ../bsearch.c: 42: left = middle + size; + 000046 1E 05 [ 2] 101 ldw x, (0x05, sp) + 000048 72 FB 14 [ 2] 102 addw x, (0x14, sp) + 00004B 1F 01 [ 2] 103 ldw (0x01, sp), x + 104 ; ../bsearch.c: 43: nmemb = (nmemb - 1) / 2; + 00004D 1E 12 [ 2] 105 ldw x, (0x12, sp) + 00004F 5A [ 2] 106 decw x + 000050 54 [ 2] 107 srlw x + 000051 1F 12 [ 2] 108 ldw (0x12, sp), x + 000053 20 B1 [ 2] 109 jra 00109$ + 000055 110 00102$: + 111 ; ../bsearch.c: 46: return(middle); + 000055 1E 07 [ 2] 112 ldw x, (0x07, sp) + 113 ; ../bsearch.c: 49: return(0); + 000057 21 114 .byte 0x21 + 000058 115 00107$: + 000058 5F [ 1] 116 clrw x + 000059 117 00111$: + 118 ; ../bsearch.c: 50: } + 000059 5B 0A [ 2] 119 addw sp, #10 + 00005B 87 [ 5] 120 retf + 121 .area CODE + 122 .area CONST + 123 .area INITIALIZER + 124 .area CABS (ABS) diff --git a/device/lib/stm8-large/bsearch.rel b/device/lib/stm8-large/bsearch.rel new file mode 100644 index 0000000..26f194c --- /dev/null +++ b/device/lib/stm8-large/bsearch.rel @@ -0,0 +1,56 @@ +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 5C 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 10 1F 01 +R 00 00 00 09 +T 00 00 06 +R 00 00 00 09 +T 00 00 06 1E 12 27 4E 54 1F 03 1E 14 89 1E 05 89 +R 00 00 00 09 +T 00 00 13 8D 00 00 00 5B 04 72 FB 01 1F 05 1F 07 +R 00 00 00 09 82 04 00 00 +T 00 00 20 89 1E 10 89 4B 00 00 31 4B 00 00 31 4B +R 00 00 00 09 F1 01 08 00 09 F1 81 0C 00 09 +T 00 00 29 00 00 31 1E 1E 89 7B 1F 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 00 31 +R 00 00 00 09 +T 00 00 31 5B 04 1F 09 0D 09 2A 06 16 03 17 12 20 +R 00 00 00 09 +T 00 00 3E C7 +R 00 00 00 09 +T 00 00 3F +R 00 00 00 09 +T 00 00 3F 1E 09 A3 00 00 2D 0F 1E 05 72 FB 14 1F +R 00 00 00 09 +T 00 00 4C 01 1E 12 5A 54 1F 12 20 B1 +R 00 00 00 09 +T 00 00 55 +R 00 00 00 09 +T 00 00 55 1E 07 21 +R 00 00 00 09 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 5F +R 00 00 00 09 +T 00 00 59 +R 00 00 00 09 +T 00 00 59 5B 0A 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/bsearch.sym b/device/lib/stm8-large/bsearch.sym new file mode 100644 index 0000000..1ef62ca --- /dev/null +++ b/device/lib/stm8-large/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 5C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/btowc.asm b/device/lib/stm8-large/btowc.asm new file mode 100644 index 0000000..84037c8 --- /dev/null +++ b/device/lib/stm8-large/btowc.asm @@ -0,0 +1,76 @@ +;-------------------------------------------------------- +; 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 (0x05, sp) + jrpl 00102$ +; ../btowc.c: 38: return WEOF; + clrw x + decw x + ldw y, x + jra 00103$ +00102$: +; ../btowc.c: 39: return c; + ldw x, (0x04, sp) + clrw y + tnzw x + jrpl 00111$ + decw y +00111$: +00103$: +; ../btowc.c: 40: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/btowc.lst b/device/lib/stm8-large/btowc.lst new file mode 100644 index 0000000..e2462ba --- /dev/null +++ b/device/lib/stm8-large/btowc.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 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 05 [ 1] 55 tnz (0x05, sp) + 000002 2A 06 [ 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 20 09 [ 2] 61 jra 00103$ + 00000A 62 00102$: + 63 ; ../btowc.c: 39: return c; + 00000A 1E 04 [ 2] 64 ldw x, (0x04, sp) + 00000C 90 5F [ 1] 65 clrw y + 00000E 5D [ 2] 66 tnzw x + 00000F 2A 02 [ 1] 67 jrpl 00111$ + 000011 90 5A [ 2] 68 decw y + 000013 69 00111$: + 000013 70 00103$: + 71 ; ../btowc.c: 40: } + 000013 87 [ 5] 72 retf + 73 .area CODE + 74 .area CONST + 75 .area INITIALIZER + 76 .area CABS (ABS) diff --git a/device/lib/stm8-large/btowc.rel b/device/lib/stm8-large/btowc.rel new file mode 100644 index 0000000..4497e3e --- /dev/null +++ b/device/lib/stm8-large/btowc.rel @@ -0,0 +1,31 @@ +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 14 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 05 2A 06 5F 5A 90 93 20 09 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 1E 04 90 5F 5D 2A 02 90 5A +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/btowc.sym b/device/lib/stm8-large/btowc.sym new file mode 100644 index 0000000..7597e19 --- /dev/null +++ b/device/lib/stm8-large/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 14 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/c16rtomb.asm b/device/lib/stm8-large/c16rtomb.asm new file mode 100644 index 0000000..c56c8c2 --- /dev/null +++ b/device/lib/stm8-large/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, (0x10, sp) + jrne 00102$ +; ../c16rtomb.c: 42: s = buf; + ldw x, sp + incw x + ldw (0x10, sp), x +00102$: +; ../c16rtomb.c: 44: if(!ps) + ldw x, (0x14, sp) + jrne 00104$ +; ../c16rtomb.c: 45: ps = &sps; + ldw x, #(_c16rtomb_sps_65536_36 + 0) + ldw (0x14, sp), x +00104$: +; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0; + ldw y, (0x14, 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, (0x12, 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 + jpf 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, (0x12, sp) + cpw x, #0xdc00 + jrnc 00169$ + jpf 00121$ +00169$: + ldw x, (0x12, 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, (0x12, 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, (0x12, sp) + cpw x, #0xd7ff + jrc 00110$ + cpw x, #0xe000 + jrc 00111$ +00110$: +; ../c16rtomb.c: 64: codepoint = c16; + ldw y, (0x12, sp) + clrw x + ldw (0x0b, sp), y + ldw (0x09, sp), x + jra 00120$ +00111$: +; ../c16rtomb.c: 67: if(c16 > 0xdbff) + ldw x, (0x12, sp) + cpw x, #0xdbff + jrugt 00121$ +; ../c16rtomb.c: 70: ps->c[1] = c16 & 0xff; + ld a, (0x13, sp) + ldw x, (0x05, sp) + ld (x), a +; ../c16rtomb.c: 71: ps->c[2] = c16 >> 8; + ld a, (0x12, 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, (0x14, sp) + pushw x + callf _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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/c16rtomb.lst b/device/lib/stm8-large/c16rtomb.lst new file mode 100644 index 0000000..c7106e4 --- /dev/null +++ b/device/lib/stm8-large/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 10 [ 2] 59 ldw x, (0x10, 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 10 [ 2] 64 ldw (0x10, sp), x + 00000A 65 00102$: + 66 ; ../c16rtomb.c: 44: if(!ps) + 00000A 1E 14 [ 2] 67 ldw x, (0x14, 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 14 [ 2] 71 ldw (0x14, sp), x + 000013 72 00104$: + 73 ; ../c16rtomb.c: 49: ps->c[1] = ps->c[2] = 0; + 000013 16 14 [ 2] 74 ldw y, (0x14, 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 12 [ 2] 83 ldw x, (0x12, sp) + 000020 26 0F [ 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 ACs00r00rB8 [ 2] 94 jpf 00120$ + 000031 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 + 000031 1E 05 [ 2] 97 ldw x, (0x05, sp) + 000033 F6 [ 1] 98 ld a, (x) + 000034 90 97 [ 1] 99 ld yl, a + 000036 4D [ 1] 100 tnz a + 000037 26 05 [ 1] 101 jrne 00114$ + 000039 1E 07 [ 2] 102 ldw x, (0x07, sp) + 00003B F6 [ 1] 103 ld a, (x) + 00003C 27 4B [ 1] 104 jreq 00115$ + 00003E 105 00114$: + 106 ; ../c16rtomb.c: 56: if(c16 < 0xdc00 || c16 > 0xdfff) + 00003E 1E 12 [ 2] 107 ldw x, (0x12, sp) + 000040 A3 DC 00 [ 2] 108 cpw x, #0xdc00 + 000043 24 04 [ 1] 109 jrnc 00169$ + 000045 ACs00r00rC9 [ 2] 110 jpf 00121$ + 000049 111 00169$: + 000049 1E 12 [ 2] 112 ldw x, (0x12, sp) + 00004B A3 DF FF [ 2] 113 cpw x, #0xdfff + 00004E 22 79 [ 1] 114 jrugt 00121$ + 115 ; ../c16rtomb.c: 59: high_surrogate = ps->c[1] + (ps->c[2] << 8); + 000050 61 [ 1] 116 exg a, yl + 000051 6B 0A [ 1] 117 ld (0x0a, sp), a + 000053 61 [ 1] 118 exg a, yl + 000054 0F 09 [ 1] 119 clr (0x09, sp) + 000056 16 07 [ 2] 120 ldw y, (0x07, sp) + 000058 90 F6 [ 1] 121 ld a, (y) + 00005A 95 [ 1] 122 ld xh, a + 00005B 0F 0C [ 1] 123 clr (0x0c, sp) + 00005D 7B 0C [ 1] 124 ld a, (0x0c, sp) + 00005F 97 [ 1] 125 ld xl, a + 000060 72 FB 09 [ 2] 126 addw x, (0x09, sp) + 127 ; ../c16rtomb.c: 60: ps->c[1] = ps->c[2] = 0; + 000063 16 07 [ 2] 128 ldw y, (0x07, sp) + 000065 90 7F [ 1] 129 clr (y) + 000067 16 05 [ 2] 130 ldw y, (0x05, sp) + 000069 90 7F [ 1] 131 clr (y) + 132 ; ../c16rtomb.c: 61: codepoint = (high_surrogate << 10) - (0xd800 << 10) + c16 - 0xdc00 + 0x10000; + 00006B 4F [ 1] 133 clr a + 00006C 02 [ 1] 134 rlwa x + 00006D 58 [ 2] 135 sllw x + 00006E 58 [ 2] 136 sllw x + 00006F 72 FB 12 [ 2] 137 addw x, (0x12, sp) + 000072 1F 0B [ 2] 138 ldw (0x0b, sp), x + 000074 0F 0A [ 1] 139 clr (0x0a, sp) + 000076 0F 09 [ 1] 140 clr (0x09, sp) + 000078 1E 0B [ 2] 141 ldw x, (0x0b, sp) + 00007A 1C 24 00 [ 2] 142 addw x, #0x2400 + 00007D 16 09 [ 2] 143 ldw y, (0x09, sp) + 00007F 24 02 [ 1] 144 jrnc 00171$ + 000081 90 5C [ 1] 145 incw y + 000083 146 00171$: + 000083 1F 0B [ 2] 147 ldw (0x0b, sp), x + 000085 17 09 [ 2] 148 ldw (0x09, sp), y + 000087 20 2F [ 2] 149 jra 00120$ + 000089 150 00115$: + 151 ; ../c16rtomb.c: 63: else if(c16 < 0xd7ff || c16 >= 0xe000) // Basic multilingual plane. + 000089 1E 12 [ 2] 152 ldw x, (0x12, sp) + 00008B A3 D7 FF [ 2] 153 cpw x, #0xd7ff + 00008E 25 05 [ 1] 154 jrc 00110$ + 000090 A3 E0 00 [ 2] 155 cpw x, #0xe000 + 000093 25 09 [ 1] 156 jrc 00111$ + 000095 157 00110$: + 158 ; ../c16rtomb.c: 64: codepoint = c16; + 000095 16 12 [ 2] 159 ldw y, (0x12, sp) + 000097 5F [ 1] 160 clrw x + 000098 17 0B [ 2] 161 ldw (0x0b, sp), y + 00009A 1F 09 [ 2] 162 ldw (0x09, sp), x + 00009C 20 1A [ 2] 163 jra 00120$ + 00009E 164 00111$: + 165 ; ../c16rtomb.c: 67: if(c16 > 0xdbff) + 00009E 1E 12 [ 2] 166 ldw x, (0x12, sp) + 0000A0 A3 DB FF [ 2] 167 cpw x, #0xdbff + 0000A3 22 24 [ 1] 168 jrugt 00121$ + 169 ; ../c16rtomb.c: 70: ps->c[1] = c16 & 0xff; + 0000A5 7B 13 [ 1] 170 ld a, (0x13, sp) + 0000A7 1E 05 [ 2] 171 ldw x, (0x05, sp) + 0000A9 F7 [ 1] 172 ld (x), a + 173 ; ../c16rtomb.c: 71: ps->c[2] = c16 >> 8; + 0000AA 7B 12 [ 1] 174 ld a, (0x12, sp) + 0000AC 6B 0C [ 1] 175 ld (0x0c, sp), a + 0000AE 0F 0B [ 1] 176 clr (0x0b, sp) + 0000B0 7B 0C [ 1] 177 ld a, (0x0c, sp) + 0000B2 1E 07 [ 2] 178 ldw x, (0x07, sp) + 0000B4 F7 [ 1] 179 ld (x), a + 180 ; ../c16rtomb.c: 72: return(0); + 0000B5 5F [ 1] 181 clrw x + 0000B6 20 19 [ 2] 182 jra 00122$ + 0000B8 183 00120$: + 184 ; ../c16rtomb.c: 75: return(wctomb(s, codepoint)); + 0000B8 1E 0B [ 2] 185 ldw x, (0x0b, sp) + 0000BA 89 [ 2] 186 pushw x + 0000BB 1E 0B [ 2] 187 ldw x, (0x0b, sp) + 0000BD 89 [ 2] 188 pushw x + 0000BE 1E 14 [ 2] 189 ldw x, (0x14, sp) + 0000C0 89 [ 2] 190 pushw x + 0000C1 8Ds00r00r00 [ 5] 191 callf _wctomb + 0000C5 5B 06 [ 2] 192 addw sp, #6 + 0000C7 20 08 [ 2] 193 jra 00122$ + 194 ; ../c16rtomb.c: 77: eilseq: + 0000C9 195 00121$: + 196 ; ../c16rtomb.c: 78: errno = EILSEQ; + 0000C9 AE 00 54 [ 2] 197 ldw x, #0x0054 + 0000CC CFu00u00 [ 2] 198 ldw _errno+0, x + 199 ; ../c16rtomb.c: 79: return(-1); + 0000CF 5F [ 1] 200 clrw x + 0000D0 5A [ 2] 201 decw x + 0000D1 202 00122$: + 203 ; ../c16rtomb.c: 80: } + 0000D1 5B 0C [ 2] 204 addw sp, #12 + 0000D3 87 [ 5] 205 retf + 206 .area CODE + 207 .area CONST + 208 .area INITIALIZER + 209 .area CABS (ABS) diff --git a/device/lib/stm8-large/c16rtomb.rel b/device/lib/stm8-large/c16rtomb.rel new file mode 100644 index 0000000..bd2a742 --- /dev/null +++ b/device/lib/stm8-large/c16rtomb.rel @@ -0,0 +1,93 @@ +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 D4 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 10 26 04 96 5C 1F 10 +R 00 00 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 1E 14 26 05 AE 00 00 1F 14 +R 00 00 00 09 00 08 00 01 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 16 14 93 5C 1F 05 93 5C 5C 1F 07 1E 12 +R 00 00 00 09 +T 00 00 20 26 0F 1E 07 7F 1E 05 7F 5F 1F 0B 1F 09 +R 00 00 00 09 +T 00 00 2D AC 00 00 B8 +R 00 00 00 09 80 04 00 09 +T 00 00 31 +R 00 00 00 09 +T 00 00 31 1E 05 F6 90 97 4D 26 05 1E 07 F6 27 4B +R 00 00 00 09 +T 00 00 3E +R 00 00 00 09 +T 00 00 3E 1E 12 A3 DC 00 24 04 AC +R 00 00 00 09 +T 00 00 46 00 00 C9 +R 00 00 00 09 80 03 00 09 +T 00 00 49 +R 00 00 00 09 +T 00 00 49 1E 12 A3 DF FF 22 79 61 6B 0A 61 0F 09 +R 00 00 00 09 +T 00 00 56 16 07 90 F6 95 0F 0C 7B 0C 97 72 FB 09 +R 00 00 00 09 +T 00 00 63 16 07 90 7F 16 05 90 7F 4F 02 58 58 72 +R 00 00 00 09 +T 00 00 70 FB 12 1F 0B 0F 0A 0F 09 1E 0B 1C 24 00 +R 00 00 00 09 +T 00 00 7D 16 09 24 02 90 5C +R 00 00 00 09 +T 00 00 83 +R 00 00 00 09 +T 00 00 83 1F 0B 17 09 20 2F +R 00 00 00 09 +T 00 00 89 +R 00 00 00 09 +T 00 00 89 1E 12 A3 D7 FF 25 05 A3 E0 00 25 09 +R 00 00 00 09 +T 00 00 95 +R 00 00 00 09 +T 00 00 95 16 12 5F 17 0B 1F 09 20 1A +R 00 00 00 09 +T 00 00 9E +R 00 00 00 09 +T 00 00 9E 1E 12 A3 DB FF 22 24 7B 13 1E 05 F7 7B +R 00 00 00 09 +T 00 00 AB 12 6B 0C 0F 0B 7B 0C 1E 07 F7 5F 20 19 +R 00 00 00 09 +T 00 00 B8 +R 00 00 00 09 +T 00 00 B8 1E 0B 89 1E 0B 89 1E 14 89 8D +R 00 00 00 09 +T 00 00 C2 00 00 00 5B 06 20 08 +R 00 00 00 09 82 03 00 02 +T 00 00 C9 +R 00 00 00 09 +T 00 00 C9 AE 00 54 CF 00 00 5F 5A +R 00 00 00 09 12 07 00 00 +T 00 00 D1 +R 00 00 00 09 +T 00 00 D1 5B 0C 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/c16rtomb.sym b/device/lib/stm8-large/c16rtomb.sym new file mode 100644 index 0000000..f262f5f --- /dev/null +++ b/device/lib/stm8-large/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 D4 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/c16stombs.asm b/device/lib/stm8-large/c16stombs.asm new file mode 100644 index 0000000..fd5b3fd --- /dev/null +++ b/device/lib/stm8-large/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, (0x18, 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 (0x18, 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 + jpf 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 (0x18, 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, (0x1a, sp) + jrnc 00118$ +; ../c16stombs.c: 70: *s = 0; + ldw x, (0x16, 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 + callf _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, (0x1a, sp) + jrugt 00118$ +; ../c16stombs.c: 82: memcpy(s, b, l); + ldw y, (0x0d, sp) + ldw x, (0x16, sp) + ld a, (0x10, sp) + push a + ld a, (0x10, sp) + push a + pushw y + pushw x + callf ___memcpy + addw sp, #6 +; ../c16stombs.c: 83: s += l; + ldw x, (0x16, sp) + addw x, (0x0f, sp) + ldw (0x16, sp), x +; ../c16stombs.c: 84: m += l; + ldw x, (0x11, sp) + ldw (0x09, sp), x + jpf 00119$ +00118$: +; ../c16stombs.c: 87: return(m); + ldw x, (0x09, sp) +00121$: +; ../c16stombs.c: 88: } + addw sp, #18 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/c16stombs.lst b/device/lib/stm8-large/c16stombs.lst new file mode 100644 index 0000000..dd8c6fd --- /dev/null +++ b/device/lib/stm8-large/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 18 [ 2] 63 ldw y, (0x18, 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 18 [ 2] 88 ldw (0x18, sp), x + 00002B 20 4D [ 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 06 [ 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 ACs00r00rDB [ 2] 105 jpf 00121$ + 000047 106 00102$: + 107 ; ../c16stombs.c: 63: codepoint = ((unsigned long)(c16s[0]) << 10) -(0xd800ul << 10) + (unsigned long)(c16s[1]) - 0xdc00ul + 0x10000ul; + 000047 A6 0A [ 1] 108 ld a, #0x0a + 000049 109 00168$: + 000049 08 12 [ 1] 110 sll (0x12, sp) + 00004B 09 11 [ 1] 111 rlc (0x11, sp) + 00004D 09 10 [ 1] 112 rlc (0x10, sp) + 00004F 09 0F [ 1] 113 rlc (0x0f, sp) + 000051 4A [ 1] 114 dec a + 000052 26 F5 [ 1] 115 jrne 00168$ + 000054 1F 03 [ 2] 116 ldw (0x03, sp), x + 000056 5F [ 1] 117 clrw x + 000057 16 03 [ 2] 118 ldw y, (0x03, sp) + 000059 72 F9 11 [ 2] 119 addw y, (0x11, sp) + 00005C 9F [ 1] 120 ld a, xl + 00005D 19 10 [ 1] 121 adc a, (0x10, sp) + 00005F 88 [ 1] 122 push a + 000060 9E [ 1] 123 ld a, xh + 000061 19 10 [ 1] 124 adc a, (0x10, sp) + 000063 95 [ 1] 125 ld xh, a + 000064 84 [ 1] 126 pop a + 000065 72 A9 24 00 [ 2] 127 addw y, #0x2400 + 000069 A9 A0 [ 1] 128 adc a, #0xa0 + 00006B 02 [ 1] 129 rlwa x + 00006C A9 FC [ 1] 130 adc a, #0xfc + 00006E 95 [ 1] 131 ld xh, a + 00006F 17 11 [ 2] 132 ldw (0x11, sp), y + 000071 1F 0F [ 2] 133 ldw (0x0f, sp), x + 134 ; ../c16stombs.c: 64: c16s += 2; + 000073 1E 0B [ 2] 135 ldw x, (0x0b, sp) + 000075 1C 00 04 [ 2] 136 addw x, #0x0004 + 000078 1F 18 [ 2] 137 ldw (0x18, sp), x + 00007A 138 00108$: + 139 ; ../c16stombs.c: 67: if(!codepoint) + 00007A 1E 11 [ 2] 140 ldw x, (0x11, sp) + 00007C 26 0F [ 1] 141 jrne 00113$ + 00007E 1E 0F [ 2] 142 ldw x, (0x0f, sp) + 000080 26 0B [ 1] 143 jrne 00113$ + 144 ; ../c16stombs.c: 69: if(m < n) + 000082 1E 09 [ 2] 145 ldw x, (0x09, sp) + 000084 13 1A [ 2] 146 cpw x, (0x1a, sp) + 000086 24 51 [ 1] 147 jrnc 00118$ + 148 ; ../c16stombs.c: 70: *s = 0; + 000088 1E 16 [ 2] 149 ldw x, (0x16, sp) + 00008A 7F [ 1] 150 clr (x) + 151 ; ../c16stombs.c: 71: break; + 00008B 20 4C [ 2] 152 jra 00118$ + 00008D 153 00113$: + 154 ; ../c16stombs.c: 74: l = wctomb(b, codepoint); + 00008D 96 [ 1] 155 ldw x, sp + 00008E 1C 00 05 [ 2] 156 addw x, #5 + 000091 1F 0D [ 2] 157 ldw (0x0d, sp), x + 000093 16 11 [ 2] 158 ldw y, (0x11, sp) + 000095 90 89 [ 2] 159 pushw y + 000097 16 11 [ 2] 160 ldw y, (0x11, sp) + 000099 90 89 [ 2] 161 pushw y + 00009B 89 [ 2] 162 pushw x + 00009C 8Ds00r00r00 [ 5] 163 callf _wctomb + 0000A0 5B 06 [ 2] 164 addw sp, #6 + 0000A2 1F 0F [ 2] 165 ldw (0x0f, sp), x + 166 ; ../c16stombs.c: 76: if(l < 0) + 0000A4 0D 0F [ 1] 167 tnz (0x0f, sp) + 0000A6 2A 04 [ 1] 168 jrpl 00115$ + 169 ; ../c16stombs.c: 77: return(-1); + 0000A8 5F [ 1] 170 clrw x + 0000A9 5A [ 2] 171 decw x + 0000AA 20 2F [ 2] 172 jra 00121$ + 0000AC 173 00115$: + 174 ; ../c16stombs.c: 79: if(m + l > n) + 0000AC 1E 0F [ 2] 175 ldw x, (0x0f, sp) + 0000AE 72 FB 09 [ 2] 176 addw x, (0x09, sp) + 0000B1 1F 11 [ 2] 177 ldw (0x11, sp), x + 0000B3 13 1A [ 2] 178 cpw x, (0x1a, sp) + 0000B5 22 22 [ 1] 179 jrugt 00118$ + 180 ; ../c16stombs.c: 82: memcpy(s, b, l); + 0000B7 16 0D [ 2] 181 ldw y, (0x0d, sp) + 0000B9 1E 16 [ 2] 182 ldw x, (0x16, sp) + 0000BB 7B 10 [ 1] 183 ld a, (0x10, sp) + 0000BD 88 [ 1] 184 push a + 0000BE 7B 10 [ 1] 185 ld a, (0x10, sp) + 0000C0 88 [ 1] 186 push a + 0000C1 90 89 [ 2] 187 pushw y + 0000C3 89 [ 2] 188 pushw x + 0000C4 8Ds00r00r00 [ 5] 189 callf ___memcpy + 0000C8 5B 06 [ 2] 190 addw sp, #6 + 191 ; ../c16stombs.c: 83: s += l; + 0000CA 1E 16 [ 2] 192 ldw x, (0x16, sp) + 0000CC 72 FB 0F [ 2] 193 addw x, (0x0f, sp) + 0000CF 1F 16 [ 2] 194 ldw (0x16, sp), x + 195 ; ../c16stombs.c: 84: m += l; + 0000D1 1E 11 [ 2] 196 ldw x, (0x11, sp) + 0000D3 1F 09 [ 2] 197 ldw (0x09, sp), x + 0000D5 ACs00r00r05 [ 2] 198 jpf 00119$ + 0000D9 199 00118$: + 200 ; ../c16stombs.c: 87: return(m); + 0000D9 1E 09 [ 2] 201 ldw x, (0x09, sp) + 0000DB 202 00121$: + 203 ; ../c16stombs.c: 88: } + 0000DB 5B 12 [ 2] 204 addw sp, #18 + 0000DD 87 [ 5] 205 retf + 206 .area CODE + 207 .area CONST + 208 .area INITIALIZER + 209 .area CABS (ABS) diff --git a/device/lib/stm8-large/c16stombs.rel b/device/lib/stm8-large/c16stombs.rel new file mode 100644 index 0000000..e877590 --- /dev/null +++ b/device/lib/stm8-large/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 DE 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 18 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 18 20 4D +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 06 +R 00 00 00 09 +T 00 00 41 +R 00 00 00 09 +T 00 00 41 5F 5A AC 00 00 DB +R 00 00 00 09 80 06 00 09 +T 00 00 47 +R 00 00 00 09 +T 00 00 47 A6 0A +R 00 00 00 09 +T 00 00 49 +R 00 00 00 09 +T 00 00 49 08 12 09 11 09 10 09 0F 4A 26 F5 1F 03 +R 00 00 00 09 +T 00 00 56 5F 16 03 72 F9 11 9F 19 10 88 9E 19 10 +R 00 00 00 09 +T 00 00 63 95 84 72 A9 24 00 A9 A0 02 A9 FC 95 17 +R 00 00 00 09 +T 00 00 70 11 1F 0F 1E 0B 1C 00 04 1F 18 +R 00 00 00 09 +T 00 00 7A +R 00 00 00 09 +T 00 00 7A 1E 11 26 0F 1E 0F 26 0B 1E 09 13 1A 24 +R 00 00 00 09 +T 00 00 87 51 1E 16 7F 20 4C +R 00 00 00 09 +T 00 00 8D +R 00 00 00 09 +T 00 00 8D 96 1C 00 05 1F 0D 16 11 90 89 16 11 90 +R 00 00 00 09 +T 00 00 9A 89 89 8D 00 00 00 5B 06 1F 0F 0D 0F 2A +R 00 00 00 09 82 06 00 02 +T 00 00 A7 04 5F 5A 20 2F +R 00 00 00 09 +T 00 00 AC +R 00 00 00 09 +T 00 00 AC 1E 0F 72 FB 09 1F 11 13 1A 22 22 16 0D +R 00 00 00 09 +T 00 00 B9 1E 16 7B 10 88 7B 10 88 90 89 89 8D +R 00 00 00 09 +T 00 00 C5 00 00 00 5B 06 1E 16 72 FB 0F 1F 16 1E +R 00 00 00 09 82 03 00 01 +T 00 00 D2 11 1F 09 AC 00 00 05 +R 00 00 00 09 80 07 00 09 +T 00 00 D9 +R 00 00 00 09 +T 00 00 D9 1E 09 +R 00 00 00 09 +T 00 00 DB +R 00 00 00 09 +T 00 00 DB 5B 12 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/c16stombs.sym b/device/lib/stm8-large/c16stombs.sym new file mode 100644 index 0000000..ccbb8df --- /dev/null +++ b/device/lib/stm8-large/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 DE flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/c32rtomb.asm b/device/lib/stm8-large/c32rtomb.asm new file mode 100644 index 0000000..06daa41 --- /dev/null +++ b/device/lib/stm8-large/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, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + callf _wctomb + addw sp, #6 +; ../c32rtomb.c: 37: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/c32rtomb.lst b/device/lib/stm8-large/c32rtomb.lst new file mode 100644 index 0000000..db880fd --- /dev/null +++ b/device/lib/stm8-large/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 08 [ 2] 56 ldw x, (0x08, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 08 [ 2] 58 ldw x, (0x08, sp) + 000005 89 [ 2] 59 pushw x + 000006 1E 08 [ 2] 60 ldw x, (0x08, sp) + 000008 89 [ 2] 61 pushw x + 000009 8Ds00r00r00 [ 5] 62 callf _wctomb + 00000D 5B 06 [ 2] 63 addw sp, #6 + 64 ; ../c32rtomb.c: 37: } + 00000F 87 [ 5] 65 retf + 66 .area CODE + 67 .area CONST + 68 .area INITIALIZER + 69 .area CABS (ABS) diff --git a/device/lib/stm8-large/c32rtomb.rel b/device/lib/stm8-large/c32rtomb.rel new file mode 100644 index 0000000..3c13630 --- /dev/null +++ b/device/lib/stm8-large/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 10 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 08 89 1E 08 89 1E 08 89 8D +R 00 00 00 09 +T 00 00 0A 00 00 00 5B 06 87 +R 00 00 00 09 82 03 00 01 diff --git a/device/lib/stm8-large/c32rtomb.sym b/device/lib/stm8-large/c32rtomb.sym new file mode 100644 index 0000000..0774db6 --- /dev/null +++ b/device/lib/stm8-large/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 10 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/calloc.asm b/device/lib/stm8-large/calloc.asm new file mode 100644 index 0000000..9bd8176 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0a, sp) + ldw y, (0x0c, sp) + pushw y + pushw x + callf ___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 + callf _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 + callf _memset + addw sp, #6 +00104$: +; ../calloc.c: 60: return(ptr); + ldw x, (0x05, sp) +00105$: +; ../calloc.c: 61: } + addw sp, #6 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/calloc.lst b/device/lib/stm8-large/calloc.lst new file mode 100644 index 0000000..7085a21 --- /dev/null +++ b/device/lib/stm8-large/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 0A [ 2] 58 ldw x, (0x0a, sp) + 000004 16 0C [ 2] 59 ldw y, (0x0c, sp) + 000006 90 89 [ 2] 60 pushw y + 000008 89 [ 2] 61 pushw x + 000009 8Ds00r00r00 [ 5] 62 callf ___muluint2ulong + 00000D 5B 04 [ 2] 63 addw sp, #4 + 00000F 1F 05 [ 2] 64 ldw (0x05, sp), x + 65 ; ../calloc.c: 54: if (msize > SIZE_MAX) + 000011 17 03 [ 2] 66 ldw (0x03, sp), y + 000013 93 [ 1] 67 ldw x, y + 000014 27 03 [ 1] 68 jreq 00102$ + 69 ; ../calloc.c: 55: return(0); + 000016 5F [ 1] 70 clrw x + 000017 20 24 [ 2] 71 jra 00105$ + 000019 72 00102$: + 73 ; ../calloc.c: 57: if (ptr = malloc(msize)) + 000019 16 05 [ 2] 74 ldw y, (0x05, sp) + 00001B 17 01 [ 2] 75 ldw (0x01, sp), y + 00001D 93 [ 1] 76 ldw x, y + 00001E 89 [ 2] 77 pushw x + 00001F 8Ds00r00r00 [ 5] 78 callf _malloc + 000023 5B 02 [ 2] 79 addw sp, #2 + 000025 1F 03 [ 2] 80 ldw (0x03, sp), x + 000027 1F 05 [ 2] 81 ldw (0x05, sp), x + 000029 1E 03 [ 2] 82 ldw x, (0x03, sp) + 00002B 27 0E [ 1] 83 jreq 00104$ + 84 ; ../calloc.c: 58: memset(ptr, 0, msize); + 00002D 1E 01 [ 2] 85 ldw x, (0x01, sp) + 00002F 89 [ 2] 86 pushw x + 000030 5F [ 1] 87 clrw x + 000031 89 [ 2] 88 pushw x + 000032 1E 09 [ 2] 89 ldw x, (0x09, sp) + 000034 89 [ 2] 90 pushw x + 000035 8Ds00r00r00 [ 5] 91 callf _memset + 000039 5B 06 [ 2] 92 addw sp, #6 + 00003B 93 00104$: + 94 ; ../calloc.c: 60: return(ptr); + 00003B 1E 05 [ 2] 95 ldw x, (0x05, sp) + 00003D 96 00105$: + 97 ; ../calloc.c: 61: } + 00003D 5B 06 [ 2] 98 addw sp, #6 + 00003F 87 [ 5] 99 retf + 100 .area CODE + 101 .area CONST + 102 .area INITIALIZER + 103 .area CABS (ABS) diff --git a/device/lib/stm8-large/calloc.rel b/device/lib/stm8-large/calloc.rel new file mode 100644 index 0000000..2495db6 --- /dev/null +++ b/device/lib/stm8-large/calloc.rel @@ -0,0 +1,44 @@ +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 40 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 0A 16 0C 90 89 89 8D +R 00 00 00 09 +T 00 00 0A 00 00 00 5B 04 1F 05 17 03 93 27 03 5F +R 00 00 00 09 82 03 00 00 +T 00 00 17 20 24 +R 00 00 00 09 +T 00 00 19 +R 00 00 00 09 +T 00 00 19 16 05 17 01 93 89 8D 00 00 00 5B 02 1F +R 00 00 00 09 82 0A 00 01 +T 00 00 26 03 1F 05 1E 03 27 0E 1E 01 89 5F 89 1E +R 00 00 00 09 +T 00 00 33 09 89 8D 00 00 00 5B 06 +R 00 00 00 09 82 06 00 03 +T 00 00 3B +R 00 00 00 09 +T 00 00 3B 1E 05 +R 00 00 00 09 +T 00 00 3D +R 00 00 00 09 +T 00 00 3D 5B 06 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/calloc.sym b/device/lib/stm8-large/calloc.sym new file mode 100644 index 0000000..367fa97 --- /dev/null +++ b/device/lib/stm8-large/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 40 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/ceilf.asm b/device/lib/stm8-large/ceilf.asm new file mode 100644 index 0000000..4e600e2 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + callf ___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 + callf ___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, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + callf ___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 + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/ceilf.lst b/device/lib/stm8-large/ceilf.lst new file mode 100644 index 0000000..9d83703 --- /dev/null +++ b/device/lib/stm8-large/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 0E [ 2] 56 ldw x, (0x0e, sp) + 000004 89 [ 2] 57 pushw x + 000005 1E 0E [ 2] 58 ldw x, (0x0e, sp) + 000007 89 [ 2] 59 pushw x + 000008 8Ds00r00r00 [ 5] 60 callf ___fs2slong + 00000C 5B 04 [ 2] 61 addw sp, #4 + 00000E 1F 03 [ 2] 62 ldw (0x03, sp), x + 000010 17 01 [ 2] 63 ldw (0x01, sp), y + 64 ; ../ceilf.c: 38: return r; + 000012 1E 03 [ 2] 65 ldw x, (0x03, sp) + 000014 89 [ 2] 66 pushw x + 000015 1E 03 [ 2] 67 ldw x, (0x03, sp) + 000017 89 [ 2] 68 pushw x + 000018 8Ds00r00r00 [ 5] 69 callf ___slong2fs + 00001C 5B 04 [ 2] 70 addw sp, #4 + 00001E 1F 07 [ 2] 71 ldw (0x07, sp), x + 000020 17 05 [ 2] 72 ldw (0x05, sp), y + 73 ; ../ceilf.c: 37: if (r<0) + 000022 0D 01 [ 1] 74 tnz (0x01, sp) + 000024 2A 06 [ 1] 75 jrpl 00102$ + 76 ; ../ceilf.c: 38: return r; + 000026 1E 07 [ 2] 77 ldw x, (0x07, sp) + 000028 16 05 [ 2] 78 ldw y, (0x05, sp) + 00002A 20 3B [ 2] 79 jra 00104$ + 00002C 80 00102$: + 81 ; ../ceilf.c: 40: return (r+((r<x)?1:0)); + 00002C 1E 0E [ 2] 82 ldw x, (0x0e, sp) + 00002E 89 [ 2] 83 pushw x + 00002F 1E 0E [ 2] 84 ldw x, (0x0e, sp) + 000031 89 [ 2] 85 pushw x + 000032 1E 0B [ 2] 86 ldw x, (0x0b, sp) + 000034 89 [ 2] 87 pushw x + 000035 1E 0B [ 2] 88 ldw x, (0x0b, sp) + 000037 89 [ 2] 89 pushw x + 000038 8Ds00r00r00 [ 5] 90 callf ___fslt + 00003C 5B 08 [ 2] 91 addw sp, #8 + 00003E 4D [ 1] 92 tnz a + 00003F 27 03 [ 1] 93 jreq 00106$ + 000041 5F [ 1] 94 clrw x + 000042 5C [ 1] 95 incw x + 000043 21 96 .byte 0x21 + 000044 97 00106$: + 000044 5F [ 1] 98 clrw x + 000045 99 00107$: + 000045 51 [ 1] 100 exgw x, y + 000046 5F [ 1] 101 clrw x + 000047 90 5D [ 2] 102 tnzw y + 000049 2A 01 [ 1] 103 jrpl 00120$ + 00004B 5A [ 2] 104 decw x + 00004C 105 00120$: + 00004C 72 F9 03 [ 2] 106 addw y, (0x03, sp) + 00004F 9F [ 1] 107 ld a, xl + 000050 19 02 [ 1] 108 adc a, (0x02, sp) + 000052 02 [ 1] 109 rlwa x + 000053 19 01 [ 1] 110 adc a, (0x01, sp) + 000055 95 [ 1] 111 ld xh, a + 000056 90 89 [ 2] 112 pushw y + 000058 89 [ 2] 113 pushw x + 000059 8Ds00r00r00 [ 5] 114 callf ___slong2fs + 00005D 5B 04 [ 2] 115 addw sp, #4 + 00005F 1F 07 [ 2] 116 ldw (0x07, sp), x + 000061 17 05 [ 2] 117 ldw (0x05, sp), y + 000063 1E 07 [ 2] 118 ldw x, (0x07, sp) + 000065 16 05 [ 2] 119 ldw y, (0x05, sp) + 000067 120 00104$: + 121 ; ../ceilf.c: 41: } + 000067 5B 08 [ 2] 122 addw sp, #8 + 000069 87 [ 5] 123 retf + 124 .area CODE + 125 .area CONST + 126 .area INITIALIZER + 127 .area CABS (ABS) diff --git a/device/lib/stm8-large/ceilf.rel b/device/lib/stm8-large/ceilf.rel new file mode 100644 index 0000000..2ad7fdc --- /dev/null +++ b/device/lib/stm8-large/ceilf.rel @@ -0,0 +1,56 @@ +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 6A 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 0E 89 1E 0E 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 89 1E +R 00 00 00 09 82 03 00 01 +T 00 00 16 03 89 8D 00 00 00 5B 04 1F 07 17 05 0D +R 00 00 00 09 82 06 00 00 +T 00 00 23 01 2A 06 1E 07 16 05 20 3B +R 00 00 00 09 +T 00 00 2C +R 00 00 00 09 +T 00 00 2C 1E 0E 89 1E 0E 89 1E 0B 89 1E 0B 89 8D +R 00 00 00 09 +T 00 00 39 00 00 00 5B 08 4D 27 03 5F 5C 21 +R 00 00 00 09 82 03 00 02 +T 00 00 44 +R 00 00 00 09 +T 00 00 44 5F +R 00 00 00 09 +T 00 00 45 +R 00 00 00 09 +T 00 00 45 51 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 4C +R 00 00 00 09 +T 00 00 4C 72 F9 03 9F 19 02 02 19 01 95 90 89 89 +R 00 00 00 09 +T 00 00 59 8D 00 00 00 5B 04 1F 07 17 05 1E 07 16 +R 00 00 00 09 82 04 00 00 +T 00 00 66 05 +R 00 00 00 09 +T 00 00 67 +R 00 00 00 09 +T 00 00 67 5B 08 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/ceilf.sym b/device/lib/stm8-large/ceilf.sym new file mode 100644 index 0000000..3a7c75b --- /dev/null +++ b/device/lib/stm8-large/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 6A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/cosf.asm b/device/lib/stm8-large/cosf.asm new file mode 100644 index 0000000..e85814a --- /dev/null +++ b/device/lib/stm8-large/cosf.asm @@ -0,0 +1,79 @@ +;-------------------------------------------------------- +; 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, (0x06, sp) + jrne 00102$ + ldw x, (0x04, sp) + sllw x + jrne 00102$ + clrw x + ldw y, #0x3f80 + jra 00103$ +00102$: +; ../cosf.c: 39: return sincosf(x, 1); + push #0x01 + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf _sincosf + addw sp, #5 +00103$: +; ../cosf.c: 40: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/cosf.lst b/device/lib/stm8-large/cosf.lst new file mode 100644 index 0000000..ccc0dd1 --- /dev/null +++ b/device/lib/stm8-large/cosf.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 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 06 [ 2] 56 ldw x, (0x06, sp) + 000002 26 0C [ 1] 57 jrne 00102$ + 000004 1E 04 [ 2] 58 ldw x, (0x04, sp) + 000006 58 [ 2] 59 sllw x + 000007 26 07 [ 1] 60 jrne 00102$ + 000009 5F [ 1] 61 clrw x + 00000A 90 AE 3F 80 [ 2] 62 ldw y, #0x3f80 + 00000E 20 0E [ 2] 63 jra 00103$ + 000010 64 00102$: + 65 ; ../cosf.c: 39: return sincosf(x, 1); + 000010 4B 01 [ 1] 66 push #0x01 + 000012 1E 07 [ 2] 67 ldw x, (0x07, sp) + 000014 89 [ 2] 68 pushw x + 000015 1E 07 [ 2] 69 ldw x, (0x07, sp) + 000017 89 [ 2] 70 pushw x + 000018 8Ds00r00r00 [ 5] 71 callf _sincosf + 00001C 5B 05 [ 2] 72 addw sp, #5 + 00001E 73 00103$: + 74 ; ../cosf.c: 40: } + 00001E 87 [ 5] 75 retf + 76 .area CODE + 77 .area CONST + 78 .area INITIALIZER + 79 .area CABS (ABS) diff --git a/device/lib/stm8-large/cosf.rel b/device/lib/stm8-large/cosf.rel new file mode 100644 index 0000000..1b4037d --- /dev/null +++ b/device/lib/stm8-large/cosf.rel @@ -0,0 +1,34 @@ +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 1F 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 06 26 0C 1E 04 58 26 07 5F 90 AE +R 00 00 00 09 +T 00 00 0C 3F 80 20 0E +R 00 00 00 09 +T 00 00 10 +R 00 00 00 09 +T 00 00 10 4B 01 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 19 00 00 00 5B 05 +R 00 00 00 09 82 03 00 00 +T 00 00 1E +R 00 00 00 09 +T 00 00 1E 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/cosf.sym b/device/lib/stm8-large/cosf.sym new file mode 100644 index 0000000..32a1ed9 --- /dev/null +++ b/device/lib/stm8-large/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 1F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/coshf.asm b/device/lib/stm8-large/coshf.asm new file mode 100644 index 0000000..557774e --- /dev/null +++ b/device/lib/stm8-large/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, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf _sincoshf + addw sp, #5 +; ../coshf.c: 39: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/coshf.lst b/device/lib/stm8-large/coshf.lst new file mode 100644 index 0000000..a7aba92 --- /dev/null +++ b/device/lib/stm8-large/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 07 [ 2] 57 ldw x, (0x07, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 07 [ 2] 59 ldw x, (0x07, sp) + 000007 89 [ 2] 60 pushw x + 000008 8Ds00r00r00 [ 5] 61 callf _sincoshf + 00000C 5B 05 [ 2] 62 addw sp, #5 + 63 ; ../coshf.c: 39: } + 00000E 87 [ 5] 64 retf + 65 .area CODE + 66 .area CONST + 67 .area INITIALIZER + 68 .area CABS (ABS) diff --git a/device/lib/stm8-large/coshf.rel b/device/lib/stm8-large/coshf.rel new file mode 100644 index 0000000..80949c7 --- /dev/null +++ b/device/lib/stm8-large/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 F 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 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 05 87 +R 00 00 00 09 82 03 00 01 diff --git a/device/lib/stm8-large/coshf.sym b/device/lib/stm8-large/coshf.sym new file mode 100644 index 0000000..7fe70ae --- /dev/null +++ b/device/lib/stm8-large/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 F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/cotf.asm b/device/lib/stm8-large/cotf.asm new file mode 100644 index 0000000..f64a1ff --- /dev/null +++ b/device/lib/stm8-large/cotf.asm @@ -0,0 +1,116 @@ +;-------------------------------------------------------- +; 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, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + callf _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 + callf ___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, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf ___fslt + addw sp, #8 + tnz a + jreq 00102$ +; ../cotf.c: 46: return -HUGE_VALF; + clrw x + decw x + ldw y, #0xff7f + jra 00106$ +00102$: +; ../cotf.c: 48: return +HUGE_VALF; + clrw x + decw x + ldw y, #0x7f7f + jra 00106$ +00105$: +; ../cotf.c: 50: return tancotf(x, 1); + push #0x01 + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf _tancotf + addw sp, #5 +00106$: +; ../cotf.c: 51: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/cotf.lst b/device/lib/stm8-large/cotf.lst new file mode 100644 index 0000000..4004376 --- /dev/null +++ b/device/lib/stm8-large/cotf.lst @@ -0,0 +1,116 @@ + 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 06 [ 2] 57 ldw x, (0x06, sp) + 000002 89 [ 2] 58 pushw x + 000003 1E 06 [ 2] 59 ldw x, (0x06, sp) + 000005 89 [ 2] 60 pushw x + 000006 8Ds00r00r00 [ 5] 61 callf _fabsf + 00000A 5B 04 [ 2] 62 addw sp, #4 + 63 ; ../cotf.c: 42: if (y<1.0E-30) //This one requires more thinking... + 00000C 4B 60 [ 1] 64 push #0x60 + 00000E 4B 42 [ 1] 65 push #0x42 + 000010 4B A2 [ 1] 66 push #0xa2 + 000012 4B 0D [ 1] 67 push #0x0d + 000014 89 [ 2] 68 pushw x + 000015 90 89 [ 2] 69 pushw y + 000017 8Ds00r00r00 [ 5] 70 callf ___fslt + 00001B 5B 08 [ 2] 71 addw sp, #8 + 00001D 4D [ 1] 72 tnz a + 00001E 27 29 [ 1] 73 jreq 00105$ + 74 ; ../cotf.c: 44: errno = ERANGE; + 000020 AE 00 22 [ 2] 75 ldw x, #0x0022 + 000023 CFu00u00 [ 2] 76 ldw _errno+0, x + 77 ; ../cotf.c: 45: if (x<0.0) + 000026 5F [ 1] 78 clrw x + 000027 89 [ 2] 79 pushw x + 000028 5F [ 1] 80 clrw x + 000029 89 [ 2] 81 pushw x + 00002A 1E 0A [ 2] 82 ldw x, (0x0a, sp) + 00002C 89 [ 2] 83 pushw x + 00002D 1E 0A [ 2] 84 ldw x, (0x0a, sp) + 00002F 89 [ 2] 85 pushw x + 000030 8Ds00r00r00 [ 5] 86 callf ___fslt + 000034 5B 08 [ 2] 87 addw sp, #8 + 000036 4D [ 1] 88 tnz a + 000037 27 08 [ 1] 89 jreq 00102$ + 90 ; ../cotf.c: 46: return -HUGE_VALF; + 000039 5F [ 1] 91 clrw x + 00003A 5A [ 2] 92 decw x + 00003B 90 AE FF 7F [ 2] 93 ldw y, #0xff7f + 00003F 20 16 [ 2] 94 jra 00106$ + 000041 95 00102$: + 96 ; ../cotf.c: 48: return +HUGE_VALF; + 000041 5F [ 1] 97 clrw x + 000042 5A [ 2] 98 decw x + 000043 90 AE 7F 7F [ 2] 99 ldw y, #0x7f7f + 000047 20 0E [ 2] 100 jra 00106$ + 000049 101 00105$: + 102 ; ../cotf.c: 50: return tancotf(x, 1); + 000049 4B 01 [ 1] 103 push #0x01 + 00004B 1E 07 [ 2] 104 ldw x, (0x07, sp) + 00004D 89 [ 2] 105 pushw x + 00004E 1E 07 [ 2] 106 ldw x, (0x07, sp) + 000050 89 [ 2] 107 pushw x + 000051 8Ds00r00r00 [ 5] 108 callf _tancotf + 000055 5B 05 [ 2] 109 addw sp, #5 + 000057 110 00106$: + 111 ; ../cotf.c: 51: } + 000057 87 [ 5] 112 retf + 113 .area CODE + 114 .area CONST + 115 .area INITIALIZER + 116 .area CABS (ABS) diff --git a/device/lib/stm8-large/cotf.rel b/device/lib/stm8-large/cotf.rel new file mode 100644 index 0000000..70cba59 --- /dev/null +++ b/device/lib/stm8-large/cotf.rel @@ -0,0 +1,49 @@ +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 58 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 06 89 1E 06 89 8D 00 00 00 5B 04 4B +R 00 00 00 09 82 0A 00 04 +T 00 00 0D 60 4B 42 4B A2 4B 0D 89 90 89 8D +R 00 00 00 09 +T 00 00 18 00 00 00 5B 08 4D 27 29 AE 00 22 CF +R 00 00 00 09 82 03 00 02 +T 00 00 24 00 00 5F 89 5F 89 1E 0A 89 1E 0A 89 8D +R 00 00 00 09 12 03 00 00 +T 00 00 31 00 00 00 5B 08 4D 27 08 5F 5A 90 AE +R 00 00 00 09 82 03 00 02 +T 00 00 3D FF 7F 20 16 +R 00 00 00 09 +T 00 00 41 +R 00 00 00 09 +T 00 00 41 5F 5A 90 AE 7F 7F 20 0E +R 00 00 00 09 +T 00 00 49 +R 00 00 00 09 +T 00 00 49 4B 01 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 52 00 00 00 5B 05 +R 00 00 00 09 82 03 00 01 +T 00 00 57 +R 00 00 00 09 +T 00 00 57 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/cotf.sym b/device/lib/stm8-large/cotf.sym new file mode 100644 index 0000000..39b4cce --- /dev/null +++ b/device/lib/stm8-large/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 58 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/errno.asm b/device/lib/stm8-large/errno.asm new file mode 100644 index 0000000..18c38d1 --- /dev/null +++ b/device/lib/stm8-large/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-large/errno.lst b/device/lib/stm8-large/errno.lst new file mode 100644 index 0000000..0a57d0d --- /dev/null +++ b/device/lib/stm8-large/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-large/errno.rel b/device/lib/stm8-large/errno.rel new file mode 100644 index 0000000..851b850 --- /dev/null +++ b/device/lib/stm8-large/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-large/errno.sym b/device/lib/stm8-large/errno.sym new file mode 100644 index 0000000..94d2e22 --- /dev/null +++ b/device/lib/stm8-large/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-large/expf.asm b/device/lib/stm8-large/expf.asm new file mode 100644 index 0000000..ba3b300 --- /dev/null +++ b/device/lib/stm8-large/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, (0x19, sp) + pushw x + ldw x, (0x19, sp) + pushw x + callf ___fslt + addw sp, #8 + tnz a + jrne 00102$ +; ../expf.c: 338: { y=x; sign=0; } + ldw y, (0x15, sp) + ldw (0x0e, sp), y + ldw y, (0x13, sp) + ldw (0x0c, sp), y + clr (0x01, sp) + jra 00103$ +00102$: +; ../expf.c: 340: { y=-x; sign=1; } + ldw y, (0x15, sp) + ldw x, (0x13, 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 + callf ___fslt + addw sp, #8 + ld (0x0b, sp), a + jreq 00105$ + clrw x + ldw y, #0x3f80 + jpf 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 + callf ___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 + jpf 00118$ +00107$: +; ../expf.c: 354: return 0.0; + clrw x + clrw y + jpf 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 + callf ___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 + callf ___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 + callf ___sint2fs + addw sp, #2 + pushw x + pushw y + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + callf ___fssub + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + callf ___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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x80 + push #0x3e + pushw x + pushw y + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + callf ___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 + callf ___fssub + addw sp, #8 + pushw x + pushw y + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + callf ___fsdiv + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + callf ___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 + callf _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 + callf ___fsdiv + addw sp, #8 +; ../expf.c: 374: return z; +00116$: +00118$: +; ../expf.c: 375: } + addw sp, #15 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/expf.lst b/device/lib/stm8-large/expf.lst new file mode 100644 index 0000000..ef9c131 --- /dev/null +++ b/device/lib/stm8-large/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 19 [ 2] 61 ldw x, (0x19, sp) + 000008 89 [ 2] 62 pushw x + 000009 1E 19 [ 2] 63 ldw x, (0x19, sp) + 00000B 89 [ 2] 64 pushw x + 00000C 8Ds00r00r00 [ 5] 65 callf ___fslt + 000010 5B 08 [ 2] 66 addw sp, #8 + 000012 4D [ 1] 67 tnz a + 000013 26 0C [ 1] 68 jrne 00102$ + 69 ; ../expf.c: 338: { y=x; sign=0; } + 000015 16 15 [ 2] 70 ldw y, (0x15, sp) + 000017 17 0E [ 2] 71 ldw (0x0e, sp), y + 000019 16 13 [ 2] 72 ldw y, (0x13, sp) + 00001B 17 0C [ 2] 73 ldw (0x0c, sp), y + 00001D 0F 01 [ 1] 74 clr (0x01, sp) + 00001F 20 0F [ 2] 75 jra 00103$ + 000021 76 00102$: + 77 ; ../expf.c: 340: { y=-x; sign=1; } + 000021 16 15 [ 2] 78 ldw y, (0x15, sp) + 000023 1E 13 [ 2] 79 ldw x, (0x13, sp) + 000025 58 [ 2] 80 sllw x + 000026 8C [ 1] 81 ccf + 000027 56 [ 2] 82 rrcw x + 000028 17 0E [ 2] 83 ldw (0x0e, sp), y + 00002A 1F 0C [ 2] 84 ldw (0x0c, sp), x + 00002C A6 01 [ 1] 85 ld a, #0x01 + 00002E 6B 01 [ 1] 86 ld (0x01, sp), a + 000030 87 00103$: + 88 ; ../expf.c: 342: if(y<EXPEPS) return 1.0; + 000030 4B 95 [ 1] 89 push #0x95 + 000032 4B BF [ 1] 90 push #0xbf + 000034 4B D6 [ 1] 91 push #0xd6 + 000036 4B 33 [ 1] 92 push #0x33 + 000038 1E 12 [ 2] 93 ldw x, (0x12, sp) + 00003A 89 [ 2] 94 pushw x + 00003B 1E 12 [ 2] 95 ldw x, (0x12, sp) + 00003D 89 [ 2] 96 pushw x + 00003E 8Ds00r00r00 [ 5] 97 callf ___fslt + 000042 5B 08 [ 2] 98 addw sp, #8 + 000044 6B 0B [ 1] 99 ld (0x0b, sp), a + 000046 27 09 [ 1] 100 jreq 00105$ + 000048 5F [ 1] 101 clrw x + 000049 90 AE 3F 80 [ 2] 102 ldw y, #0x3f80 + 00004D ACs00r02r0C [ 2] 103 jpf 00118$ + 000051 104 00105$: + 105 ; ../expf.c: 344: if(y>BIGX) + 000051 1E 0E [ 2] 106 ldw x, (0x0e, sp) + 000053 89 [ 2] 107 pushw x + 000054 1E 0E [ 2] 108 ldw x, (0x0e, sp) + 000056 89 [ 2] 109 pushw x + 000057 4B 18 [ 1] 110 push #0x18 + 000059 4B 72 [ 1] 111 push #0x72 + 00005B 4B B1 [ 1] 112 push #0xb1 + 00005D 4B 42 [ 1] 113 push #0x42 + 00005F 8Ds00r00r00 [ 5] 114 callf ___fslt + 000063 5B 08 [ 2] 115 addw sp, #8 + 000065 4D [ 1] 116 tnz a + 000066 27 1B [ 1] 117 jreq 00110$ + 118 ; ../expf.c: 346: if(sign) + 000068 0D 01 [ 1] 119 tnz (0x01, sp) + 00006A 27 10 [ 1] 120 jreq 00107$ + 121 ; ../expf.c: 348: errno=ERANGE; + 00006C AE 00 22 [ 2] 122 ldw x, #0x0022 + 00006F CFu00u00 [ 2] 123 ldw _errno+0, x + 124 ; ../expf.c: 350: ; + 000072 5F [ 1] 125 clrw x + 000073 5A [ 2] 126 decw x + 000074 90 AE 7F 7F [ 2] 127 ldw y, #0x7f7f + 000078 ACs00r02r0C [ 2] 128 jpf 00118$ + 00007C 129 00107$: + 130 ; ../expf.c: 354: return 0.0; + 00007C 5F [ 1] 131 clrw x + 00007D 90 5F [ 1] 132 clrw y + 00007F ACs00r02r0C [ 2] 133 jpf 00118$ + 000083 134 00110$: + 135 ; ../expf.c: 358: z=y*K1; + 000083 1E 0E [ 2] 136 ldw x, (0x0e, sp) + 000085 89 [ 2] 137 pushw x + 000086 1E 0E [ 2] 138 ldw x, (0x0e, sp) + 000088 89 [ 2] 139 pushw x + 000089 4B 3B [ 1] 140 push #0x3b + 00008B 4B AA [ 1] 141 push #0xaa + 00008D 4B B8 [ 1] 142 push #0xb8 + 00008F 4B 3F [ 1] 143 push #0x3f + 000091 8Ds00r00r00 [ 5] 144 callf ___fsmul + 000095 5B 08 [ 2] 145 addw sp, #8 + 000097 1F 0A [ 2] 146 ldw (0x0a, sp), x + 000099 17 08 [ 2] 147 ldw (0x08, sp), y + 148 ; ../expf.c: 359: n=z; + 00009B 1E 0A [ 2] 149 ldw x, (0x0a, sp) + 00009D 89 [ 2] 150 pushw x + 00009E 1E 0A [ 2] 151 ldw x, (0x0a, sp) + 0000A0 89 [ 2] 152 pushw x + 0000A1 8Ds00r00r00 [ 5] 153 callf ___fs2sint + 0000A5 5B 04 [ 2] 154 addw sp, #4 + 0000A7 1F 02 [ 2] 155 ldw (0x02, sp), x + 156 ; ../expf.c: 361: if(n<0) --n; + 0000A9 0D 02 [ 1] 157 tnz (0x02, sp) + 0000AB 2A 05 [ 1] 158 jrpl 00112$ + 0000AD 1E 02 [ 2] 159 ldw x, (0x02, sp) + 0000AF 5A [ 2] 160 decw x + 0000B0 1F 02 [ 2] 161 ldw (0x02, sp), x + 0000B2 162 00112$: + 163 ; ../expf.c: 362: if(z-n>=0.5) ++n; + 0000B2 1E 02 [ 2] 164 ldw x, (0x02, sp) + 0000B4 89 [ 2] 165 pushw x + 0000B5 8Ds00r00r00 [ 5] 166 callf ___sint2fs + 0000B9 5B 02 [ 2] 167 addw sp, #2 + 0000BB 89 [ 2] 168 pushw x + 0000BC 90 89 [ 2] 169 pushw y + 0000BE 1E 0E [ 2] 170 ldw x, (0x0e, sp) + 0000C0 89 [ 2] 171 pushw x + 0000C1 1E 0E [ 2] 172 ldw x, (0x0e, sp) + 0000C3 89 [ 2] 173 pushw x + 0000C4 8Ds00r00r00 [ 5] 174 callf ___fssub + 0000C8 5B 08 [ 2] 175 addw sp, #8 + 0000CA 4B 00 [ 1] 176 push #0x00 + 0000CC 4B 00 [ 1] 177 push #0x00 + 0000CE 4B 00 [ 1] 178 push #0x00 + 0000D0 4B 3F [ 1] 179 push #0x3f + 0000D2 89 [ 2] 180 pushw x + 0000D3 90 89 [ 2] 181 pushw y + 0000D5 8Ds00r00r00 [ 5] 182 callf ___fslt + 0000D9 5B 08 [ 2] 183 addw sp, #8 + 0000DB 4D [ 1] 184 tnz a + 0000DC 26 05 [ 1] 185 jrne 00114$ + 0000DE 1E 02 [ 2] 186 ldw x, (0x02, sp) + 0000E0 5C [ 1] 187 incw x + 0000E1 1F 02 [ 2] 188 ldw (0x02, sp), x + 0000E3 189 00114$: + 190 ; ../expf.c: 363: xn=n; + 0000E3 1E 02 [ 2] 191 ldw x, (0x02, sp) + 0000E5 89 [ 2] 192 pushw x + 0000E6 8Ds00r00r00 [ 5] 193 callf ___sint2fs + 0000EA 5B 02 [ 2] 194 addw sp, #2 + 0000EC 1F 0A [ 2] 195 ldw (0x0a, sp), x + 0000EE 17 08 [ 2] 196 ldw (0x08, sp), y + 197 ; ../expf.c: 364: g=((y-xn*C1))-xn*C2; + 0000F0 1E 0A [ 2] 198 ldw x, (0x0a, sp) + 0000F2 89 [ 2] 199 pushw x + 0000F3 1E 0A [ 2] 200 ldw x, (0x0a, sp) + 0000F5 89 [ 2] 201 pushw x + 0000F6 4B 00 [ 1] 202 push #0x00 + 0000F8 4B 80 [ 1] 203 push #0x80 + 0000FA 4B 31 [ 1] 204 push #0x31 + 0000FC 4B 3F [ 1] 205 push #0x3f + 0000FE 8Ds00r00r00 [ 5] 206 callf ___fsmul + 000102 5B 08 [ 2] 207 addw sp, #8 + 000104 89 [ 2] 208 pushw x + 000105 90 89 [ 2] 209 pushw y + 000107 1E 12 [ 2] 210 ldw x, (0x12, sp) + 000109 89 [ 2] 211 pushw x + 00010A 1E 12 [ 2] 212 ldw x, (0x12, sp) + 00010C 89 [ 2] 213 pushw x + 00010D 8Ds00r00r00 [ 5] 214 callf ___fssub + 000111 5B 08 [ 2] 215 addw sp, #8 + 000113 1F 0E [ 2] 216 ldw (0x0e, sp), x + 000115 17 0C [ 2] 217 ldw (0x0c, sp), y + 000117 1E 0A [ 2] 218 ldw x, (0x0a, sp) + 000119 89 [ 2] 219 pushw x + 00011A 1E 0A [ 2] 220 ldw x, (0x0a, sp) + 00011C 89 [ 2] 221 pushw x + 00011D 4B 83 [ 1] 222 push #0x83 + 00011F 4B 80 [ 1] 223 push #0x80 + 000121 4B 5E [ 1] 224 push #0x5e + 000123 4B B9 [ 1] 225 push #0xb9 + 000125 8Ds00r00r00 [ 5] 226 callf ___fsmul + 000129 5B 08 [ 2] 227 addw sp, #8 + 00012B 89 [ 2] 228 pushw x + 00012C 90 89 [ 2] 229 pushw y + 00012E 1E 12 [ 2] 230 ldw x, (0x12, sp) + 000130 89 [ 2] 231 pushw x + 000131 1E 12 [ 2] 232 ldw x, (0x12, sp) + 000133 89 [ 2] 233 pushw x + 000134 8Ds00r00r00 [ 5] 234 callf ___fssub + 000138 5B 08 [ 2] 235 addw sp, #8 + 00013A 1F 06 [ 2] 236 ldw (0x06, sp), x + 00013C 17 04 [ 2] 237 ldw (0x04, sp), y + 238 ; ../expf.c: 365: z=g*g; + 00013E 1E 06 [ 2] 239 ldw x, (0x06, sp) + 000140 89 [ 2] 240 pushw x + 000141 1E 06 [ 2] 241 ldw x, (0x06, sp) + 000143 89 [ 2] 242 pushw x + 000144 1E 0A [ 2] 243 ldw x, (0x0a, sp) + 000146 89 [ 2] 244 pushw x + 000147 1E 0A [ 2] 245 ldw x, (0x0a, sp) + 000149 89 [ 2] 246 pushw x + 00014A 8Ds00r00r00 [ 5] 247 callf ___fsmul + 00014E 5B 08 [ 2] 248 addw sp, #8 + 000150 1F 0A [ 2] 249 ldw (0x0a, sp), x + 000152 17 08 [ 2] 250 ldw (0x08, sp), y + 251 ; ../expf.c: 366: r=P(z)*g; + 000154 1E 0A [ 2] 252 ldw x, (0x0a, sp) + 000156 89 [ 2] 253 pushw x + 000157 1E 0A [ 2] 254 ldw x, (0x0a, sp) + 000159 89 [ 2] 255 pushw x + 00015A 4B 08 [ 1] 256 push #0x08 + 00015C 4B 53 [ 1] 257 push #0x53 + 00015E 4B 88 [ 1] 258 push #0x88 + 000160 4B 3B [ 1] 259 push #0x3b + 000162 8Ds00r00r00 [ 5] 260 callf ___fsmul + 000166 5B 08 [ 2] 261 addw sp, #8 + 000168 4B 00 [ 1] 262 push #0x00 + 00016A 4B 00 [ 1] 263 push #0x00 + 00016C 4B 80 [ 1] 264 push #0x80 + 00016E 4B 3E [ 1] 265 push #0x3e + 000170 89 [ 2] 266 pushw x + 000171 90 89 [ 2] 267 pushw y + 000173 8Ds00r00r00 [ 5] 268 callf ___fsadd + 000177 5B 08 [ 2] 269 addw sp, #8 + 000179 1F 0E [ 2] 270 ldw (0x0e, sp), x + 00017B 1E 06 [ 2] 271 ldw x, (0x06, sp) + 00017D 89 [ 2] 272 pushw x + 00017E 1E 06 [ 2] 273 ldw x, (0x06, sp) + 000180 89 [ 2] 274 pushw x + 000181 1E 12 [ 2] 275 ldw x, (0x12, sp) + 000183 89 [ 2] 276 pushw x + 000184 90 89 [ 2] 277 pushw y + 000186 8Ds00r00r00 [ 5] 278 callf ___fsmul + 00018A 5B 08 [ 2] 279 addw sp, #8 + 00018C 1F 0E [ 2] 280 ldw (0x0e, sp), x + 00018E 17 0C [ 2] 281 ldw (0x0c, sp), y + 282 ; ../expf.c: 367: r=0.5+(r/(Q(z)-r)); + 000190 1E 0A [ 2] 283 ldw x, (0x0a, sp) + 000192 89 [ 2] 284 pushw x + 000193 1E 0A [ 2] 285 ldw x, (0x0a, sp) + 000195 89 [ 2] 286 pushw x + 000196 4B 5B [ 1] 287 push #0x5b + 000198 4B BF [ 1] 288 push #0xbf + 00019A 4B 4C [ 1] 289 push #0x4c + 00019C 4B 3D [ 1] 290 push #0x3d + 00019E 8Ds00r00r00 [ 5] 291 callf ___fsmul + 0001A2 5B 08 [ 2] 292 addw sp, #8 + 0001A4 4B 00 [ 1] 293 push #0x00 + 0001A6 4B 00 [ 1] 294 push #0x00 + 0001A8 4B 00 [ 1] 295 push #0x00 + 0001AA 4B 3F [ 1] 296 push #0x3f + 0001AC 89 [ 2] 297 pushw x + 0001AD 90 89 [ 2] 298 pushw y + 0001AF 8Ds00r00r00 [ 5] 299 callf ___fsadd + 0001B3 5B 08 [ 2] 300 addw sp, #8 + 0001B5 1F 0A [ 2] 301 ldw (0x0a, sp), x + 0001B7 1E 0E [ 2] 302 ldw x, (0x0e, sp) + 0001B9 89 [ 2] 303 pushw x + 0001BA 1E 0E [ 2] 304 ldw x, (0x0e, sp) + 0001BC 89 [ 2] 305 pushw x + 0001BD 1E 0E [ 2] 306 ldw x, (0x0e, sp) + 0001BF 89 [ 2] 307 pushw x + 0001C0 90 89 [ 2] 308 pushw y + 0001C2 8Ds00r00r00 [ 5] 309 callf ___fssub + 0001C6 5B 08 [ 2] 310 addw sp, #8 + 0001C8 89 [ 2] 311 pushw x + 0001C9 90 89 [ 2] 312 pushw y + 0001CB 1E 12 [ 2] 313 ldw x, (0x12, sp) + 0001CD 89 [ 2] 314 pushw x + 0001CE 1E 12 [ 2] 315 ldw x, (0x12, sp) + 0001D0 89 [ 2] 316 pushw x + 0001D1 8Ds00r00r00 [ 5] 317 callf ___fsdiv + 0001D5 5B 08 [ 2] 318 addw sp, #8 + 0001D7 4B 00 [ 1] 319 push #0x00 + 0001D9 4B 00 [ 1] 320 push #0x00 + 0001DB 4B 00 [ 1] 321 push #0x00 + 0001DD 4B 3F [ 1] 322 push #0x3f + 0001DF 89 [ 2] 323 pushw x + 0001E0 90 89 [ 2] 324 pushw y + 0001E2 8Ds00r00r00 [ 5] 325 callf ___fsadd + 0001E6 5B 08 [ 2] 326 addw sp, #8 + 0001E8 1F 0E [ 2] 327 ldw (0x0e, sp), x + 328 ; ../expf.c: 369: n++; + 0001EA 1E 02 [ 2] 329 ldw x, (0x02, sp) + 0001EC 5C [ 1] 330 incw x + 331 ; ../expf.c: 370: z=ldexpf(r, n); + 0001ED 89 [ 2] 332 pushw x + 0001EE 1E 10 [ 2] 333 ldw x, (0x10, sp) + 0001F0 89 [ 2] 334 pushw x + 0001F1 90 89 [ 2] 335 pushw y + 0001F3 8Ds00r00r00 [ 5] 336 callf _ldexpf + 0001F7 5B 06 [ 2] 337 addw sp, #6 + 338 ; ../expf.c: 371: if(sign) + 0001F9 0D 01 [ 1] 339 tnz (0x01, sp) + 0001FB 27 0F [ 1] 340 jreq 00116$ + 341 ; ../expf.c: 372: return 1.0/z; + 0001FD 89 [ 2] 342 pushw x + 0001FE 90 89 [ 2] 343 pushw y + 000200 5F [ 1] 344 clrw x + 000201 89 [ 2] 345 pushw x + 000202 4B 80 [ 1] 346 push #0x80 + 000204 4B 3F [ 1] 347 push #0x3f + 000206 8Ds00r00r00 [ 5] 348 callf ___fsdiv + 00020A 5B 08 [ 2] 349 addw sp, #8 + 350 ; ../expf.c: 374: return z; + 00020C 351 00116$: + 00020C 352 00118$: + 353 ; ../expf.c: 375: } + 00020C 5B 0F [ 2] 354 addw sp, #15 + 00020E 87 [ 5] 355 retf + 356 .area CODE + 357 .area CONST + 358 .area INITIALIZER + 359 .area CABS (ABS) diff --git a/device/lib/stm8-large/expf.rel b/device/lib/stm8-large/expf.rel new file mode 100644 index 0000000..def38dd --- /dev/null +++ b/device/lib/stm8-large/expf.rel @@ -0,0 +1,138 @@ +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 20F 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 19 89 1E 19 89 8D +R 00 00 00 09 +T 00 00 0D 00 00 00 5B 08 4D 26 0C 16 15 17 0E 16 +R 00 00 00 09 82 03 00 03 +T 00 00 1A 13 17 0C 0F 01 20 0F +R 00 00 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 16 15 1E 13 58 8C 56 17 0E 1F 0C A6 01 +R 00 00 00 09 +T 00 00 2E 6B 01 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 4B 95 4B BF 4B D6 4B 33 1E 12 89 1E 12 +R 00 00 00 09 +T 00 00 3D 89 8D 00 00 00 5B 08 6B 0B 27 09 5F 90 +R 00 00 00 09 82 05 00 03 +T 00 00 4A AE 3F 80 AC 00 02 0C +R 00 00 00 09 80 07 00 09 +T 00 00 51 +R 00 00 00 09 +T 00 00 51 1E 0E 89 1E 0E 89 4B 18 4B 72 4B B1 4B +R 00 00 00 09 +T 00 00 5E 42 8D 00 00 00 5B 08 4D 27 1B 0D 01 27 +R 00 00 00 09 82 05 00 03 +T 00 00 6B 10 AE 00 22 CF 00 00 5F 5A 90 AE 7F 7F +R 00 00 00 09 12 08 00 02 +T 00 00 78 AC 00 02 0C +R 00 00 00 09 80 04 00 09 +T 00 00 7C +R 00 00 00 09 +T 00 00 7C 5F 90 5F AC 00 02 0C +R 00 00 00 09 80 07 00 09 +T 00 00 83 +R 00 00 00 09 +T 00 00 83 1E 0E 89 1E 0E 89 4B 3B 4B AA 4B B8 4B +R 00 00 00 09 +T 00 00 90 3F 8D 00 00 00 5B 08 1F 0A 17 08 1E 0A +R 00 00 00 09 82 05 00 01 +T 00 00 9D 89 1E 0A 89 8D 00 00 00 5B 04 1F 02 0D +R 00 00 00 09 82 08 00 08 +T 00 00 AA 02 2A 05 1E 02 5A 1F 02 +R 00 00 00 09 +T 00 00 B2 +R 00 00 00 09 +T 00 00 B2 1E 02 89 8D 00 00 00 5B 02 89 90 89 1E +R 00 00 00 09 82 07 00 07 +T 00 00 BF 0E 89 1E 0E 89 8D 00 00 00 5B 08 4B 00 +R 00 00 00 09 82 09 00 00 +T 00 00 CC 4B 00 4B 00 4B 3F 89 90 89 8D +R 00 00 00 09 +T 00 00 D6 00 00 00 5B 08 4D 26 05 1E 02 5C 1F 02 +R 00 00 00 09 82 03 00 03 +T 00 00 E3 +R 00 00 00 09 +T 00 00 E3 1E 02 89 8D 00 00 00 5B 02 1F 0A 17 08 +R 00 00 00 09 82 07 00 07 +T 00 00 F0 1E 0A 89 1E 0A 89 4B 00 4B 80 4B 31 4B +R 00 00 00 09 +T 00 00 FD 3F 8D 00 00 00 5B 08 89 90 89 1E 12 89 +R 00 00 00 09 82 05 00 01 +T 00 01 0A 1E 12 89 8D 00 00 00 5B 08 1F 0E 17 0C +R 00 00 00 09 82 07 00 00 +T 00 01 17 1E 0A 89 1E 0A 89 4B 83 4B 80 4B 5E 4B +R 00 00 00 09 +T 00 01 24 B9 8D 00 00 00 5B 08 89 90 89 1E 12 89 +R 00 00 00 09 82 05 00 01 +T 00 01 31 1E 12 89 8D 00 00 00 5B 08 1F 06 17 04 +R 00 00 00 09 82 07 00 00 +T 00 01 3E 1E 06 89 1E 06 89 1E 0A 89 1E 0A 89 8D +R 00 00 00 09 +T 00 01 4B 00 00 00 5B 08 1F 0A 17 08 1E 0A 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 58 0A 89 4B 08 4B 53 4B 88 4B 3B 8D +R 00 00 00 09 +T 00 01 63 00 00 00 5B 08 4B 00 4B 00 4B 80 4B 3E +R 00 00 00 09 82 03 00 01 +T 00 01 70 89 90 89 8D 00 00 00 5B 08 1F 0E 1E 06 +R 00 00 00 09 82 07 00 05 +T 00 01 7D 89 1E 06 89 1E 12 89 90 89 8D +R 00 00 00 09 +T 00 01 87 00 00 00 5B 08 1F 0E 17 0C 1E 0A 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 94 0A 89 4B 5B 4B BF 4B 4C 4B 3D 8D +R 00 00 00 09 +T 00 01 9F 00 00 00 5B 08 4B 00 4B 00 4B 00 4B 3F +R 00 00 00 09 82 03 00 01 +T 00 01 AC 89 90 89 8D 00 00 00 5B 08 1F 0A 1E 0E +R 00 00 00 09 82 07 00 05 +T 00 01 B9 89 1E 0E 89 1E 0E 89 90 89 8D +R 00 00 00 09 +T 00 01 C3 00 00 00 5B 08 89 90 89 1E 12 89 1E 12 +R 00 00 00 09 82 03 00 00 +T 00 01 D0 89 8D 00 00 00 5B 08 4B 00 4B 00 4B 00 +R 00 00 00 09 82 05 00 09 +T 00 01 DD 4B 3F 89 90 89 8D 00 00 00 5B 08 1F 0E +R 00 00 00 09 82 09 00 05 +T 00 01 EA 1E 02 5C 89 1E 10 89 90 89 8D +R 00 00 00 09 +T 00 01 F4 00 00 00 5B 06 0D 01 27 0F 89 90 89 5F +R 00 00 00 09 82 03 00 06 +T 00 02 01 89 4B 80 4B 3F 8D 00 00 00 5B 08 +R 00 00 00 09 82 09 00 09 +T 00 02 0C +R 00 00 00 09 +T 00 02 0C +R 00 00 00 09 +T 00 02 0C 5B 0F 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/expf.sym b/device/lib/stm8-large/expf.sym new file mode 100644 index 0000000..a348a32 --- /dev/null +++ b/device/lib/stm8-large/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 20F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/fabsf.asm b/device/lib/stm8-large/fabsf.asm new file mode 100644 index 0000000..0aa8996 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0a, sp) + ldw (0x03, sp), y + ldw y, (0x08, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/fabsf.lst b/device/lib/stm8-large/fabsf.lst new file mode 100644 index 0000000..94ef730 --- /dev/null +++ b/device/lib/stm8-large/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 0A [ 2] 56 ldw y, (0x0a, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 08 [ 2] 58 ldw y, (0x08, 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 87 [ 5] 72 retf + 73 .area CODE + 74 .area CONST + 75 .area INITIALIZER + 76 .area CABS (ABS) diff --git a/device/lib/stm8-large/fabsf.rel b/device/lib/stm8-large/fabsf.rel new file mode 100644 index 0000000..4d13d50 --- /dev/null +++ b/device/lib/stm8-large/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 0A 17 03 16 08 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/fabsf.sym b/device/lib/stm8-large/fabsf.sym new file mode 100644 index 0000000..5d2c7b3 --- /dev/null +++ b/device/lib/stm8-large/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-large/floorf.asm b/device/lib/stm8-large/floorf.asm new file mode 100644 index 0000000..297cc3f --- /dev/null +++ b/device/lib/stm8-large/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, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + callf ___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 + callf ___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, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + callf ___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 + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/floorf.lst b/device/lib/stm8-large/floorf.lst new file mode 100644 index 0000000..86cd067 --- /dev/null +++ b/device/lib/stm8-large/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 0E [ 2] 56 ldw x, (0x0e, sp) + 000004 89 [ 2] 57 pushw x + 000005 1E 0E [ 2] 58 ldw x, (0x0e, sp) + 000007 89 [ 2] 59 pushw x + 000008 8Ds00r00r00 [ 5] 60 callf ___fs2slong + 00000C 5B 04 [ 2] 61 addw sp, #4 + 00000E 1F 03 [ 2] 62 ldw (0x03, sp), x + 000010 17 01 [ 2] 63 ldw (0x01, sp), y + 64 ; ../floorf.c: 38: return (r+((r>x)?-1:0)); + 000012 1E 03 [ 2] 65 ldw x, (0x03, sp) + 000014 89 [ 2] 66 pushw x + 000015 1E 03 [ 2] 67 ldw x, (0x03, sp) + 000017 89 [ 2] 68 pushw x + 000018 8Ds00r00r00 [ 5] 69 callf ___slong2fs + 00001C 5B 04 [ 2] 70 addw sp, #4 + 00001E 1F 07 [ 2] 71 ldw (0x07, sp), x + 000020 17 05 [ 2] 72 ldw (0x05, sp), y + 73 ; ../floorf.c: 37: if (r<=0) + 000022 5F [ 1] 74 clrw x + 000023 13 03 [ 2] 75 cpw x, (0x03, sp) + 000025 4F [ 1] 76 clr a + 000026 12 02 [ 1] 77 sbc a, (0x02, sp) + 000028 4F [ 1] 78 clr a + 000029 12 01 [ 1] 79 sbc a, (0x01, sp) + 00002B 2F 35 [ 1] 80 jrslt 00102$ + 81 ; ../floorf.c: 38: return (r+((r>x)?-1:0)); + 00002D 1E 07 [ 2] 82 ldw x, (0x07, sp) + 00002F 89 [ 2] 83 pushw x + 000030 1E 07 [ 2] 84 ldw x, (0x07, sp) + 000032 89 [ 2] 85 pushw x + 000033 1E 12 [ 2] 86 ldw x, (0x12, sp) + 000035 89 [ 2] 87 pushw x + 000036 1E 12 [ 2] 88 ldw x, (0x12, sp) + 000038 89 [ 2] 89 pushw x + 000039 8Ds00r00r00 [ 5] 90 callf ___fslt + 00003D 5B 08 [ 2] 91 addw sp, #8 + 00003F 4D [ 1] 92 tnz a + 000040 27 03 [ 1] 93 jreq 00106$ + 000042 5F [ 1] 94 clrw x + 000043 5A [ 2] 95 decw x + 000044 21 96 .byte 0x21 + 000045 97 00106$: + 000045 5F [ 1] 98 clrw x + 000046 99 00107$: + 000046 51 [ 1] 100 exgw x, y + 000047 5F [ 1] 101 clrw x + 000048 90 5D [ 2] 102 tnzw y + 00004A 2A 01 [ 1] 103 jrpl 00120$ + 00004C 5A [ 2] 104 decw x + 00004D 105 00120$: + 00004D 72 F9 03 [ 2] 106 addw y, (0x03, sp) + 000050 9F [ 1] 107 ld a, xl + 000051 19 02 [ 1] 108 adc a, (0x02, sp) + 000053 02 [ 1] 109 rlwa x + 000054 19 01 [ 1] 110 adc a, (0x01, sp) + 000056 95 [ 1] 111 ld xh, a + 000057 90 89 [ 2] 112 pushw y + 000059 89 [ 2] 113 pushw x + 00005A 8Ds00r00r00 [ 5] 114 callf ___slong2fs + 00005E 5B 04 [ 2] 115 addw sp, #4 + 000060 20 04 [ 2] 116 jra 00104$ + 000062 117 00102$: + 118 ; ../floorf.c: 40: return r; + 000062 1E 07 [ 2] 119 ldw x, (0x07, sp) + 000064 16 05 [ 2] 120 ldw y, (0x05, sp) + 000066 121 00104$: + 122 ; ../floorf.c: 41: } + 000066 5B 08 [ 2] 123 addw sp, #8 + 000068 87 [ 5] 124 retf + 125 .area CODE + 126 .area CONST + 127 .area INITIALIZER + 128 .area CABS (ABS) diff --git a/device/lib/stm8-large/floorf.rel b/device/lib/stm8-large/floorf.rel new file mode 100644 index 0000000..a11d7de --- /dev/null +++ b/device/lib/stm8-large/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 69 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 0E 89 1E 0E 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 89 1E +R 00 00 00 09 82 03 00 01 +T 00 00 16 03 89 8D 00 00 00 5B 04 1F 07 17 05 5F +R 00 00 00 09 82 06 00 00 +T 00 00 23 13 03 4F 12 02 4F 12 01 2F 35 1E 07 89 +R 00 00 00 09 +T 00 00 30 1E 07 89 1E 12 89 1E 12 89 8D +R 00 00 00 09 +T 00 00 3A 00 00 00 5B 08 4D 27 03 5F 5A 21 +R 00 00 00 09 82 03 00 02 +T 00 00 45 +R 00 00 00 09 +T 00 00 45 5F +R 00 00 00 09 +T 00 00 46 +R 00 00 00 09 +T 00 00 46 51 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 4D +R 00 00 00 09 +T 00 00 4D 72 F9 03 9F 19 02 02 19 01 95 90 89 89 +R 00 00 00 09 +T 00 00 5A 8D 00 00 00 5B 04 20 04 +R 00 00 00 09 82 04 00 00 +T 00 00 62 +R 00 00 00 09 +T 00 00 62 1E 07 16 05 +R 00 00 00 09 +T 00 00 66 +R 00 00 00 09 +T 00 00 66 5B 08 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/floorf.sym b/device/lib/stm8-large/floorf.sym new file mode 100644 index 0000000..1547c13 --- /dev/null +++ b/device/lib/stm8-large/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 69 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/free.asm b/device/lib/stm8-large/free.asm new file mode 100644 index 0000000..b50c3e6 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0e, 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, (0x0e, 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, (0x0e, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/free.lst b/device/lib/stm8-large/free.lst new file mode 100644 index 0000000..08639cb --- /dev/null +++ b/device/lib/stm8-large/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 0E [ 2] 56 ldw x, (0x0e, 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 0E [ 2] 70 ldw y, (0x0e, 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 0E [ 2] 89 ldw x, (0x0e, 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 87 [ 5] 140 retf + 141 .area CODE + 142 .area CONST + 143 .area INITIALIZER + 144 .area CABS (ABS) diff --git a/device/lib/stm8-large/free.rel b/device/lib/stm8-large/free.rel new file mode 100644 index 0000000..bc9374e --- /dev/null +++ b/device/lib/stm8-large/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 0E 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 0E 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 0E 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/free.sym b/device/lib/stm8-large/free.sym new file mode 100644 index 0000000..0aea47f --- /dev/null +++ b/device/lib/stm8-large/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-large/frexpf.asm b/device/lib/stm8-large/frexpf.asm new file mode 100644 index 0000000..2bf9b5b --- /dev/null +++ b/device/lib/stm8-large/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, (0x0e, sp) + ldw (0x03, sp), y + ldw y, (0x0c, 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, (0x10, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/frexpf.lst b/device/lib/stm8-large/frexpf.lst new file mode 100644 index 0000000..99d64ea --- /dev/null +++ b/device/lib/stm8-large/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 0E [ 2] 56 ldw y, (0x0e, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 0C [ 2] 58 ldw y, (0x0c, 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 10 [ 2] 96 ldw x, (0x10, 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 87 [ 5] 124 retf + 125 .area CODE + 126 .area CONST + 127 .area INITIALIZER + 128 .area CABS (ABS) diff --git a/device/lib/stm8-large/frexpf.rel b/device/lib/stm8-large/frexpf.rel new file mode 100644 index 0000000..e5bf4ac --- /dev/null +++ b/device/lib/stm8-large/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 0E 17 03 16 0C 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 10 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/frexpf.sym b/device/lib/stm8-large/frexpf.sym new file mode 100644 index 0000000..848eb1c --- /dev/null +++ b/device/lib/stm8-large/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-large/gets.asm b/device/lib/stm8-large/gets.asm new file mode 100644 index 0000000..088877a --- /dev/null +++ b/device/lib/stm8-large/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 (); + callf _getchar + ld a, xl +; ../gets.c: 40: switch(c) + cp a, #0x08 + jreq 00101$ +; ../gets.c: 57: *s = 0; + ldw x, (0x06, 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 + callf _putchar + addw sp, #2 +; ../gets.c: 46: putchar (' '); + push #0x20 + push #0x00 + callf _putchar + addw sp, #2 +; ../gets.c: 47: putchar ('\b'); + push #0x08 + push #0x00 + callf _putchar + addw sp, #2 +; ../gets.c: 48: --s; + ldw x, (0x06, sp) + decw x + ldw (0x06, 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 + callf _putchar + addw sp, #2 + push #0x0a + push #0x00 + callf _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 (0x06, 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 + callf _putchar + addw sp, #2 +; ../gets.c: 65: } + jra 00109$ +00111$: +; ../gets.c: 67: } + addw sp, #2 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/gets.lst b/device/lib/stm8-large/gets.lst new file mode 100644 index 0000000..256779a --- /dev/null +++ b/device/lib/stm8-large/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 8Ds00r00r00 [ 5] 63 callf _getchar + 000009 9F [ 1] 64 ld a, xl + 65 ; ../gets.c: 40: switch(c) + 00000A A1 08 [ 1] 66 cp a, #0x08 + 00000C 27 0C [ 1] 67 jreq 00101$ + 68 ; ../gets.c: 57: *s = 0; + 00000E 1E 06 [ 2] 69 ldw x, (0x06, sp) + 70 ; ../gets.c: 40: switch(c) + 000010 A1 0A [ 1] 71 cp a, #0x0a + 000012 27 34 [ 1] 72 jreq 00105$ + 000014 A1 0D [ 1] 73 cp a, #0x0d + 000016 27 30 [ 1] 74 jreq 00105$ + 000018 20 47 [ 2] 75 jra 00106$ + 76 ; ../gets.c: 42: case '\b': /* backspace */ + 00001A 77 00101$: + 78 ; ../gets.c: 43: if (count) + 00001A 1E 01 [ 2] 79 ldw x, (0x01, sp) + 00001C 27 E7 [ 1] 80 jreq 00109$ + 81 ; ../gets.c: 45: putchar ('\b'); + 00001E 4B 08 [ 1] 82 push #0x08 + 000020 4B 00 [ 1] 83 push #0x00 + 000022 8Ds00r00r00 [ 5] 84 callf _putchar + 000026 5B 02 [ 2] 85 addw sp, #2 + 86 ; ../gets.c: 46: putchar (' '); + 000028 4B 20 [ 1] 87 push #0x20 + 00002A 4B 00 [ 1] 88 push #0x00 + 00002C 8Ds00r00r00 [ 5] 89 callf _putchar + 000030 5B 02 [ 2] 90 addw sp, #2 + 91 ; ../gets.c: 47: putchar ('\b'); + 000032 4B 08 [ 1] 92 push #0x08 + 000034 4B 00 [ 1] 93 push #0x00 + 000036 8Ds00r00r00 [ 5] 94 callf _putchar + 00003A 5B 02 [ 2] 95 addw sp, #2 + 96 ; ../gets.c: 48: --s; + 00003C 1E 06 [ 2] 97 ldw x, (0x06, sp) + 00003E 5A [ 2] 98 decw x + 00003F 1F 06 [ 2] 99 ldw (0x06, sp), x + 100 ; ../gets.c: 49: --count; + 000041 1E 01 [ 2] 101 ldw x, (0x01, sp) + 000043 5A [ 2] 102 decw x + 000044 1F 01 [ 2] 103 ldw (0x01, sp), x + 104 ; ../gets.c: 51: break; + 000046 20 BD [ 2] 105 jra 00109$ + 106 ; ../gets.c: 54: case '\r': /* CR or LF */ + 000048 107 00105$: + 108 ; ../gets.c: 55: putchar ('\r'); + 000048 89 [ 2] 109 pushw x + 000049 4B 0D [ 1] 110 push #0x0d + 00004B 4B 00 [ 1] 111 push #0x00 + 00004D 8Ds00r00r00 [ 5] 112 callf _putchar + 000051 5B 02 [ 2] 113 addw sp, #2 + 000053 4B 0A [ 1] 114 push #0x0a + 000055 4B 00 [ 1] 115 push #0x00 + 000057 8Ds00r00r00 [ 5] 116 callf _putchar + 00005B 5B 02 [ 2] 117 addw sp, #2 + 00005D 85 [ 2] 118 popw x + 119 ; ../gets.c: 57: *s = 0; + 00005E 7F [ 1] 120 clr (x) + 121 ; ../gets.c: 58: return s; + 00005F 20 14 [ 2] 122 jra 00111$ + 123 ; ../gets.c: 60: default: + 000061 124 00106$: + 125 ; ../gets.c: 61: *s++ = c; + 000061 F7 [ 1] 126 ld (x), a + 000062 5C [ 1] 127 incw x + 000063 1F 06 [ 2] 128 ldw (0x06, sp), x + 129 ; ../gets.c: 62: ++count; + 000065 1E 01 [ 2] 130 ldw x, (0x01, sp) + 000067 5C [ 1] 131 incw x + 000068 1F 01 [ 2] 132 ldw (0x01, sp), x + 133 ; ../gets.c: 63: putchar (c); + 00006A 5F [ 1] 134 clrw x + 00006B 97 [ 1] 135 ld xl, a + 00006C 89 [ 2] 136 pushw x + 00006D 8Ds00r00r00 [ 5] 137 callf _putchar + 000071 5B 02 [ 2] 138 addw sp, #2 + 139 ; ../gets.c: 65: } + 000073 20 90 [ 2] 140 jra 00109$ + 000075 141 00111$: + 142 ; ../gets.c: 67: } + 000075 5B 02 [ 2] 143 addw sp, #2 + 000077 87 [ 5] 144 retf + 145 .area CODE + 146 .area CONST + 147 .area INITIALIZER + 148 .area CABS (ABS) diff --git a/device/lib/stm8-large/gets.rel b/device/lib/stm8-large/gets.rel new file mode 100644 index 0000000..be5f23e --- /dev/null +++ b/device/lib/stm8-large/gets.rel @@ -0,0 +1,57 @@ +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 78 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 8D 00 00 00 9F A1 08 27 0C 1E 06 A1 0A +R 00 00 00 09 82 04 00 02 +T 00 00 12 27 34 A1 0D 27 30 20 47 +R 00 00 00 09 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 1E 01 27 E7 4B 08 4B 00 8D +R 00 00 00 09 +T 00 00 23 00 00 00 5B 02 4B 20 4B 00 8D +R 00 00 00 09 82 03 00 00 +T 00 00 2D 00 00 00 5B 02 4B 08 4B 00 8D +R 00 00 00 09 82 03 00 00 +T 00 00 37 00 00 00 5B 02 1E 06 5A 1F 06 1E 01 5A +R 00 00 00 09 82 03 00 00 +T 00 00 44 1F 01 20 BD +R 00 00 00 09 +T 00 00 48 +R 00 00 00 09 +T 00 00 48 89 4B 0D 4B 00 8D 00 00 00 5B 02 4B 0A +R 00 00 00 09 82 09 00 00 +T 00 00 55 4B 00 8D 00 00 00 5B 02 85 7F 20 14 +R 00 00 00 09 82 06 00 00 +T 00 00 61 +R 00 00 00 09 +T 00 00 61 F7 5C 1F 06 1E 01 5C 1F 01 5F 97 89 8D +R 00 00 00 09 +T 00 00 6E 00 00 00 5B 02 20 90 +R 00 00 00 09 82 03 00 00 +T 00 00 75 +R 00 00 00 09 +T 00 00 75 5B 02 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/gets.sym b/device/lib/stm8-large/gets.sym new file mode 100644 index 0000000..c6b3c13 --- /dev/null +++ b/device/lib/stm8-large/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 78 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/heap.lst b/device/lib/stm8-large/heap.lst new file mode 100644 index 0000000..d9bea1b --- /dev/null +++ b/device/lib/stm8-large/heap.lst @@ -0,0 +1,42 @@ + 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 8Ds00r00r00 [ 5] 34 callf ___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 + 42 diff --git a/device/lib/stm8-large/heap.rel b/device/lib/stm8-large/heap.rel new file mode 100644 index 0000000..9f59f58 --- /dev/null +++ b/device/lib/stm8-large/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 4 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 8D 00 00 00 +R 00 00 00 01 82 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-large/heap.s b/device/lib/stm8-large/heap.s new file mode 100644 index 0000000..a1578fe --- /dev/null +++ b/device/lib/stm8-large/heap.s @@ -0,0 +1,42 @@ +;-------------------------------------------------------------------------- +; 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 + callf ___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-large/heap.sym b/device/lib/stm8-large/heap.sym new file mode 100644 index 0000000..68c8cff --- /dev/null +++ b/device/lib/stm8-large/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 4 flags 0 + 2 DATA size 400 flags 0 + diff --git a/device/lib/stm8-large/isalnum.asm b/device/lib/stm8-large/isalnum.asm new file mode 100644 index 0000000..5e26eea --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, sp) + pushw x + callf _isalpha + addw sp, #2 + tnzw x + jrne 00105$ + ldw x, (0x04, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isalnum.lst b/device/lib/stm8-large/isalnum.lst new file mode 100644 index 0000000..49f614d --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 56 ldw x, (0x04, sp) + 000002 89 [ 2] 57 pushw x + 000003 8Ds00r00r00 [ 5] 58 callf _isalpha + 000007 5B 02 [ 2] 59 addw sp, #2 + 000009 5D [ 2] 60 tnzw x + 00000A 26 0D [ 1] 61 jrne 00105$ + 00000C 1E 04 [ 2] 62 ldw x, (0x04, sp) + 63 ; ./../../include/ctype.h: 62: return ((unsigned char)c >= '0' && (unsigned char)c <= '9'); + 00000E 9F [ 1] 64 ld a, xl + 00000F A1 30 [ 1] 65 cp a, #0x30 + 000011 25 04 [ 1] 66 jrc 00109$ + 000013 A1 39 [ 1] 67 cp a, #0x39 + 000015 23 02 [ 2] 68 jrule 00105$ + 000017 69 00109$: + 70 ; ../isalnum.c: 39: return (isalpha (c) || isdigit (c)); + 000017 4F [ 1] 71 clr a + 000018 C5 72 .byte 0xc5 + 000019 73 00105$: + 000019 A6 01 [ 1] 74 ld a, #0x01 + 00001B 75 00106$: + 00001B 5F [ 1] 76 clrw x + 00001C 97 [ 1] 77 ld xl, a + 78 ; ../isalnum.c: 40: } + 00001D 87 [ 5] 79 retf + 80 .area CODE + 81 .area CONST + 82 .area INITIALIZER + 83 .area CABS (ABS) diff --git a/device/lib/stm8-large/isalnum.rel b/device/lib/stm8-large/isalnum.rel new file mode 100644 index 0000000..33988d6 --- /dev/null +++ b/device/lib/stm8-large/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 1E 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 04 89 8D 00 00 00 5B 02 5D 26 0D 1E +R 00 00 00 09 82 07 00 00 +T 00 00 0D 04 9F A1 30 25 04 A1 39 23 02 +R 00 00 00 09 +T 00 00 17 +R 00 00 00 09 +T 00 00 17 4F C5 +R 00 00 00 09 +T 00 00 19 +R 00 00 00 09 +T 00 00 19 A6 01 +R 00 00 00 09 +T 00 00 1B +R 00 00 00 09 +T 00 00 1B 5F 97 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isalnum.sym b/device/lib/stm8-large/isalnum.sym new file mode 100644 index 0000000..84aced9 --- /dev/null +++ b/device/lib/stm8-large/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 1E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/isalpha.asm b/device/lib/stm8-large/isalpha.asm new file mode 100644 index 0000000..f4547bb --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isalpha.lst b/device/lib/stm8-large/isalpha.lst new file mode 100644 index 0000000..eb8d146 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 55 ldw x, (0x04, 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 87 [ 5] 78 retf + 79 .area CODE + 80 .area CONST + 81 .area INITIALIZER + 82 .area CABS (ABS) diff --git a/device/lib/stm8-large/isalpha.rel b/device/lib/stm8-large/isalpha.rel new file mode 100644 index 0000000..f735c32 --- /dev/null +++ b/device/lib/stm8-large/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 04 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isalpha.sym b/device/lib/stm8-large/isalpha.sym new file mode 100644 index 0000000..45c6885 --- /dev/null +++ b/device/lib/stm8-large/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-large/isblank.asm b/device/lib/stm8-large/isblank.asm new file mode 100644 index 0000000..c3ce451 --- /dev/null +++ b/device/lib/stm8-large/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, (0x05, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isblank.lst b/device/lib/stm8-large/isblank.lst new file mode 100644 index 0000000..6743603 --- /dev/null +++ b/device/lib/stm8-large/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 05 [ 1] 55 ld a, (0x05, 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 87 [ 5] 68 retf + 69 .area CODE + 70 .area CONST + 71 .area INITIALIZER + 72 .area CABS (ABS) diff --git a/device/lib/stm8-large/isblank.rel b/device/lib/stm8-large/isblank.rel new file mode 100644 index 0000000..41e3813 --- /dev/null +++ b/device/lib/stm8-large/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 05 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isblank.sym b/device/lib/stm8-large/isblank.sym new file mode 100644 index 0000000..9196205 --- /dev/null +++ b/device/lib/stm8-large/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-large/iscntrl.asm b/device/lib/stm8-large/iscntrl.asm new file mode 100644 index 0000000..750cae4 --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/iscntrl.lst b/device/lib/stm8-large/iscntrl.lst new file mode 100644 index 0000000..7f44dc7 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 55 ldw x, (0x04, 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 87 [ 5] 68 retf + 69 .area CODE + 70 .area CONST + 71 .area INITIALIZER + 72 .area CABS (ABS) diff --git a/device/lib/stm8-large/iscntrl.rel b/device/lib/stm8-large/iscntrl.rel new file mode 100644 index 0000000..41dc3c0 --- /dev/null +++ b/device/lib/stm8-large/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 04 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/iscntrl.sym b/device/lib/stm8-large/iscntrl.sym new file mode 100644 index 0000000..95997e6 --- /dev/null +++ b/device/lib/stm8-large/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-large/isdigit.asm b/device/lib/stm8-large/isdigit.asm new file mode 100644 index 0000000..41e73a0 --- /dev/null +++ b/device/lib/stm8-large/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, (0x05, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isdigit.lst b/device/lib/stm8-large/isdigit.lst new file mode 100644 index 0000000..78c31b7 --- /dev/null +++ b/device/lib/stm8-large/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 05 [ 1] 55 ld a, (0x05, 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 87 [ 5] 69 retf + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8-large/isdigit.rel b/device/lib/stm8-large/isdigit.rel new file mode 100644 index 0000000..288c463 --- /dev/null +++ b/device/lib/stm8-large/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 05 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isdigit.sym b/device/lib/stm8-large/isdigit.sym new file mode 100644 index 0000000..969a593 --- /dev/null +++ b/device/lib/stm8-large/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-large/isgraph.asm b/device/lib/stm8-large/isgraph.asm new file mode 100644 index 0000000..abeaf87 --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isgraph.lst b/device/lib/stm8-large/isgraph.lst new file mode 100644 index 0000000..ed9eb73 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 55 ldw x, (0x04, 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 87 [ 5] 69 retf + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8-large/isgraph.rel b/device/lib/stm8-large/isgraph.rel new file mode 100644 index 0000000..f19324b --- /dev/null +++ b/device/lib/stm8-large/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 04 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isgraph.sym b/device/lib/stm8-large/isgraph.sym new file mode 100644 index 0000000..29f5059 --- /dev/null +++ b/device/lib/stm8-large/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-large/isinf.asm b/device/lib/stm8-large/isinf.asm new file mode 100644 index 0000000..e3ed63e --- /dev/null +++ b/device/lib/stm8-large/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, #4 +; ../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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isinf.lst b/device/lib/stm8-large/isinf.lst new file mode 100644 index 0000000..7883aa2 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 56 addw x, #4 + 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 87 [ 5] 79 retf + 80 .area CODE + 81 .area CONST + 82 .area INITIALIZER + 83 .area CABS (ABS) diff --git a/device/lib/stm8-large/isinf.rel b/device/lib/stm8-large/isinf.rel new file mode 100644 index 0000000..0e1c6ab --- /dev/null +++ b/device/lib/stm8-large/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 04 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isinf.sym b/device/lib/stm8-large/isinf.sym new file mode 100644 index 0000000..bbf8f20 --- /dev/null +++ b/device/lib/stm8-large/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-large/islower.asm b/device/lib/stm8-large/islower.asm new file mode 100644 index 0000000..98ad607 --- /dev/null +++ b/device/lib/stm8-large/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, (0x05, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/islower.lst b/device/lib/stm8-large/islower.lst new file mode 100644 index 0000000..c080ab7 --- /dev/null +++ b/device/lib/stm8-large/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 05 [ 1] 55 ld a, (0x05, 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 87 [ 5] 69 retf + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8-large/islower.rel b/device/lib/stm8-large/islower.rel new file mode 100644 index 0000000..66453c4 --- /dev/null +++ b/device/lib/stm8-large/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 05 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/islower.sym b/device/lib/stm8-large/islower.sym new file mode 100644 index 0000000..1980d64 --- /dev/null +++ b/device/lib/stm8-large/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-large/isnan.asm b/device/lib/stm8-large/isnan.asm new file mode 100644 index 0000000..164733d --- /dev/null +++ b/device/lib/stm8-large/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, #8 +; ../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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isnan.lst b/device/lib/stm8-large/isnan.lst new file mode 100644 index 0000000..994b8e8 --- /dev/null +++ b/device/lib/stm8-large/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 08 [ 2] 57 addw x, #8 + 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 87 [ 5] 81 retf + 82 .area CODE + 83 .area CONST + 84 .area INITIALIZER + 85 .area CABS (ABS) diff --git a/device/lib/stm8-large/isnan.rel b/device/lib/stm8-large/isnan.rel new file mode 100644 index 0000000..413b83a --- /dev/null +++ b/device/lib/stm8-large/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 08 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isnan.sym b/device/lib/stm8-large/isnan.sym new file mode 100644 index 0000000..2894d02 --- /dev/null +++ b/device/lib/stm8-large/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-large/isprint.asm b/device/lib/stm8-large/isprint.asm new file mode 100644 index 0000000..49228b2 --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isprint.lst b/device/lib/stm8-large/isprint.lst new file mode 100644 index 0000000..83b7972 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 55 ldw x, (0x04, 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 87 [ 5] 69 retf + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8-large/isprint.rel b/device/lib/stm8-large/isprint.rel new file mode 100644 index 0000000..013b6fa --- /dev/null +++ b/device/lib/stm8-large/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 04 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isprint.sym b/device/lib/stm8-large/isprint.sym new file mode 100644 index 0000000..9f150ee --- /dev/null +++ b/device/lib/stm8-large/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-large/ispunct.asm b/device/lib/stm8-large/ispunct.asm new file mode 100644 index 0000000..c9a0b02 --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, sp) + pushw x + callf _isprint + addw sp, #2 + tnzw x + jreq 00103$ + ldw x, (0x04, sp) + pushw x + callf _isspace + addw sp, #2 + tnzw x + jrne 00103$ + ldw x, (0x04, sp) + pushw x + callf _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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/ispunct.lst b/device/lib/stm8-large/ispunct.lst new file mode 100644 index 0000000..eeb01a4 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 58 ldw x, (0x04, sp) + 000002 89 [ 2] 59 pushw x + 000003 8Ds00r00r00 [ 5] 60 callf _isprint + 000007 5B 02 [ 2] 61 addw sp, #2 + 000009 5D [ 2] 62 tnzw x + 00000A 27 18 [ 1] 63 jreq 00103$ + 00000C 1E 04 [ 2] 64 ldw x, (0x04, sp) + 00000E 89 [ 2] 65 pushw x + 00000F 8Ds00r00r00 [ 5] 66 callf _isspace + 000013 5B 02 [ 2] 67 addw sp, #2 + 000015 5D [ 2] 68 tnzw x + 000016 26 0C [ 1] 69 jrne 00103$ + 000018 1E 04 [ 2] 70 ldw x, (0x04, sp) + 00001A 89 [ 2] 71 pushw x + 00001B 8Ds00r00r00 [ 5] 72 callf _isalnum + 00001F 5B 02 [ 2] 73 addw sp, #2 + 000021 5D [ 2] 74 tnzw x + 000022 27 02 [ 1] 75 jreq 00104$ + 000024 76 00103$: + 000024 4F [ 1] 77 clr a + 000025 C5 78 .byte 0xc5 + 000026 79 00104$: + 000026 A6 01 [ 1] 80 ld a, #0x01 + 000028 81 00105$: + 000028 5F [ 1] 82 clrw x + 000029 97 [ 1] 83 ld xl, a + 84 ; ../ispunct.c: 36: } + 00002A 87 [ 5] 85 retf + 86 .area CODE + 87 .area CONST + 88 .area INITIALIZER + 89 .area CABS (ABS) diff --git a/device/lib/stm8-large/ispunct.rel b/device/lib/stm8-large/ispunct.rel new file mode 100644 index 0000000..dd5c47c --- /dev/null +++ b/device/lib/stm8-large/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 2B 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 04 89 8D 00 00 00 5B 02 5D 27 18 1E +R 00 00 00 09 82 07 00 03 +T 00 00 0D 04 89 8D 00 00 00 5B 02 5D 26 0C 1E 04 +R 00 00 00 09 82 06 00 00 +T 00 00 1A 89 8D 00 00 00 5B 02 5D 27 02 +R 00 00 00 09 82 05 00 01 +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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/ispunct.sym b/device/lib/stm8-large/ispunct.sym new file mode 100644 index 0000000..4ddc6e4 --- /dev/null +++ b/device/lib/stm8-large/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 2B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/isspace.asm b/device/lib/stm8-large/isspace.asm new file mode 100644 index 0000000..ce3654c --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, sp) + cpw x, #0x0020 + jreq 00104$ + ldw x, (0x04, sp) + cpw x, #0x000c + jreq 00104$ + ldw x, (0x04, sp) + cpw x, #0x000a + jreq 00104$ + ldw x, (0x04, sp) + cpw x, #0x000d + jreq 00104$ + ldw x, (0x04, sp) + cpw x, #0x0009 + jreq 00104$ + ldw x, (0x04, sp) + cpw x, #0x000b + jreq 00104$ + clr a + .byte 0xc5 +00104$: + ld a, #0x01 +00105$: + clrw x + ld xl, a +; ../isspace.c: 40: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isspace.lst b/device/lib/stm8-large/isspace.lst new file mode 100644 index 0000000..bf987da --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 55 ldw x, (0x04, sp) + 000002 A3 00 20 [ 2] 56 cpw x, #0x0020 + 000005 27 25 [ 1] 57 jreq 00104$ + 000007 1E 04 [ 2] 58 ldw x, (0x04, sp) + 000009 A3 00 0C [ 2] 59 cpw x, #0x000c + 00000C 27 1E [ 1] 60 jreq 00104$ + 00000E 1E 04 [ 2] 61 ldw x, (0x04, sp) + 000010 A3 00 0A [ 2] 62 cpw x, #0x000a + 000013 27 17 [ 1] 63 jreq 00104$ + 000015 1E 04 [ 2] 64 ldw x, (0x04, sp) + 000017 A3 00 0D [ 2] 65 cpw x, #0x000d + 00001A 27 10 [ 1] 66 jreq 00104$ + 00001C 1E 04 [ 2] 67 ldw x, (0x04, sp) + 00001E A3 00 09 [ 2] 68 cpw x, #0x0009 + 000021 27 09 [ 1] 69 jreq 00104$ + 000023 1E 04 [ 2] 70 ldw x, (0x04, 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 87 [ 5] 81 retf + 82 .area CODE + 83 .area CONST + 84 .area INITIALIZER + 85 .area CABS (ABS) diff --git a/device/lib/stm8-large/isspace.rel b/device/lib/stm8-large/isspace.rel new file mode 100644 index 0000000..0f585f7 --- /dev/null +++ b/device/lib/stm8-large/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 04 A3 00 20 27 25 1E 04 A3 00 0C 27 +R 00 00 00 09 +T 00 00 0D 1E 1E 04 A3 00 0A 27 17 1E 04 A3 00 0D +R 00 00 00 09 +T 00 00 1A 27 10 1E 04 A3 00 09 27 09 1E 04 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isspace.sym b/device/lib/stm8-large/isspace.sym new file mode 100644 index 0000000..2fb2f16 --- /dev/null +++ b/device/lib/stm8-large/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-large/isupper.asm b/device/lib/stm8-large/isupper.asm new file mode 100644 index 0000000..70822ab --- /dev/null +++ b/device/lib/stm8-large/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, (0x05, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isupper.lst b/device/lib/stm8-large/isupper.lst new file mode 100644 index 0000000..ee1659c --- /dev/null +++ b/device/lib/stm8-large/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 05 [ 1] 55 ld a, (0x05, 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 87 [ 5] 69 retf + 70 .area CODE + 71 .area CONST + 72 .area INITIALIZER + 73 .area CABS (ABS) diff --git a/device/lib/stm8-large/isupper.rel b/device/lib/stm8-large/isupper.rel new file mode 100644 index 0000000..cd4fff4 --- /dev/null +++ b/device/lib/stm8-large/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 05 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isupper.sym b/device/lib/stm8-large/isupper.sym new file mode 100644 index 0000000..36605ab --- /dev/null +++ b/device/lib/stm8-large/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-large/isxdigit.asm b/device/lib/stm8-large/isxdigit.asm new file mode 100644 index 0000000..8433f9e --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, sp) + cpw x, #0x0030 + jrslt 00111$ + cpw x, #0x0039 + jrsle 00104$ +00111$: + ldw x, (0x04, sp) + cpw x, #0x0061 + jrslt 00108$ + cpw x, #0x0066 + jrsle 00104$ +00108$: + ldw x, (0x04, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/isxdigit.lst b/device/lib/stm8-large/isxdigit.lst new file mode 100644 index 0000000..0c36aff --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 55 ldw x, (0x04, 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 04 [ 2] 61 ldw x, (0x04, 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 04 [ 2] 67 ldw x, (0x04, 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 87 [ 5] 81 retf + 82 .area CODE + 83 .area CONST + 84 .area INITIALIZER + 85 .area CABS (ABS) diff --git a/device/lib/stm8-large/isxdigit.rel b/device/lib/stm8-large/isxdigit.rel new file mode 100644 index 0000000..49baa05 --- /dev/null +++ b/device/lib/stm8-large/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 04 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 04 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 04 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/isxdigit.sym b/device/lib/stm8-large/isxdigit.sym new file mode 100644 index 0000000..a82eff3 --- /dev/null +++ b/device/lib/stm8-large/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-large/labs.asm b/device/lib/stm8-large/labs.asm new file mode 100644 index 0000000..3a6dde1 --- /dev/null +++ b/device/lib/stm8-large/labs.asm @@ -0,0 +1,74 @@ +;-------------------------------------------------------- +; 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 (0x04, sp) + jrpl 00103$ + ldw x, (0x06, sp) + negw x + ldw y, (0x04, sp) + jrnc 00111$ + incw y +00111$: + negw y + jra 00104$ +00103$: + ldw x, (0x06, sp) + ldw y, (0x04, sp) +00104$: +; ../labs.c: 66: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/labs.lst b/device/lib/stm8-large/labs.lst new file mode 100644 index 0000000..ba9653a --- /dev/null +++ b/device/lib/stm8-large/labs.lst @@ -0,0 +1,74 @@ + 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 04 [ 1] 55 tnz (0x04, sp) + 000002 2A 0D [ 1] 56 jrpl 00103$ + 000004 1E 06 [ 2] 57 ldw x, (0x06, sp) + 000006 50 [ 2] 58 negw x + 000007 16 04 [ 2] 59 ldw y, (0x04, 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 20 04 [ 2] 64 jra 00104$ + 000011 65 00103$: + 000011 1E 06 [ 2] 66 ldw x, (0x06, sp) + 000013 16 04 [ 2] 67 ldw y, (0x04, sp) + 000015 68 00104$: + 69 ; ../labs.c: 66: } + 000015 87 [ 5] 70 retf + 71 .area CODE + 72 .area CONST + 73 .area INITIALIZER + 74 .area CABS (ABS) diff --git a/device/lib/stm8-large/labs.rel b/device/lib/stm8-large/labs.rel new file mode 100644 index 0000000..2a1952b --- /dev/null +++ b/device/lib/stm8-large/labs.rel @@ -0,0 +1,33 @@ +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 16 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 04 2A 0D 1E 06 50 16 04 24 02 90 5C +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 90 50 20 04 +R 00 00 00 09 +T 00 00 11 +R 00 00 00 09 +T 00 00 11 1E 06 16 04 +R 00 00 00 09 +T 00 00 15 +R 00 00 00 09 +T 00 00 15 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/labs.sym b/device/lib/stm8-large/labs.sym new file mode 100644 index 0000000..f3505d2 --- /dev/null +++ b/device/lib/stm8-large/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 16 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/ldexpf.asm b/device/lib/stm8-large/ldexpf.asm new file mode 100644 index 0000000..01af46b --- /dev/null +++ b/device/lib/stm8-large/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, (0x16, sp) + ldw (0x03, sp), y + ldw y, (0x14, 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, (0x18, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/ldexpf.lst b/device/lib/stm8-large/ldexpf.lst new file mode 100644 index 0000000..06784a0 --- /dev/null +++ b/device/lib/stm8-large/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 16 [ 2] 56 ldw y, (0x16, sp) + 000004 17 03 [ 2] 57 ldw (0x03, sp), y + 000006 16 14 [ 2] 58 ldw y, (0x14, 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 18 [ 2] 89 ldw x, (0x18, 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 87 [ 5] 151 retf + 152 .area CODE + 153 .area CONST + 154 .area INITIALIZER + 155 .area CABS (ABS) diff --git a/device/lib/stm8-large/ldexpf.rel b/device/lib/stm8-large/ldexpf.rel new file mode 100644 index 0000000..fddf435 --- /dev/null +++ b/device/lib/stm8-large/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 16 17 03 16 14 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 18 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/ldexpf.sym b/device/lib/stm8-large/ldexpf.sym new file mode 100644 index 0000000..6eeb201 --- /dev/null +++ b/device/lib/stm8-large/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-large/log10f.asm b/device/lib/stm8-large/log10f.asm new file mode 100644 index 0000000..3f07752 --- /dev/null +++ b/device/lib/stm8-large/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, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + callf _logf + addw sp, #4 + pushw x + pushw y + push #0xd9 + push #0x5b + push #0xde + push #0x3e + callf ___fsmul + addw sp, #8 +; ../log10f.c: 37: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/log10f.lst b/device/lib/stm8-large/log10f.lst new file mode 100644 index 0000000..76dbb46 --- /dev/null +++ b/device/lib/stm8-large/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 06 [ 2] 56 ldw x, (0x06, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 06 [ 2] 58 ldw x, (0x06, sp) + 000005 89 [ 2] 59 pushw x + 000006 8Ds00r00r00 [ 5] 60 callf _logf + 00000A 5B 04 [ 2] 61 addw sp, #4 + 00000C 89 [ 2] 62 pushw x + 00000D 90 89 [ 2] 63 pushw y + 00000F 4B D9 [ 1] 64 push #0xd9 + 000011 4B 5B [ 1] 65 push #0x5b + 000013 4B DE [ 1] 66 push #0xde + 000015 4B 3E [ 1] 67 push #0x3e + 000017 8Ds00r00r00 [ 5] 68 callf ___fsmul + 00001B 5B 08 [ 2] 69 addw sp, #8 + 70 ; ../log10f.c: 37: } + 00001D 87 [ 5] 71 retf + 72 .area CODE + 73 .area CONST + 74 .area INITIALIZER + 75 .area CABS (ABS) diff --git a/device/lib/stm8-large/log10f.rel b/device/lib/stm8-large/log10f.rel new file mode 100644 index 0000000..174e5e4 --- /dev/null +++ b/device/lib/stm8-large/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 1E 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 06 89 1E 06 89 8D 00 00 00 5B 04 89 +R 00 00 00 09 82 0A 00 01 +T 00 00 0D 90 89 4B D9 4B 5B 4B DE 4B 3E 8D +R 00 00 00 09 +T 00 00 18 00 00 00 5B 08 87 +R 00 00 00 09 82 03 00 00 diff --git a/device/lib/stm8-large/log10f.sym b/device/lib/stm8-large/log10f.sym new file mode 100644 index 0000000..e6e30f7 --- /dev/null +++ b/device/lib/stm8-large/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 1E flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/logf.asm b/device/lib/stm8-large/logf.asm new file mode 100644 index 0000000..184b819 --- /dev/null +++ b/device/lib/stm8-large/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, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + clrw x + pushw x + clrw x + pushw x + callf ___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 + jpf 00106$ +00102$: +; ../logf.c: 231: f=frexpf(x, &n); + ldw x, sp + incw x + pushw x + ldw x, (0x16, sp) + pushw x + ldw x, (0x16, sp) + pushw x + callf _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 + callf ___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 + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + callf ___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 + callf ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/logf.lst b/device/lib/stm8-large/logf.lst new file mode 100644 index 0000000..1ad894a --- /dev/null +++ b/device/lib/stm8-large/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 14 [ 2] 57 ldw x, (0x14, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 14 [ 2] 59 ldw x, (0x14, 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 8Ds00r00r00 [ 5] 65 callf ___fslt + 000010 5B 08 [ 2] 66 addw sp, #8 + 000012 6B 0E [ 1] 67 ld (0x0e, sp), a + 000014 26 0D [ 1] 68 jrne 00102$ + 69 ; ../logf.c: 228: errno=EDOM; + 000016 AE 00 21 [ 2] 70 ldw x, #0x0021 + 000019 CFu00u00 [ 2] 71 ldw _errno+0, x + 72 ; ../logf.c: 229: return 0.0; + 00001C 5F [ 1] 73 clrw x + 00001D 90 5F [ 1] 74 clrw y + 00001F ACs00r01rF2 [ 2] 75 jpf 00106$ + 000023 76 00102$: + 77 ; ../logf.c: 231: f=frexpf(x, &n); + 000023 96 [ 1] 78 ldw x, sp + 000024 5C [ 1] 79 incw x + 000025 89 [ 2] 80 pushw x + 000026 1E 16 [ 2] 81 ldw x, (0x16, sp) + 000028 89 [ 2] 82 pushw x + 000029 1E 16 [ 2] 83 ldw x, (0x16, sp) + 00002B 89 [ 2] 84 pushw x + 00002C 8Ds00r00r00 [ 5] 85 callf _frexpf + 000030 5B 06 [ 2] 86 addw sp, #6 + 000032 1F 05 [ 2] 87 ldw (0x05, sp), x + 000034 17 03 [ 2] 88 ldw (0x03, sp), y + 89 ; ../logf.c: 232: znum=f-0.5; + 000036 5F [ 1] 90 clrw x + 000037 89 [ 2] 91 pushw x + 000038 4B 00 [ 1] 92 push #0x00 + 00003A 4B 3F [ 1] 93 push #0x3f + 00003C 1E 09 [ 2] 94 ldw x, (0x09, sp) + 00003E 89 [ 2] 95 pushw x + 00003F 1E 09 [ 2] 96 ldw x, (0x09, sp) + 000041 89 [ 2] 97 pushw x + 000042 8Ds00r00r00 [ 5] 98 callf ___fssub + 000046 5B 08 [ 2] 99 addw sp, #8 + 000048 1F 09 [ 2] 100 ldw (0x09, sp), x + 00004A 17 07 [ 2] 101 ldw (0x07, sp), y + 102 ; ../logf.c: 233: if (f>C0) + 00004C 1E 05 [ 2] 103 ldw x, (0x05, sp) + 00004E 89 [ 2] 104 pushw x + 00004F 1E 05 [ 2] 105 ldw x, (0x05, sp) + 000051 89 [ 2] 106 pushw x + 000052 4B F3 [ 1] 107 push #0xf3 + 000054 4B 04 [ 1] 108 push #0x04 + 000056 4B 35 [ 1] 109 push #0x35 + 000058 4B 3F [ 1] 110 push #0x3f + 00005A 8Ds00r00r00 [ 5] 111 callf ___fslt + 00005E 5B 08 [ 2] 112 addw sp, #8 + 000060 6B 0E [ 1] 113 ld (0x0e, sp), a + 000062 27 3F [ 1] 114 jreq 00104$ + 115 ; ../logf.c: 235: znum-=0.5; + 000064 5F [ 1] 116 clrw x + 000065 89 [ 2] 117 pushw x + 000066 4B 00 [ 1] 118 push #0x00 + 000068 4B 3F [ 1] 119 push #0x3f + 00006A 1E 0D [ 2] 120 ldw x, (0x0d, sp) + 00006C 89 [ 2] 121 pushw x + 00006D 1E 0D [ 2] 122 ldw x, (0x0d, sp) + 00006F 89 [ 2] 123 pushw x + 000070 8Ds00r00r00 [ 5] 124 callf ___fssub + 000074 5B 08 [ 2] 125 addw sp, #8 + 000076 1F 09 [ 2] 126 ldw (0x09, sp), x + 000078 17 07 [ 2] 127 ldw (0x07, sp), y + 128 ; ../logf.c: 236: zden=(f*0.5)+0.5; + 00007A 1E 05 [ 2] 129 ldw x, (0x05, sp) + 00007C 89 [ 2] 130 pushw x + 00007D 1E 05 [ 2] 131 ldw x, (0x05, sp) + 00007F 89 [ 2] 132 pushw x + 000080 5F [ 1] 133 clrw x + 000081 89 [ 2] 134 pushw x + 000082 4B 00 [ 1] 135 push #0x00 + 000084 4B 3F [ 1] 136 push #0x3f + 000086 8Ds00r00r00 [ 5] 137 callf ___fsmul + 00008A 5B 08 [ 2] 138 addw sp, #8 + 00008C 4B 00 [ 1] 139 push #0x00 + 00008E 4B 00 [ 1] 140 push #0x00 + 000090 4B 00 [ 1] 141 push #0x00 + 000092 4B 3F [ 1] 142 push #0x3f + 000094 89 [ 2] 143 pushw x + 000095 90 89 [ 2] 144 pushw y + 000097 8Ds00r00r00 [ 5] 145 callf ___fsadd + 00009B 5B 08 [ 2] 146 addw sp, #8 + 00009D 1F 0D [ 2] 147 ldw (0x0d, sp), x + 00009F 17 0B [ 2] 148 ldw (0x0b, sp), y + 0000A1 20 2C [ 2] 149 jra 00105$ + 0000A3 150 00104$: + 151 ; ../logf.c: 240: n--; + 0000A3 1E 01 [ 2] 152 ldw x, (0x01, sp) + 0000A5 5A [ 2] 153 decw x + 0000A6 1F 01 [ 2] 154 ldw (0x01, sp), x + 155 ; ../logf.c: 241: zden=znum*0.5+0.5; + 0000A8 1E 09 [ 2] 156 ldw x, (0x09, sp) + 0000AA 89 [ 2] 157 pushw x + 0000AB 1E 09 [ 2] 158 ldw x, (0x09, sp) + 0000AD 89 [ 2] 159 pushw x + 0000AE 5F [ 1] 160 clrw x + 0000AF 89 [ 2] 161 pushw x + 0000B0 4B 00 [ 1] 162 push #0x00 + 0000B2 4B 3F [ 1] 163 push #0x3f + 0000B4 8Ds00r00r00 [ 5] 164 callf ___fsmul + 0000B8 5B 08 [ 2] 165 addw sp, #8 + 0000BA 4B 00 [ 1] 166 push #0x00 + 0000BC 4B 00 [ 1] 167 push #0x00 + 0000BE 4B 00 [ 1] 168 push #0x00 + 0000C0 4B 3F [ 1] 169 push #0x3f + 0000C2 89 [ 2] 170 pushw x + 0000C3 90 89 [ 2] 171 pushw y + 0000C5 8Ds00r00r00 [ 5] 172 callf ___fsadd + 0000C9 5B 08 [ 2] 173 addw sp, #8 + 0000CB 1F 0D [ 2] 174 ldw (0x0d, sp), x + 0000CD 17 0B [ 2] 175 ldw (0x0b, sp), y + 0000CF 176 00105$: + 177 ; ../logf.c: 243: z=znum/zden; + 0000CF 1E 0D [ 2] 178 ldw x, (0x0d, sp) + 0000D1 89 [ 2] 179 pushw x + 0000D2 1E 0D [ 2] 180 ldw x, (0x0d, sp) + 0000D4 89 [ 2] 181 pushw x + 0000D5 1E 0D [ 2] 182 ldw x, (0x0d, sp) + 0000D7 89 [ 2] 183 pushw x + 0000D8 1E 0D [ 2] 184 ldw x, (0x0d, sp) + 0000DA 89 [ 2] 185 pushw x + 0000DB 8Ds00r00r00 [ 5] 186 callf ___fsdiv + 0000DF 5B 08 [ 2] 187 addw sp, #8 + 0000E1 1F 0D [ 2] 188 ldw (0x0d, sp), x + 0000E3 17 0B [ 2] 189 ldw (0x0b, sp), y + 0000E5 16 0D [ 2] 190 ldw y, (0x0d, sp) + 0000E7 17 05 [ 2] 191 ldw (0x05, sp), y + 0000E9 16 0B [ 2] 192 ldw y, (0x0b, sp) + 0000EB 17 03 [ 2] 193 ldw (0x03, sp), y + 194 ; ../logf.c: 244: w=z*z; + 0000ED 1E 05 [ 2] 195 ldw x, (0x05, sp) + 0000EF 89 [ 2] 196 pushw x + 0000F0 1E 05 [ 2] 197 ldw x, (0x05, sp) + 0000F2 89 [ 2] 198 pushw x + 0000F3 1E 09 [ 2] 199 ldw x, (0x09, sp) + 0000F5 89 [ 2] 200 pushw x + 0000F6 1E 09 [ 2] 201 ldw x, (0x09, sp) + 0000F8 89 [ 2] 202 pushw x + 0000F9 8Ds00r00r00 [ 5] 203 callf ___fsmul + 0000FD 5B 08 [ 2] 204 addw sp, #8 + 0000FF 1F 0D [ 2] 205 ldw (0x0d, sp), x + 000101 17 0B [ 2] 206 ldw (0x0b, sp), y + 207 ; ../logf.c: 246: Rz=z+z*(w*A(w)/B(w)); + 000103 1E 0D [ 2] 208 ldw x, (0x0d, sp) + 000105 89 [ 2] 209 pushw x + 000106 1E 0D [ 2] 210 ldw x, (0x0d, sp) + 000108 89 [ 2] 211 pushw x + 000109 4B 3D [ 1] 212 push #0x3d + 00010B 4B 7E [ 1] 213 push #0x7e + 00010D 4B 0D [ 1] 214 push #0x0d + 00010F 4B BF [ 1] 215 push #0xbf + 000111 8Ds00r00r00 [ 5] 216 callf ___fsmul + 000115 5B 08 [ 2] 217 addw sp, #8 + 000117 1F 09 [ 2] 218 ldw (0x09, sp), x + 000119 17 07 [ 2] 219 ldw (0x07, sp), y + 00011B 4B 3A [ 1] 220 push #0x3a + 00011D 4B 3F [ 1] 221 push #0x3f + 00011F 4B D4 [ 1] 222 push #0xd4 + 000121 4B C0 [ 1] 223 push #0xc0 + 000123 1E 11 [ 2] 224 ldw x, (0x11, sp) + 000125 89 [ 2] 225 pushw x + 000126 1E 11 [ 2] 226 ldw x, (0x11, sp) + 000128 89 [ 2] 227 pushw x + 000129 8Ds00r00r00 [ 5] 228 callf ___fsadd + 00012D 5B 08 [ 2] 229 addw sp, #8 + 00012F 1F 0D [ 2] 230 ldw (0x0d, sp), x + 000131 17 0B [ 2] 231 ldw (0x0b, sp), y + 000133 1E 0D [ 2] 232 ldw x, (0x0d, sp) + 000135 89 [ 2] 233 pushw x + 000136 1E 0D [ 2] 234 ldw x, (0x0d, sp) + 000138 89 [ 2] 235 pushw x + 000139 1E 0D [ 2] 236 ldw x, (0x0d, sp) + 00013B 89 [ 2] 237 pushw x + 00013C 1E 0D [ 2] 238 ldw x, (0x0d, sp) + 00013E 89 [ 2] 239 pushw x + 00013F 8Ds00r00r00 [ 5] 240 callf ___fsdiv + 000143 5B 08 [ 2] 241 addw sp, #8 + 000145 1F 0D [ 2] 242 ldw (0x0d, sp), x + 000147 17 0B [ 2] 243 ldw (0x0b, sp), y + 000149 1E 0D [ 2] 244 ldw x, (0x0d, sp) + 00014B 89 [ 2] 245 pushw x + 00014C 1E 0D [ 2] 246 ldw x, (0x0d, sp) + 00014E 89 [ 2] 247 pushw x + 00014F 1E 09 [ 2] 248 ldw x, (0x09, sp) + 000151 89 [ 2] 249 pushw x + 000152 1E 09 [ 2] 250 ldw x, (0x09, sp) + 000154 89 [ 2] 251 pushw x + 000155 8Ds00r00r00 [ 5] 252 callf ___fsmul + 000159 5B 08 [ 2] 253 addw sp, #8 + 00015B 1F 0D [ 2] 254 ldw (0x0d, sp), x + 00015D 17 0B [ 2] 255 ldw (0x0b, sp), y + 00015F 1E 0D [ 2] 256 ldw x, (0x0d, sp) + 000161 89 [ 2] 257 pushw x + 000162 1E 0D [ 2] 258 ldw x, (0x0d, sp) + 000164 89 [ 2] 259 pushw x + 000165 1E 09 [ 2] 260 ldw x, (0x09, sp) + 000167 89 [ 2] 261 pushw x + 000168 1E 09 [ 2] 262 ldw x, (0x09, sp) + 00016A 89 [ 2] 263 pushw x + 00016B 8Ds00r00r00 [ 5] 264 callf ___fsadd + 00016F 5B 08 [ 2] 265 addw sp, #8 + 000171 1F 0D [ 2] 266 ldw (0x0d, sp), x + 000173 17 0B [ 2] 267 ldw (0x0b, sp), y + 000175 16 0D [ 2] 268 ldw y, (0x0d, sp) + 000177 17 05 [ 2] 269 ldw (0x05, sp), y + 000179 16 0B [ 2] 270 ldw y, (0x0b, sp) + 00017B 17 03 [ 2] 271 ldw (0x03, sp), y + 272 ; ../logf.c: 247: xn=n; + 00017D 1E 01 [ 2] 273 ldw x, (0x01, sp) + 00017F 89 [ 2] 274 pushw x + 000180 8Ds00r00r00 [ 5] 275 callf ___sint2fs + 000184 5B 02 [ 2] 276 addw sp, #2 + 000186 1F 0D [ 2] 277 ldw (0x0d, sp), x + 000188 17 0B [ 2] 278 ldw (0x0b, sp), y + 00018A 16 0D [ 2] 279 ldw y, (0x0d, sp) + 00018C 17 09 [ 2] 280 ldw (0x09, sp), y + 00018E 16 0B [ 2] 281 ldw y, (0x0b, sp) + 000190 17 07 [ 2] 282 ldw (0x07, sp), y + 283 ; ../logf.c: 248: return ((xn*C2+Rz)+xn*C1); + 000192 1E 09 [ 2] 284 ldw x, (0x09, sp) + 000194 89 [ 2] 285 pushw x + 000195 1E 09 [ 2] 286 ldw x, (0x09, sp) + 000197 89 [ 2] 287 pushw x + 000198 4B 83 [ 1] 288 push #0x83 + 00019A 4B 80 [ 1] 289 push #0x80 + 00019C 4B 5E [ 1] 290 push #0x5e + 00019E 4B B9 [ 1] 291 push #0xb9 + 0001A0 8Ds00r00r00 [ 5] 292 callf ___fsmul + 0001A4 5B 08 [ 2] 293 addw sp, #8 + 0001A6 1F 0D [ 2] 294 ldw (0x0d, sp), x + 0001A8 17 0B [ 2] 295 ldw (0x0b, sp), y + 0001AA 1E 05 [ 2] 296 ldw x, (0x05, sp) + 0001AC 89 [ 2] 297 pushw x + 0001AD 1E 05 [ 2] 298 ldw x, (0x05, sp) + 0001AF 89 [ 2] 299 pushw x + 0001B0 1E 11 [ 2] 300 ldw x, (0x11, sp) + 0001B2 89 [ 2] 301 pushw x + 0001B3 1E 11 [ 2] 302 ldw x, (0x11, sp) + 0001B5 89 [ 2] 303 pushw x + 0001B6 8Ds00r00r00 [ 5] 304 callf ___fsadd + 0001BA 5B 08 [ 2] 305 addw sp, #8 + 0001BC 1F 0D [ 2] 306 ldw (0x0d, sp), x + 0001BE 17 0B [ 2] 307 ldw (0x0b, sp), y + 0001C0 1E 09 [ 2] 308 ldw x, (0x09, sp) + 0001C2 89 [ 2] 309 pushw x + 0001C3 1E 09 [ 2] 310 ldw x, (0x09, sp) + 0001C5 89 [ 2] 311 pushw x + 0001C6 4B 00 [ 1] 312 push #0x00 + 0001C8 4B 80 [ 1] 313 push #0x80 + 0001CA 4B 31 [ 1] 314 push #0x31 + 0001CC 4B 3F [ 1] 315 push #0x3f + 0001CE 8Ds00r00r00 [ 5] 316 callf ___fsmul + 0001D2 5B 08 [ 2] 317 addw sp, #8 + 0001D4 1F 09 [ 2] 318 ldw (0x09, sp), x + 0001D6 17 07 [ 2] 319 ldw (0x07, sp), y + 0001D8 1E 09 [ 2] 320 ldw x, (0x09, sp) + 0001DA 89 [ 2] 321 pushw x + 0001DB 1E 09 [ 2] 322 ldw x, (0x09, sp) + 0001DD 89 [ 2] 323 pushw x + 0001DE 1E 11 [ 2] 324 ldw x, (0x11, sp) + 0001E0 89 [ 2] 325 pushw x + 0001E1 1E 11 [ 2] 326 ldw x, (0x11, sp) + 0001E3 89 [ 2] 327 pushw x + 0001E4 8Ds00r00r00 [ 5] 328 callf ___fsadd + 0001E8 5B 08 [ 2] 329 addw sp, #8 + 0001EA 1F 0D [ 2] 330 ldw (0x0d, sp), x + 0001EC 17 0B [ 2] 331 ldw (0x0b, sp), y + 0001EE 1E 0D [ 2] 332 ldw x, (0x0d, sp) + 0001F0 16 0B [ 2] 333 ldw y, (0x0b, sp) + 0001F2 334 00106$: + 335 ; ../logf.c: 249: } + 0001F2 5B 0E [ 2] 336 addw sp, #14 + 0001F4 87 [ 5] 337 retf + 338 .area CODE + 339 .area CONST + 340 .area INITIALIZER + 341 .area CABS (ABS) diff --git a/device/lib/stm8-large/logf.rel b/device/lib/stm8-large/logf.rel new file mode 100644 index 0000000..d4415a0 --- /dev/null +++ b/device/lib/stm8-large/logf.rel @@ -0,0 +1,123 @@ +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 1F5 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 14 89 1E 14 89 5F 89 5F 89 8D +R 00 00 00 09 +T 00 00 0D 00 00 00 5B 08 6B 0E 26 0D AE 00 21 CF +R 00 00 00 09 82 03 00 03 +T 00 00 1A 00 00 5F 90 5F AC 00 01 F2 +R 00 00 00 09 12 03 00 02 80 09 00 09 +T 00 00 23 +R 00 00 00 09 +T 00 00 23 96 5C 89 1E 16 89 1E 16 89 8D +R 00 00 00 09 +T 00 00 2D 00 00 00 5B 06 1F 05 17 03 5F 89 4B 00 +R 00 00 00 09 82 03 00 07 +T 00 00 3A 4B 3F 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 00 43 00 00 00 5B 08 1F 09 17 07 1E 05 89 1E +R 00 00 00 09 82 03 00 00 +T 00 00 50 05 89 4B F3 4B 04 4B 35 4B 3F 8D +R 00 00 00 09 +T 00 00 5B 00 00 00 5B 08 6B 0E 27 3F 5F 89 4B 00 +R 00 00 00 09 82 03 00 03 +T 00 00 68 4B 3F 1E 0D 89 1E 0D 89 8D +R 00 00 00 09 +T 00 00 71 00 00 00 5B 08 1F 09 17 07 1E 05 89 1E +R 00 00 00 09 82 03 00 00 +T 00 00 7E 05 89 5F 89 4B 00 4B 3F 8D +R 00 00 00 09 +T 00 00 87 00 00 00 5B 08 4B 00 4B 00 4B 00 4B 3F +R 00 00 00 09 82 03 00 01 +T 00 00 94 89 90 89 8D 00 00 00 5B 08 1F 0D 17 0B +R 00 00 00 09 82 07 00 05 +T 00 00 A1 20 2C +R 00 00 00 09 +T 00 00 A3 +R 00 00 00 09 +T 00 00 A3 1E 01 5A 1F 01 1E 09 89 1E 09 89 5F 89 +R 00 00 00 09 +T 00 00 B0 4B 00 4B 3F 8D 00 00 00 5B 08 4B 00 4B +R 00 00 00 09 82 08 00 01 +T 00 00 BD 00 4B 00 4B 3F 89 90 89 8D +R 00 00 00 09 +T 00 00 C6 00 00 00 5B 08 1F 0D 17 0B +R 00 00 00 09 82 03 00 05 +T 00 00 CF +R 00 00 00 09 +T 00 00 CF 1E 0D 89 1E 0D 89 1E 0D 89 1E 0D 89 8D +R 00 00 00 09 +T 00 00 DC 00 00 00 5B 08 1F 0D 17 0B 16 0D 17 05 +R 00 00 00 09 82 03 00 08 +T 00 00 E9 16 0B 17 03 1E 05 89 1E 05 89 1E 09 89 +R 00 00 00 09 +T 00 00 F6 1E 09 89 8D 00 00 00 5B 08 1F 0D 17 0B +R 00 00 00 09 82 07 00 01 +T 00 01 03 1E 0D 89 1E 0D 89 4B 3D 4B 7E 4B 0D 4B +R 00 00 00 09 +T 00 01 10 BF 8D 00 00 00 5B 08 1F 09 17 07 4B 3A +R 00 00 00 09 82 05 00 01 +T 00 01 1D 4B 3F 4B D4 4B C0 1E 11 89 1E 11 89 8D +R 00 00 00 09 +T 00 01 2A 00 00 00 5B 08 1F 0D 17 0B 1E 0D 89 1E +R 00 00 00 09 82 03 00 05 +T 00 01 37 0D 89 1E 0D 89 1E 0D 89 8D +R 00 00 00 09 +T 00 01 40 00 00 00 5B 08 1F 0D 17 0B 1E 0D 89 1E +R 00 00 00 09 82 03 00 08 +T 00 01 4D 0D 89 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 01 56 00 00 00 5B 08 1F 0D 17 0B 1E 0D 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 63 0D 89 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 01 6C 00 00 00 5B 08 1F 0D 17 0B 16 0D 17 05 +R 00 00 00 09 82 03 00 05 +T 00 01 79 16 0B 17 03 1E 01 89 8D +R 00 00 00 09 +T 00 01 81 00 00 00 5B 02 1F 0D 17 0B 16 0D 17 09 +R 00 00 00 09 82 03 00 06 +T 00 01 8E 16 0B 17 07 1E 09 89 1E 09 89 4B 83 4B +R 00 00 00 09 +T 00 01 9B 80 4B 5E 4B B9 8D 00 00 00 5B 08 1F 0D +R 00 00 00 09 82 09 00 01 +T 00 01 A8 17 0B 1E 05 89 1E 05 89 1E 11 89 1E 11 +R 00 00 00 09 +T 00 01 B5 89 8D 00 00 00 5B 08 1F 0D 17 0B 1E 09 +R 00 00 00 09 82 05 00 05 +T 00 01 C2 89 1E 09 89 4B 00 4B 80 4B 31 4B 3F 8D +R 00 00 00 09 +T 00 01 CF 00 00 00 5B 08 1F 09 17 07 1E 09 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 DC 09 89 1E 11 89 1E 11 89 8D +R 00 00 00 09 +T 00 01 E5 00 00 00 5B 08 1F 0D 17 0B 1E 0D 16 0B +R 00 00 00 09 82 03 00 05 +T 00 01 F2 +R 00 00 00 09 +T 00 01 F2 5B 0E 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/logf.sym b/device/lib/stm8-large/logf.sym new file mode 100644 index 0000000..cac8018 --- /dev/null +++ b/device/lib/stm8-large/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 1F5 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/malloc.asm b/device/lib/stm8-large/malloc.asm new file mode 100644 index 0000000..603b5ed --- /dev/null +++ b/device/lib/stm8-large/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: } + retf +; ../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, (0x10, sp) + jreq 00101$ + incw x + incw x + cpw x, (0x10, 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 (0x10, sp), x + cpw x, #0x0004 + jrnc 00105$ +; ../malloc.c: 90: size = sizeof(struct header); + ldw x, #0x0004 + ldw (0x10, 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, (0x10, 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, (0x10, 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, (0x10, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/malloc.lst b/device/lib/stm8-large/malloc.lst new file mode 100644 index 0000000..62ab9c5 --- /dev/null +++ b/device/lib/stm8-large/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 87 [ 5] 71 retf + 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 10 [ 2] 79 ldw x, (0x10, sp) + 00001A 27 06 [ 1] 80 jreq 00101$ + 00001C 5C [ 1] 81 incw x + 00001D 5C [ 1] 82 incw x + 00001E 13 10 [ 2] 83 cpw x, (0x10, 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 10 [ 2] 92 ldw (0x10, 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 10 [ 2] 97 ldw (0x10, 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 10 [ 2] 121 cpw x, (0x10, 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 10 [ 2] 125 ldw x, (0x10, 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 10 [ 2] 133 addw x, (0x10, 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 87 [ 5] 178 retf + 179 .area CODE + 180 .area CONST + 181 .area INITIALIZER + 182 .area CABS (ABS) diff --git a/device/lib/stm8-large/malloc.rel b/device/lib/stm8-large/malloc.rel new file mode 100644 index 0000000..a56dc8c --- /dev/null +++ b/device/lib/stm8-large/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 87 +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 10 27 06 5C 5C 13 10 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 10 A3 00 04 24 05 AE 00 04 1F 10 +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 10 51 +R 00 00 00 09 +T 00 00 55 25 36 1E 10 1C 00 04 1F 0B 93 13 0B 25 +R 00 00 00 09 +T 00 00 62 1F 1E 07 72 FB 10 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/malloc.sym b/device/lib/stm8-large/malloc.sym new file mode 100644 index 0000000..531452a --- /dev/null +++ b/device/lib/stm8-large/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-large/mblen.asm b/device/lib/stm8-large/mblen.asm new file mode 100644 index 0000000..bf67c54 --- /dev/null +++ b/device/lib/stm8-large/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, (0x09, sp) + jreq 00119$ +; ../mblen.c: 39: if(!n) +; ../mblen.c: 40: return(-1); + ldw x, (0x0b, sp) + jrne 00104$ + decw x + jra 00119$ +00104$: +; ../mblen.c: 42: c = *s; + ldw y, (0x09, 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, (0x0b, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mblen.lst b/device/lib/stm8-large/mblen.lst new file mode 100644 index 0000000..6976791 --- /dev/null +++ b/device/lib/stm8-large/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 09 [ 2] 57 ldw x, (0x09, sp) + 000004 27 54 [ 1] 58 jreq 00119$ + 59 ; ../mblen.c: 39: if(!n) + 60 ; ../mblen.c: 40: return(-1); + 000006 1E 0B [ 2] 61 ldw x, (0x0b, 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 09 [ 2] 67 ldw y, (0x09, 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 0B [ 2] 103 cpw x, (0x0b, 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 87 [ 5] 138 retf + 139 .area CODE + 140 .area CONST + 141 .area INITIALIZER + 142 .area CABS (ABS) diff --git a/device/lib/stm8-large/mblen.rel b/device/lib/stm8-large/mblen.rel new file mode 100644 index 0000000..b01e845 --- /dev/null +++ b/device/lib/stm8-large/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 09 27 54 1E 0B 26 03 5A 20 4D +R 00 00 00 09 +T 00 00 0D +R 00 00 00 09 +T 00 00 0D 16 09 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 0B 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/mblen.sym b/device/lib/stm8-large/mblen.sym new file mode 100644 index 0000000..4b3c7cc --- /dev/null +++ b/device/lib/stm8-large/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-large/mbrlen.asm b/device/lib/stm8-large/mbrlen.asm new file mode 100644 index 0000000..ea95fea --- /dev/null +++ b/device/lib/stm8-large/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, (0x08, sp) + jrne 00104$ + ldw x, #(_mbrlen_sps_65536_10 + 0) +00104$: + pushw x + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + clrw x + pushw x + callf _mbrtowc + addw sp, #8 +; ../mbrlen.c: 36: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mbrlen.lst b/device/lib/stm8-large/mbrlen.lst new file mode 100644 index 0000000..95424fc --- /dev/null +++ b/device/lib/stm8-large/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 08 [ 2] 58 ldw x, (0x08, 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 08 [ 2] 63 ldw x, (0x08, sp) + 00000A 89 [ 2] 64 pushw x + 00000B 1E 08 [ 2] 65 ldw x, (0x08, sp) + 00000D 89 [ 2] 66 pushw x + 00000E 5F [ 1] 67 clrw x + 00000F 89 [ 2] 68 pushw x + 000010 8Ds00r00r00 [ 5] 69 callf _mbrtowc + 000014 5B 08 [ 2] 70 addw sp, #8 + 71 ; ../mbrlen.c: 36: } + 000016 87 [ 5] 72 retf + 73 .area CODE + 74 .area CONST + 75 .area INITIALIZER + 76 .area CABS (ABS) diff --git a/device/lib/stm8-large/mbrlen.rel b/device/lib/stm8-large/mbrlen.rel new file mode 100644 index 0000000..99465d7 --- /dev/null +++ b/device/lib/stm8-large/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 17 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 08 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 08 89 1E 08 89 5F 89 8D +R 00 00 00 09 +T 00 00 11 00 00 00 5B 08 87 +R 00 00 00 09 82 03 00 00 diff --git a/device/lib/stm8-large/mbrlen.sym b/device/lib/stm8-large/mbrlen.sym new file mode 100644 index 0000000..95219f5 --- /dev/null +++ b/device/lib/stm8-large/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 17 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/mbrtoc16.asm b/device/lib/stm8-large/mbrtoc16.asm new file mode 100644 index 0000000..ae1bedb --- /dev/null +++ b/device/lib/stm8-large/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, (0x14, sp) + jrne 00102$ +; ../mbrtoc16.c: 42: return(mbrtoc16(0, "", 1, ps)); + ldw x, (0x18, sp) + pushw x + push #0x01 + push #0x00 + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + clrw x + pushw x + callf _mbrtoc16 + addw sp, #8 + jpf 00119$ +00102$: +; ../mbrtoc16.c: 44: if(!ps) + ldw x, (0x18, sp) + jrne 00104$ +; ../mbrtoc16.c: 45: ps = &sps; + ldw x, #(_mbrtoc16_sps_65536_16 + 0) + ldw (0x18, sp), x +00104$: +; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2])) + ldw y, (0x18, sp) + ldw (0x07, sp), y + ldw x, y + ld a, (x) +; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + ldw y, (0x12, 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, (0x18, 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, (0x12, 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, (0x18, sp) + pushw x + ldw x, (0x18, sp) + pushw x + ldw x, (0x18, sp) + pushw x + pushw y + callf _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, (0x12, 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, (0x12, 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 + retf + .area CODE + .area CONST + .area CONST +___str_0: + .db 0x00 + .area CODE + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mbrtoc16.lst b/device/lib/stm8-large/mbrtoc16.lst new file mode 100644 index 0000000..3066700 --- /dev/null +++ b/device/lib/stm8-large/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 14 [ 2] 59 ldw x, (0x14, sp) + 000004 26 17 [ 1] 60 jrne 00102$ + 61 ; ../mbrtoc16.c: 42: return(mbrtoc16(0, "", 1, ps)); + 000006 1E 18 [ 2] 62 ldw x, (0x18, 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 8Ds00r00r00 [ 5] 70 callf _mbrtoc16 + 000017 5B 08 [ 2] 71 addw sp, #8 + 000019 ACs00r00rE4 [ 2] 72 jpf 00119$ + 00001D 73 00102$: + 74 ; ../mbrtoc16.c: 44: if(!ps) + 00001D 1E 18 [ 2] 75 ldw x, (0x18, sp) + 00001F 26 05 [ 1] 76 jrne 00104$ + 77 ; ../mbrtoc16.c: 45: ps = &sps; + 000021 AEr00r00 [ 2] 78 ldw x, #(_mbrtoc16_sps_65536_16 + 0) + 000024 1F 18 [ 2] 79 ldw (0x18, sp), x + 000026 80 00104$: + 81 ; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2])) + 000026 16 18 [ 2] 82 ldw y, (0x18, sp) + 000028 17 07 [ 2] 83 ldw (0x07, sp), y + 00002A 93 [ 1] 84 ldw x, y + 00002B F6 [ 1] 85 ld a, (x) + 86 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + 00002C 16 12 [ 2] 87 ldw y, (0x12, sp) + 00002E 17 05 [ 2] 88 ldw (0x05, sp), y + 89 ; ../mbrtoc16.c: 47: if(!ps->c[0] && (ps->c[1] || ps->c[2])) + 000030 1E 07 [ 2] 90 ldw x, (0x07, sp) + 000032 5C [ 1] 91 incw x + 000033 1F 09 [ 2] 92 ldw (0x09, sp), x + 000035 1E 07 [ 2] 93 ldw x, (0x07, sp) + 000037 5C [ 1] 94 incw x + 000038 5C [ 1] 95 incw x + 000039 1F 0B [ 2] 96 ldw (0x0b, sp), x + 00003B 4D [ 1] 97 tnz a + 00003C 26 3C [ 1] 98 jrne 00108$ + 00003E 1E 09 [ 2] 99 ldw x, (0x09, sp) + 000040 F6 [ 1] 100 ld a, (x) + 000041 26 05 [ 1] 101 jrne 00107$ + 000043 1E 0B [ 2] 102 ldw x, (0x0b, sp) + 000045 F6 [ 1] 103 ld a, (x) + 000046 27 32 [ 1] 104 jreq 00108$ + 000048 105 00107$: + 106 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + 000048 16 18 [ 2] 107 ldw y, (0x18, sp) + 00004A 93 [ 1] 108 ldw x, y + 00004B 5C [ 1] 109 incw x + 00004C 1F 07 [ 2] 110 ldw (0x07, sp), x + 00004E 93 [ 1] 111 ldw x, y + 00004F 5C [ 1] 112 incw x + 000050 5C [ 1] 113 incw x + 000051 1F 09 [ 2] 114 ldw (0x09, sp), x + 115 ; ../mbrtoc16.c: 49: if(pc16) + 000053 1E 12 [ 2] 116 ldw x, (0x12, sp) + 000055 27 18 [ 1] 117 jreq 00106$ + 118 ; ../mbrtoc16.c: 50: *pc16 = ps->c[1] + (ps->c[2] << 8); + 000057 1E 07 [ 2] 119 ldw x, (0x07, sp) + 000059 F6 [ 1] 120 ld a, (x) + 00005A 6B 0C [ 1] 121 ld (0x0c, sp), a + 00005C 0F 0B [ 1] 122 clr (0x0b, sp) + 00005E 16 09 [ 2] 123 ldw y, (0x09, sp) + 000060 90 F6 [ 1] 124 ld a, (y) + 000062 95 [ 1] 125 ld xh, a + 000063 0F 0E [ 1] 126 clr (0x0e, sp) + 000065 7B 0E [ 1] 127 ld a, (0x0e, sp) + 000067 97 [ 1] 128 ld xl, a + 000068 72 FB 0B [ 2] 129 addw x, (0x0b, sp) + 00006B 16 05 [ 2] 130 ldw y, (0x05, sp) + 00006D 90 FF [ 2] 131 ldw (y), x + 00006F 132 00106$: + 133 ; ../mbrtoc16.c: 51: ps->c[1] = ps->c[2] = 0; + 00006F 1E 09 [ 2] 134 ldw x, (0x09, sp) + 000071 7F [ 1] 135 clr (x) + 000072 1E 07 [ 2] 136 ldw x, (0x07, sp) + 000074 7F [ 1] 137 clr (x) + 138 ; ../mbrtoc16.c: 52: return(-3); + 000075 AE FF FD [ 2] 139 ldw x, #0xfffd + 000078 20 6A [ 2] 140 jra 00119$ + 00007A 141 00108$: + 142 ; ../mbrtoc16.c: 55: ret = mbrtowc(&codepoint, s, n, ps); + 00007A 96 [ 1] 143 ldw x, sp + 00007B 5C [ 1] 144 incw x + 00007C 51 [ 1] 145 exgw x, y + 00007D 1E 18 [ 2] 146 ldw x, (0x18, sp) + 00007F 89 [ 2] 147 pushw x + 000080 1E 18 [ 2] 148 ldw x, (0x18, sp) + 000082 89 [ 2] 149 pushw x + 000083 1E 18 [ 2] 150 ldw x, (0x18, sp) + 000085 89 [ 2] 151 pushw x + 000086 90 89 [ 2] 152 pushw y + 000088 8Ds00r00r00 [ 5] 153 callf _mbrtowc + 00008C 5B 08 [ 2] 154 addw sp, #8 + 155 ; ../mbrtoc16.c: 57: if(ret > MB_LEN_MAX) + 00008E 1F 0D [ 2] 156 ldw (0x0d, sp), x + 000090 A3 00 04 [ 2] 157 cpw x, #0x0004 + 000093 23 04 [ 2] 158 jrule 00112$ + 159 ; ../mbrtoc16.c: 58: return(ret); + 000095 1E 0D [ 2] 160 ldw x, (0x0d, sp) + 000097 20 4B [ 2] 161 jra 00119$ + 000099 162 00112$: + 163 ; ../mbrtoc16.c: 60: if (codepoint <= 0xffff) // Basic multilingual plane + 000099 1E 01 [ 2] 164 ldw x, (0x01, sp) + 00009B 26 0D [ 1] 165 jrne 00116$ + 166 ; ../mbrtoc16.c: 62: if(pc16) + 00009D 1E 12 [ 2] 167 ldw x, (0x12, sp) + 00009F 27 05 [ 1] 168 jreq 00114$ + 169 ; ../mbrtoc16.c: 63: *pc16 = codepoint; + 0000A1 16 03 [ 2] 170 ldw y, (0x03, sp) + 0000A3 1E 05 [ 2] 171 ldw x, (0x05, sp) + 0000A5 FF [ 2] 172 ldw (x), y + 0000A6 173 00114$: + 174 ; ../mbrtoc16.c: 64: return(ret); + 0000A6 1E 0D [ 2] 175 ldw x, (0x0d, sp) + 0000A8 20 3A [ 2] 176 jra 00119$ + 0000AA 177 00116$: + 178 ; ../mbrtoc16.c: 67: codepoint -= 0x100000; + 0000AA 16 03 [ 2] 179 ldw y, (0x03, sp) + 0000AC 1E 01 [ 2] 180 ldw x, (0x01, sp) + 0000AE 1D 00 10 [ 2] 181 subw x, #0x0010 + 0000B1 17 03 [ 2] 182 ldw (0x03, sp), y + 0000B3 1F 01 [ 2] 183 ldw (0x01, sp), x + 184 ; ../mbrtoc16.c: 68: if(pc16) + 0000B5 1E 12 [ 2] 185 ldw x, (0x12, sp) + 0000B7 27 13 [ 1] 186 jreq 00118$ + 187 ; ../mbrtoc16.c: 69: *pc16 = ((codepoint >> 10) & 0x3ff) + 0xd800; + 0000B9 1E 02 [ 2] 188 ldw x, (0x02, sp) + 0000BB 7B 01 [ 1] 189 ld a, (0x01, sp) + 0000BD 44 [ 1] 190 srl a + 0000BE 56 [ 2] 191 rrcw x + 0000BF 44 [ 1] 192 srl a + 0000C0 56 [ 2] 193 rrcw x + 0000C1 9E [ 1] 194 ld a, xh + 0000C2 A4 03 [ 1] 195 and a, #0x03 + 0000C4 95 [ 1] 196 ld xh, a + 0000C5 1C D8 00 [ 2] 197 addw x, #0xd800 + 0000C8 16 05 [ 2] 198 ldw y, (0x05, sp) + 0000CA 90 FF [ 2] 199 ldw (y), x + 0000CC 200 00118$: + 201 ; ../mbrtoc16.c: 70: low_surrogate = (codepoint & 0x3ff) + 0xdc00; + 0000CC 1E 03 [ 2] 202 ldw x, (0x03, sp) + 0000CE 9E [ 1] 203 ld a, xh + 0000CF A4 03 [ 1] 204 and a, #0x03 + 0000D1 95 [ 1] 205 ld xh, a + 0000D2 1C DC 00 [ 2] 206 addw x, #0xdc00 + 207 ; ../mbrtoc16.c: 71: ps->c[0] = 0; + 0000D5 16 07 [ 2] 208 ldw y, (0x07, sp) + 0000D7 90 7F [ 1] 209 clr (y) + 210 ; ../mbrtoc16.c: 72: ps->c[1] = low_surrogate & 0xff; + 0000D9 9F [ 1] 211 ld a, xl + 0000DA 16 09 [ 2] 212 ldw y, (0x09, sp) + 0000DC 90 F7 [ 1] 213 ld (y), a + 214 ; ../mbrtoc16.c: 73: ps->c[2] = low_surrogate >> 8; + 0000DE 9E [ 1] 215 ld a, xh + 0000DF 1E 0B [ 2] 216 ldw x, (0x0b, sp) + 0000E1 F7 [ 1] 217 ld (x), a + 218 ; ../mbrtoc16.c: 75: return(ret); + 0000E2 1E 0D [ 2] 219 ldw x, (0x0d, sp) + 0000E4 220 00119$: + 221 ; ../mbrtoc16.c: 76: } + 0000E4 5B 0E [ 2] 222 addw sp, #14 + 0000E6 87 [ 5] 223 retf + 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-large/mbrtoc16.rel b/device/lib/stm8-large/mbrtoc16.rel new file mode 100644 index 0000000..99f2f87 --- /dev/null +++ b/device/lib/stm8-large/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 E7 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 14 26 17 1E 18 89 4B 01 4B 00 +R 00 00 00 09 +T 00 00 0D 4B 00 00 00 4B 00 00 00 5F 89 8D +R 00 00 00 09 F1 09 04 00 07 F1 81 08 00 07 +T 00 00 14 00 00 00 5B 08 AC 00 00 E4 +R 00 00 00 09 80 03 00 09 80 09 00 09 +T 00 00 1D +R 00 00 00 09 +T 00 00 1D 1E 18 26 05 AE 00 00 1F 18 +R 00 00 00 09 00 08 00 01 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 16 18 17 07 93 F6 16 12 17 05 1E 07 5C +R 00 00 00 09 +T 00 00 33 1F 09 1E 07 5C 5C 1F 0B 4D 26 3C 1E 09 +R 00 00 00 09 +T 00 00 40 F6 26 05 1E 0B F6 27 32 +R 00 00 00 09 +T 00 00 48 +R 00 00 00 09 +T 00 00 48 16 18 93 5C 1F 07 93 5C 5C 1F 09 1E 12 +R 00 00 00 09 +T 00 00 55 27 18 1E 07 F6 6B 0C 0F 0B 16 09 90 F6 +R 00 00 00 09 +T 00 00 62 95 0F 0E 7B 0E 97 72 FB 0B 16 05 90 FF +R 00 00 00 09 +T 00 00 6F +R 00 00 00 09 +T 00 00 6F 1E 09 7F 1E 07 7F AE FF FD 20 6A +R 00 00 00 09 +T 00 00 7A +R 00 00 00 09 +T 00 00 7A 96 5C 51 1E 18 89 1E 18 89 1E 18 89 90 +R 00 00 00 09 +T 00 00 87 89 8D 00 00 00 5B 08 1F 0D A3 00 04 23 +R 00 00 00 09 82 05 00 00 +T 00 00 94 04 1E 0D 20 4B +R 00 00 00 09 +T 00 00 99 +R 00 00 00 09 +T 00 00 99 1E 01 26 0D 1E 12 27 05 16 03 1E 05 FF +R 00 00 00 09 +T 00 00 A6 +R 00 00 00 09 +T 00 00 A6 1E 0D 20 3A +R 00 00 00 09 +T 00 00 AA +R 00 00 00 09 +T 00 00 AA 16 03 1E 01 1D 00 10 17 03 1F 01 1E 12 +R 00 00 00 09 +T 00 00 B7 27 13 1E 02 7B 01 44 56 44 56 9E A4 03 +R 00 00 00 09 +T 00 00 C4 95 1C D8 00 16 05 90 FF +R 00 00 00 09 +T 00 00 CC +R 00 00 00 09 +T 00 00 CC 1E 03 9E A4 03 95 1C DC 00 16 07 90 7F +R 00 00 00 09 +T 00 00 D9 9F 16 09 90 F7 9E 1E 0B F7 1E 0D +R 00 00 00 09 +T 00 00 E4 +R 00 00 00 09 +T 00 00 E4 5B 0E 87 +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-large/mbrtoc16.sym b/device/lib/stm8-large/mbrtoc16.sym new file mode 100644 index 0000000..7a5911f --- /dev/null +++ b/device/lib/stm8-large/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 E7 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/mbrtoc32.asm b/device/lib/stm8-large/mbrtoc32.asm new file mode 100644 index 0000000..840e743 --- /dev/null +++ b/device/lib/stm8-large/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, (0x10, sp) + jrne 00102$ +; ../mbrtoc32.c: 41: ps = &sps; + ldw x, #(_mbrtoc32_sps_65536_16 + 0) + ldw (0x10, sp), x +00102$: +; ../mbrtoc32.c: 43: if(!pc32) + ldw x, (0x0a, sp) + jrne 00104$ +; ../mbrtoc32.c: 44: return(mbrtowc(0, s, n, ps)); + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + clrw x + pushw x + callf _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, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + pushw y + callf _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, (0x0a, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mbrtoc32.lst b/device/lib/stm8-large/mbrtoc32.lst new file mode 100644 index 0000000..155f468 --- /dev/null +++ b/device/lib/stm8-large/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 10 [ 2] 59 ldw x, (0x10, 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 10 [ 2] 63 ldw (0x10, sp), x + 00000B 64 00102$: + 65 ; ../mbrtoc32.c: 43: if(!pc32) + 00000B 1E 0A [ 2] 66 ldw x, (0x0a, sp) + 00000D 26 13 [ 1] 67 jrne 00104$ + 68 ; ../mbrtoc32.c: 44: return(mbrtowc(0, s, n, ps)); + 00000F 1E 10 [ 2] 69 ldw x, (0x10, sp) + 000011 89 [ 2] 70 pushw x + 000012 1E 10 [ 2] 71 ldw x, (0x10, sp) + 000014 89 [ 2] 72 pushw x + 000015 1E 10 [ 2] 73 ldw x, (0x10, sp) + 000017 89 [ 2] 74 pushw x + 000018 5F [ 1] 75 clrw x + 000019 89 [ 2] 76 pushw x + 00001A 8Ds00r00r00 [ 5] 77 callf _mbrtowc + 00001E 5B 08 [ 2] 78 addw sp, #8 + 000020 20 26 [ 2] 79 jra 00107$ + 000022 80 00104$: + 81 ; ../mbrtoc32.c: 46: ret = mbrtowc(&wc, s, n, ps); + 000022 96 [ 1] 82 ldw x, sp + 000023 5C [ 1] 83 incw x + 000024 51 [ 1] 84 exgw x, y + 000025 1E 10 [ 2] 85 ldw x, (0x10, sp) + 000027 89 [ 2] 86 pushw x + 000028 1E 10 [ 2] 87 ldw x, (0x10, sp) + 00002A 89 [ 2] 88 pushw x + 00002B 1E 10 [ 2] 89 ldw x, (0x10, sp) + 00002D 89 [ 2] 90 pushw x + 00002E 90 89 [ 2] 91 pushw y + 000030 8Ds00r00r00 [ 5] 92 callf _mbrtowc + 000034 5B 08 [ 2] 93 addw sp, #8 + 94 ; ../mbrtoc32.c: 48: if(ret <= MB_LEN_MAX) + 000036 1F 05 [ 2] 95 ldw (0x05, sp), x + 000038 A3 00 04 [ 2] 96 cpw x, #0x0004 + 00003B 22 09 [ 1] 97 jrugt 00106$ + 98 ; ../mbrtoc32.c: 49: *pc32 = wc; + 00003D 1E 0A [ 2] 99 ldw x, (0x0a, sp) + 00003F 16 03 [ 2] 100 ldw y, (0x03, sp) + 000041 EF 02 [ 2] 101 ldw (0x2, x), y + 000043 16 01 [ 2] 102 ldw y, (0x01, sp) + 000045 FF [ 2] 103 ldw (x), y + 000046 104 00106$: + 105 ; ../mbrtoc32.c: 51: return(ret); + 000046 1E 05 [ 2] 106 ldw x, (0x05, sp) + 000048 107 00107$: + 108 ; ../mbrtoc32.c: 52: } + 000048 5B 06 [ 2] 109 addw sp, #6 + 00004A 87 [ 5] 110 retf + 111 .area CODE + 112 .area CONST + 113 .area INITIALIZER + 114 .area CABS (ABS) diff --git a/device/lib/stm8-large/mbrtoc32.rel b/device/lib/stm8-large/mbrtoc32.rel new file mode 100644 index 0000000..5a5caf7 --- /dev/null +++ b/device/lib/stm8-large/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 4B 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 10 26 05 AE 00 00 1F 10 +R 00 00 00 09 00 0A 00 01 +T 00 00 0B +R 00 00 00 09 +T 00 00 0B 1E 0A 26 13 1E 10 89 1E 10 89 1E 10 89 +R 00 00 00 09 +T 00 00 18 5F 89 8D 00 00 00 5B 08 20 26 +R 00 00 00 09 82 06 00 00 +T 00 00 22 +R 00 00 00 09 +T 00 00 22 96 5C 51 1E 10 89 1E 10 89 1E 10 89 90 +R 00 00 00 09 +T 00 00 2F 89 8D 00 00 00 5B 08 1F 05 A3 00 04 22 +R 00 00 00 09 82 05 00 00 +T 00 00 3C 09 1E 0A 16 03 EF 02 16 01 FF +R 00 00 00 09 +T 00 00 46 +R 00 00 00 09 +T 00 00 46 1E 05 +R 00 00 00 09 +T 00 00 48 +R 00 00 00 09 +T 00 00 48 5B 06 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/mbrtoc32.sym b/device/lib/stm8-large/mbrtoc32.sym new file mode 100644 index 0000000..cd72451 --- /dev/null +++ b/device/lib/stm8-large/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 4B flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/mbrtowc.asm b/device/lib/stm8-large/mbrtowc.asm new file mode 100644 index 0000000..e1282a9 --- /dev/null +++ b/device/lib/stm8-large/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, (0x17, sp) + jrne 00102$ +; ../mbrtowc.c: 42: return(mbrtowc(0, "", 1, ps)); + ldw x, (0x1b, sp) + pushw x + push #0x01 + push #0x00 + push #<(___str_0 + 0) + push #((___str_0 + 0) >> 8) + clrw x + pushw x + callf _mbrtowc + addw sp, #8 + jpf 00145$ +00102$: +; ../mbrtowc.c: 43: if(!n) + ldw x, (0x19, sp) + jrne 00280$ + jpf 00128$ +00280$: +; ../mbrtowc.c: 45: if(!ps) + ldw x, (0x1b, sp) + jrne 00106$ +; ../mbrtowc.c: 47: ps = &sps; + ldw x, #(_mbrtowc_sps_65536_10 + 0) + ldw (0x1b, 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, (0x1b, 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, (0x1b, sp) + ld a, (x) + ldw y, (0x17, 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$ + jpf 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, (0x19, 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, (0x19, 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 + jpf 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 (0x19, 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$ + jpf 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 (0x19, 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, (0x15, 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, (0x19, 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 + retf + .area CODE + .area CONST + .area CONST +___str_0: + .db 0x00 + .area CODE + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mbrtowc.lst b/device/lib/stm8-large/mbrtowc.lst new file mode 100644 index 0000000..444bfd5 --- /dev/null +++ b/device/lib/stm8-large/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 17 [ 2] 58 ldw x, (0x17, sp) + 000004 26 17 [ 1] 59 jrne 00102$ + 60 ; ../mbrtowc.c: 42: return(mbrtowc(0, "", 1, ps)); + 000006 1E 1B [ 2] 61 ldw x, (0x1b, 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 8Ds00r00r00 [ 5] 69 callf _mbrtowc + 000017 5B 08 [ 2] 70 addw sp, #8 + 000019 ACs00r01rED [ 2] 71 jpf 00145$ + 00001D 72 00102$: + 73 ; ../mbrtowc.c: 43: if(!n) + 00001D 1E 19 [ 2] 74 ldw x, (0x19, sp) + 00001F 26 04 [ 1] 75 jrne 00280$ + 000021 ACs00r01rE5 [ 2] 76 jpf 00128$ + 000025 77 00280$: + 78 ; ../mbrtowc.c: 45: if(!ps) + 000025 1E 1B [ 2] 79 ldw x, (0x1b, sp) + 000027 26 05 [ 1] 80 jrne 00106$ + 81 ; ../mbrtowc.c: 47: ps = &sps; + 000029 AEr00r00 [ 2] 82 ldw x, #(_mbrtowc_sps_65536_10 + 0) + 00002C 1F 1B [ 2] 83 ldw (0x1b, sp), x + 00002E 84 00106$: + 85 ; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++) + 00002E 96 [ 1] 86 ldw x, sp + 00002F 1C 00 03 [ 2] 87 addw x, #3 + 000032 1F 07 [ 2] 88 ldw (0x07, sp), x + 000034 16 1B [ 2] 89 ldw y, (0x1b, sp) + 000036 17 0F [ 2] 90 ldw (0x0f, sp), y + 000038 17 0D [ 2] 91 ldw (0x0d, sp), y + 00003A 0F 11 [ 1] 92 clr (0x11, sp) + 00003C 93 00131$: + 00003C 5F [ 1] 94 clrw x + 00003D 7B 11 [ 1] 95 ld a, (0x11, sp) + 00003F 97 [ 1] 96 ld xl, a + 000040 72 FB 0D [ 2] 97 addw x, (0x0d, sp) + 000043 F6 [ 1] 98 ld a, (x) + 000044 27 15 [ 1] 99 jreq 00174$ + 000046 88 [ 1] 100 push a + 000047 7B 12 [ 1] 101 ld a, (0x12, sp) + 000049 A1 03 [ 1] 102 cp a, #0x03 + 00004B 84 [ 1] 103 pop a + 00004C 24 0D [ 1] 104 jrnc 00174$ + 105 ; ../mbrtowc.c: 51: mbseq[i] = ps->c[i]; + 00004E 5F [ 1] 106 clrw x + 00004F 41 [ 1] 107 exg a, xl + 000050 7B 11 [ 1] 108 ld a, (0x11, sp) + 000052 41 [ 1] 109 exg a, xl + 000053 72 FB 07 [ 2] 110 addw x, (0x07, sp) + 000056 F7 [ 1] 111 ld (x), a + 112 ; ../mbrtowc.c: 50: for(i = 0; ps->c[i] && i < 3; i++) + 000057 0C 11 [ 1] 113 inc (0x11, sp) + 000059 20 E1 [ 2] 114 jra 00131$ + 00005B 115 00174$: + 00005B 7B 11 [ 1] 116 ld a, (0x11, sp) + 00005D 6B 09 [ 1] 117 ld (0x09, sp), a + 118 ; ../mbrtowc.c: 53: seqlen = 1; + 00005F A6 01 [ 1] 119 ld a, #0x01 + 000061 6B 0A [ 1] 120 ld (0x0a, sp), a + 121 ; ../mbrtowc.c: 54: first_byte = ps->c[0] ? ps->c[0] : *s; + 000063 1E 1B [ 2] 122 ldw x, (0x1b, sp) + 000065 F6 [ 1] 123 ld a, (x) + 000066 16 17 [ 2] 124 ldw y, (0x17, sp) + 000068 17 0B [ 2] 125 ldw (0x0b, sp), y + 00006A 4D [ 1] 126 tnz a + 00006B 26 03 [ 1] 127 jrne 00148$ + 00006D 1E 0B [ 2] 128 ldw x, (0x0b, sp) + 00006F F6 [ 1] 129 ld a, (x) + 000070 130 00148$: + 131 ; ../mbrtowc.c: 56: if(first_byte & 0x80) + 000070 6B 11 [ 1] 132 ld (0x11, sp), a + 000072 2A 3E [ 1] 133 jrpl 00112$ + 134 ; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen)) + 000074 A6 01 [ 1] 135 ld a, #0x01 + 000076 6B 0D [ 1] 136 ld (0x0d, sp), a + 000078 137 00108$: + 000078 AE 00 80 [ 2] 138 ldw x, #0x0080 + 00007B 7B 0D [ 1] 139 ld a, (0x0d, sp) + 00007D 27 04 [ 1] 140 jreq 00287$ + 00007F 141 00286$: + 00007F 57 [ 2] 142 sraw x + 000080 4A [ 1] 143 dec a + 000081 26 FC [ 1] 144 jrne 00286$ + 000083 145 00287$: + 000083 7B 11 [ 1] 146 ld a, (0x11, sp) + 000085 6B 02 [ 1] 147 ld (0x02, sp), a + 000087 0F 01 [ 1] 148 clr (0x01, sp) + 149 ; ../mbrtowc.c: 59: seqlen++; + 000089 7B 0D [ 1] 150 ld a, (0x0d, sp) + 00008B 4C [ 1] 151 inc a + 00008C 6B 0E [ 1] 152 ld (0x0e, sp), a + 153 ; ../mbrtowc.c: 58: while (first_byte & (0x80 >> seqlen)) + 00008E 9F [ 1] 154 ld a, xl + 00008F 14 02 [ 1] 155 and a, (0x02, sp) + 000091 02 [ 1] 156 rlwa x + 000092 14 01 [ 1] 157 and a, (0x01, sp) + 000094 95 [ 1] 158 ld xh, a + 000095 5D [ 2] 159 tnzw x + 000096 27 06 [ 1] 160 jreq 00175$ + 161 ; ../mbrtowc.c: 59: seqlen++; + 000098 7B 0E [ 1] 162 ld a, (0x0e, sp) + 00009A 6B 0D [ 1] 163 ld (0x0d, sp), a + 00009C 20 DA [ 2] 164 jra 00108$ + 00009E 165 00175$: + 00009E 7B 0D [ 1] 166 ld a, (0x0d, sp) + 0000A0 6B 0A [ 1] 167 ld (0x0a, sp), a + 168 ; ../mbrtowc.c: 60: first_byte &= (0xff >> (seqlen + 1)); + 0000A2 AE 00 FF [ 2] 169 ldw x, #0x00ff + 0000A5 7B 0E [ 1] 170 ld a, (0x0e, sp) + 0000A7 27 04 [ 1] 171 jreq 00290$ + 0000A9 172 00289$: + 0000A9 57 [ 2] 173 sraw x + 0000AA 4A [ 1] 174 dec a + 0000AB 26 FC [ 1] 175 jrne 00289$ + 0000AD 176 00290$: + 0000AD 9F [ 1] 177 ld a, xl + 0000AE 14 11 [ 1] 178 and a, (0x11, sp) + 0000B0 6B 11 [ 1] 179 ld (0x11, sp), a + 0000B2 180 00112$: + 181 ; ../mbrtowc.c: 63: if(seqlen > 4) + 0000B2 7B 0A [ 1] 182 ld a, (0x0a, sp) + 0000B4 A1 04 [ 1] 183 cp a, #0x04 + 0000B6 23 04 [ 2] 184 jrule 00291$ + 0000B8 ACs00r01rE5 [ 2] 185 jpf 00128$ + 0000BC 186 00291$: + 187 ; ../mbrtowc.c: 66: if(i + n < seqlen) // Incomplete multibyte character + 0000BC 7B 09 [ 1] 188 ld a, (0x09, sp) + 0000BE 6B 0E [ 1] 189 ld (0x0e, sp), a + 0000C0 0F 0D [ 1] 190 clr (0x0d, sp) + 0000C2 1E 0D [ 2] 191 ldw x, (0x0d, sp) + 0000C4 72 FB 19 [ 2] 192 addw x, (0x19, sp) + 0000C7 7B 0A [ 1] 193 ld a, (0x0a, sp) + 0000C9 6B 02 [ 1] 194 ld (0x02, sp), a + 0000CB 0F 01 [ 1] 195 clr (0x01, sp) + 0000CD 13 01 [ 2] 196 cpw x, (0x01, sp) + 0000CF 24 38 [ 1] 197 jrnc 00164$ + 198 ; ../mbrtowc.c: 70: return(-2); + 0000D1 16 0F [ 2] 199 ldw y, (0x0f, sp) + 0000D3 17 07 [ 2] 200 ldw (0x07, sp), y + 0000D5 16 0B [ 2] 201 ldw y, (0x0b, sp) + 0000D7 17 10 [ 2] 202 ldw (0x10, sp), y + 0000D9 7B 09 [ 1] 203 ld a, (0x09, sp) + 0000DB 6B 0F [ 1] 204 ld (0x0f, sp), a + 0000DD 16 19 [ 2] 205 ldw y, (0x19, sp) + 0000DF 17 0D [ 2] 206 ldw (0x0d, sp), y + 0000E1 207 00134$: + 208 ; ../mbrtowc.c: 68: for(;n-- ; i++) + 0000E1 1E 0D [ 2] 209 ldw x, (0x0d, sp) + 0000E3 16 0D [ 2] 210 ldw y, (0x0d, sp) + 0000E5 90 5A [ 2] 211 decw y + 0000E7 17 0D [ 2] 212 ldw (0x0d, sp), y + 0000E9 5D [ 2] 213 tnzw x + 0000EA 27 16 [ 1] 214 jreq 00115$ + 215 ; ../mbrtowc.c: 69: ps->c[i] = *s++; + 0000EC 5F [ 1] 216 clrw x + 0000ED 7B 0F [ 1] 217 ld a, (0x0f, sp) + 0000EF 97 [ 1] 218 ld xl, a + 0000F0 72 FB 07 [ 2] 219 addw x, (0x07, sp) + 0000F3 16 10 [ 2] 220 ldw y, (0x10, sp) + 0000F5 90 F6 [ 1] 221 ld a, (y) + 0000F7 16 10 [ 2] 222 ldw y, (0x10, sp) + 0000F9 90 5C [ 1] 223 incw y + 0000FB 17 10 [ 2] 224 ldw (0x10, sp), y + 0000FD F7 [ 1] 225 ld (x), a + 226 ; ../mbrtowc.c: 68: for(;n-- ; i++) + 0000FE 0C 0F [ 1] 227 inc (0x0f, sp) + 000100 20 DF [ 2] 228 jra 00134$ + 000102 229 00115$: + 230 ; ../mbrtowc.c: 70: return(-2); + 000102 AE FF FE [ 2] 231 ldw x, #0xfffe + 000105 ACs00r01rED [ 2] 232 jpf 00145$ + 233 ; ../mbrtowc.c: 73: for(j = 0; j < i; j++) + 000109 234 00164$: + 000109 4F [ 1] 235 clr a + 00010A 236 00137$: + 00010A 11 09 [ 1] 237 cp a, (0x09, sp) + 00010C 24 09 [ 1] 238 jrnc 00118$ + 239 ; ../mbrtowc.c: 74: ps->c[j] = 0; + 00010E 5F [ 1] 240 clrw x + 00010F 97 [ 1] 241 ld xl, a + 000110 72 FB 0F [ 2] 242 addw x, (0x0f, sp) + 000113 7F [ 1] 243 clr (x) + 244 ; ../mbrtowc.c: 73: for(j = 0; j < i; j++) + 000114 4C [ 1] 245 inc a + 000115 20 F3 [ 2] 246 jra 00137$ + 000117 247 00118$: + 248 ; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++) + 000117 AE 00 01 [ 2] 249 ldw x, #0x0001 + 00011A 1F 19 [ 2] 250 ldw (0x19, sp), x + 00011C 0D 09 [ 1] 251 tnz (0x09, sp) + 00011E 27 03 [ 1] 252 jreq 00149$ + 000120 1E 0D [ 2] 253 ldw x, (0x0d, sp) + 000122 C5 254 .byte 0xc5 + 000123 255 00149$: + 000123 5F [ 1] 256 clrw x + 000124 5C [ 1] 257 incw x + 000125 258 00150$: + 000125 41 [ 1] 259 exg a, xl + 000126 6B 10 [ 1] 260 ld (0x10, sp), a + 000128 41 [ 1] 261 exg a, xl + 000129 16 07 [ 2] 262 ldw y, (0x07, sp) + 00012B 17 01 [ 2] 263 ldw (0x01, sp), y + 00012D 16 0B [ 2] 264 ldw y, (0x0b, sp) + 00012F AE 00 01 [ 2] 265 ldw x, #0x0001 + 000132 1F 0E [ 2] 266 ldw (0x0e, sp), x + 000134 267 00140$: + 000134 7B 10 [ 1] 268 ld a, (0x10, sp) + 000136 11 0A [ 1] 269 cp a, (0x0a, sp) + 000138 24 2B [ 1] 270 jrnc 00121$ + 271 ; ../mbrtowc.c: 78: mbseq[i] = *s++; + 00013A 5F [ 1] 272 clrw x + 00013B 7B 10 [ 1] 273 ld a, (0x10, sp) + 00013D 97 [ 1] 274 ld xl, a + 00013E 72 FB 01 [ 2] 275 addw x, (0x01, sp) + 000141 90 F6 [ 1] 276 ld a, (y) + 000143 90 5C [ 1] 277 incw y + 000145 F7 [ 1] 278 ld (x), a + 279 ; ../mbrtowc.c: 79: if((mbseq[i] & 0xc0) != 0x80) + 000146 6B 0D [ 1] 280 ld (0x0d, sp), a + 000148 0F 0C [ 1] 281 clr (0x0c, sp) + 00014A 7B 0D [ 1] 282 ld a, (0x0d, sp) + 00014C A4 C0 [ 1] 283 and a, #0xc0 + 00014E 97 [ 1] 284 ld xl, a + 00014F 4F [ 1] 285 clr a + 000150 95 [ 1] 286 ld xh, a + 000151 A3 00 80 [ 2] 287 cpw x, #0x0080 + 000154 27 04 [ 1] 288 jreq 00299$ + 000156 ACs00r01rE5 [ 2] 289 jpf 00128$ + 00015A 290 00299$: + 291 ; ../mbrtowc.c: 76: for(n = 1, i = i ? i : 1; i < seqlen; i++, n++) + 00015A 0C 10 [ 1] 292 inc (0x10, sp) + 00015C 1E 0E [ 2] 293 ldw x, (0x0e, sp) + 00015E 5C [ 1] 294 incw x + 00015F 1F 0E [ 2] 295 ldw (0x0e, sp), x + 000161 1F 19 [ 2] 296 ldw (0x19, sp), x + 000163 20 CF [ 2] 297 jra 00140$ + 000165 298 00121$: + 299 ; ../mbrtowc.c: 83: codepoint = first_byte; + 000165 5F [ 1] 300 clrw x + 000166 7B 11 [ 1] 301 ld a, (0x11, sp) + 000168 97 [ 1] 302 ld xl, a + 000169 90 5F [ 1] 303 clrw y + 00016B 1F 0F [ 2] 304 ldw (0x0f, sp), x + 00016D 17 0D [ 2] 305 ldw (0x0d, sp), y + 306 ; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--) + 00016F 1E 07 [ 2] 307 ldw x, (0x07, sp) + 000171 5C [ 1] 308 incw x + 000172 7B 0A [ 1] 309 ld a, (0x0a, sp) + 000174 4A [ 1] 310 dec a + 000175 6B 11 [ 1] 311 ld (0x11, sp), a + 000177 1F 0B [ 2] 312 ldw (0x0b, sp), x + 000179 313 00143$: + 000179 0D 11 [ 1] 314 tnz (0x11, sp) + 00017B 27 39 [ 1] 315 jreq 00122$ + 316 ; ../mbrtowc.c: 87: codepoint <<= 6; + 00017D A6 06 [ 1] 317 ld a, #0x06 + 00017F 318 00302$: + 00017F 08 10 [ 1] 319 sll (0x10, sp) + 000181 09 0F [ 1] 320 rlc (0x0f, sp) + 000183 09 0E [ 1] 321 rlc (0x0e, sp) + 000185 09 0D [ 1] 322 rlc (0x0d, sp) + 000187 4A [ 1] 323 dec a + 000188 26 F5 [ 1] 324 jrne 00302$ + 325 ; ../mbrtowc.c: 88: codepoint |= (*s & 0x3f); + 00018A 1E 0B [ 2] 326 ldw x, (0x0b, sp) + 00018C F6 [ 1] 327 ld a, (x) + 00018D A4 3F [ 1] 328 and a, #0x3f + 00018F 97 [ 1] 329 ld xl, a + 000190 4F [ 1] 330 clr a + 000191 95 [ 1] 331 ld xh, a + 000192 49 [ 1] 332 rlc a + 000193 4F [ 1] 333 clr a + 000194 A2 00 [ 1] 334 sbc a, #0x00 + 000196 90 97 [ 1] 335 ld yl, a + 000198 1A 0D [ 1] 336 or a, (0x0d, sp) + 00019A 90 95 [ 1] 337 ld yh, a + 00019C 9F [ 1] 338 ld a, xl + 00019D 1A 10 [ 1] 339 or a, (0x10, sp) + 00019F 02 [ 1] 340 rlwa x + 0001A0 1A 0F [ 1] 341 or a, (0x0f, sp) + 0001A2 95 [ 1] 342 ld xh, a + 0001A3 90 9F [ 1] 343 ld a, yl + 0001A5 1A 0E [ 1] 344 or a, (0x0e, sp) + 0001A7 90 97 [ 1] 345 ld yl, a + 0001A9 1F 0F [ 2] 346 ldw (0x0f, sp), x + 0001AB 17 0D [ 2] 347 ldw (0x0d, sp), y + 348 ; ../mbrtowc.c: 89: s++; + 0001AD 1E 0B [ 2] 349 ldw x, (0x0b, sp) + 0001AF 5C [ 1] 350 incw x + 0001B0 1F 0B [ 2] 351 ldw (0x0b, sp), x + 352 ; ../mbrtowc.c: 85: for(s = mbseq + 1, seqlen--; seqlen; seqlen--) + 0001B2 0A 11 [ 1] 353 dec (0x11, sp) + 0001B4 20 C3 [ 2] 354 jra 00143$ + 0001B6 355 00122$: + 356 ; ../mbrtowc.c: 92: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate. + 0001B6 1E 0F [ 2] 357 ldw x, (0x0f, sp) + 0001B8 A3 D8 00 [ 2] 358 cpw x, #0xd800 + 0001BB 7B 0E [ 1] 359 ld a, (0x0e, sp) + 0001BD A2 00 [ 1] 360 sbc a, #0x00 + 0001BF 7B 0D [ 1] 361 ld a, (0x0d, sp) + 0001C1 A2 00 [ 1] 362 sbc a, #0x00 + 0001C3 25 11 [ 1] 363 jrc 00124$ + 0001C5 AE DF FF [ 2] 364 ldw x, #0xdfff + 0001C8 13 0F [ 2] 365 cpw x, (0x0f, sp) + 0001CA 4F [ 1] 366 clr a + 0001CB 12 0E [ 1] 367 sbc a, (0x0e, sp) + 0001CD 4F [ 1] 368 clr a + 0001CE 12 0D [ 1] 369 sbc a, (0x0d, sp) + 0001D0 25 04 [ 1] 370 jrc 00124$ + 371 ; ../mbrtowc.c: 93: return(-1); + 0001D2 5F [ 1] 372 clrw x + 0001D3 5A [ 2] 373 decw x + 0001D4 20 17 [ 2] 374 jra 00145$ + 0001D6 375 00124$: + 376 ; ../mbrtowc.c: 95: if(pwc) + 377 ; ../mbrtowc.c: 96: *pwc = codepoint; + 0001D6 1E 15 [ 2] 378 ldw x, (0x15, sp) + 0001D8 27 07 [ 1] 379 jreq 00127$ + 0001DA 16 0F [ 2] 380 ldw y, (0x0f, sp) + 0001DC EF 02 [ 2] 381 ldw (0x2, x), y + 0001DE 16 0D [ 2] 382 ldw y, (0x0d, sp) + 0001E0 FF [ 2] 383 ldw (x), y + 0001E1 384 00127$: + 385 ; ../mbrtowc.c: 97: return(n); + 0001E1 1E 19 [ 2] 386 ldw x, (0x19, sp) + 0001E3 20 08 [ 2] 387 jra 00145$ + 388 ; ../mbrtowc.c: 99: eilseq: + 0001E5 389 00128$: + 390 ; ../mbrtowc.c: 100: errno = EILSEQ; + 0001E5 AE 00 54 [ 2] 391 ldw x, #0x0054 + 0001E8 CFu00u00 [ 2] 392 ldw _errno+0, x + 393 ; ../mbrtowc.c: 101: return(-1); + 0001EB 5F [ 1] 394 clrw x + 0001EC 5A [ 2] 395 decw x + 0001ED 396 00145$: + 397 ; ../mbrtowc.c: 102: } + 0001ED 5B 11 [ 2] 398 addw sp, #17 + 0001EF 87 [ 5] 399 retf + 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-large/mbrtowc.rel b/device/lib/stm8-large/mbrtowc.rel new file mode 100644 index 0000000..4fafbd1 --- /dev/null +++ b/device/lib/stm8-large/mbrtowc.rel @@ -0,0 +1,200 @@ +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 1F0 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 17 26 17 1E 1B 89 4B 01 4B 00 +R 00 00 00 09 +T 00 00 0D 4B 00 00 00 4B 00 00 00 5F 89 8D +R 00 00 00 09 F1 09 04 00 07 F1 81 08 00 07 +T 00 00 14 00 00 00 5B 08 AC 00 01 ED +R 00 00 00 09 80 03 00 09 80 09 00 09 +T 00 00 1D +R 00 00 00 09 +T 00 00 1D 1E 19 26 04 AC 00 01 E5 +R 00 00 00 09 80 08 00 09 +T 00 00 25 +R 00 00 00 09 +T 00 00 25 1E 1B 26 05 AE 00 00 1F 1B +R 00 00 00 09 00 08 00 01 +T 00 00 2E +R 00 00 00 09 +T 00 00 2E 96 1C 00 03 1F 07 16 1B 17 0F 17 0D 0F +R 00 00 00 09 +T 00 00 3B 11 +R 00 00 00 09 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 5F 7B 11 97 72 FB 0D F6 27 15 88 7B 12 +R 00 00 00 09 +T 00 00 49 A1 03 84 24 0D 5F 41 7B 11 41 72 FB 07 +R 00 00 00 09 +T 00 00 56 F7 0C 11 20 E1 +R 00 00 00 09 +T 00 00 5B +R 00 00 00 09 +T 00 00 5B 7B 11 6B 09 A6 01 6B 0A 1E 1B F6 16 17 +R 00 00 00 09 +T 00 00 68 17 0B 4D 26 03 1E 0B F6 +R 00 00 00 09 +T 00 00 70 +R 00 00 00 09 +T 00 00 70 6B 11 2A 3E A6 01 6B 0D +R 00 00 00 09 +T 00 00 78 +R 00 00 00 09 +T 00 00 78 AE 00 80 7B 0D 27 04 +R 00 00 00 09 +T 00 00 7F +R 00 00 00 09 +T 00 00 7F 57 4A 26 FC +R 00 00 00 09 +T 00 00 83 +R 00 00 00 09 +T 00 00 83 7B 11 6B 02 0F 01 7B 0D 4C 6B 0E 9F 14 +R 00 00 00 09 +T 00 00 90 02 02 14 01 95 5D 27 06 7B 0E 6B 0D 20 +R 00 00 00 09 +T 00 00 9D DA +R 00 00 00 09 +T 00 00 9E +R 00 00 00 09 +T 00 00 9E 7B 0D 6B 0A AE 00 FF 7B 0E 27 04 +R 00 00 00 09 +T 00 00 A9 +R 00 00 00 09 +T 00 00 A9 57 4A 26 FC +R 00 00 00 09 +T 00 00 AD +R 00 00 00 09 +T 00 00 AD 9F 14 11 6B 11 +R 00 00 00 09 +T 00 00 B2 +R 00 00 00 09 +T 00 00 B2 7B 0A A1 04 23 04 AC 00 01 E5 +R 00 00 00 09 80 0A 00 09 +T 00 00 BC +R 00 00 00 09 +T 00 00 BC 7B 09 6B 0E 0F 0D 1E 0D 72 FB 19 7B 0A +R 00 00 00 09 +T 00 00 C9 6B 02 0F 01 13 01 24 38 16 0F 17 07 16 +R 00 00 00 09 +T 00 00 D6 0B 17 10 7B 09 6B 0F 16 19 17 0D +R 00 00 00 09 +T 00 00 E1 +R 00 00 00 09 +T 00 00 E1 1E 0D 16 0D 90 5A 17 0D 5D 27 16 5F 7B +R 00 00 00 09 +T 00 00 EE 0F 97 72 FB 07 16 10 90 F6 16 10 90 5C +R 00 00 00 09 +T 00 00 FB 17 10 F7 0C 0F 20 DF +R 00 00 00 09 +T 00 01 02 +R 00 00 00 09 +T 00 01 02 AE FF FE AC 00 01 ED +R 00 00 00 09 80 07 00 09 +T 00 01 09 +R 00 00 00 09 +T 00 01 09 4F +R 00 00 00 09 +T 00 01 0A +R 00 00 00 09 +T 00 01 0A 11 09 24 09 5F 97 72 FB 0F 7F 4C 20 F3 +R 00 00 00 09 +T 00 01 17 +R 00 00 00 09 +T 00 01 17 AE 00 01 1F 19 0D 09 27 03 1E 0D C5 +R 00 00 00 09 +T 00 01 23 +R 00 00 00 09 +T 00 01 23 5F 5C +R 00 00 00 09 +T 00 01 25 +R 00 00 00 09 +T 00 01 25 41 6B 10 41 16 07 17 01 16 0B AE 00 01 +R 00 00 00 09 +T 00 01 32 1F 0E +R 00 00 00 09 +T 00 01 34 +R 00 00 00 09 +T 00 01 34 7B 10 11 0A 24 2B 5F 7B 10 97 72 FB 01 +R 00 00 00 09 +T 00 01 41 90 F6 90 5C F7 6B 0D 0F 0C 7B 0D A4 C0 +R 00 00 00 09 +T 00 01 4E 97 4F 95 A3 00 80 27 04 AC +R 00 00 00 09 +T 00 01 57 00 01 E5 +R 00 00 00 09 80 03 00 09 +T 00 01 5A +R 00 00 00 09 +T 00 01 5A 0C 10 1E 0E 5C 1F 0E 1F 19 20 CF +R 00 00 00 09 +T 00 01 65 +R 00 00 00 09 +T 00 01 65 5F 7B 11 97 90 5F 1F 0F 17 0D 1E 07 5C +R 00 00 00 09 +T 00 01 72 7B 0A 4A 6B 11 1F 0B +R 00 00 00 09 +T 00 01 79 +R 00 00 00 09 +T 00 01 79 0D 11 27 39 A6 06 +R 00 00 00 09 +T 00 01 7F +R 00 00 00 09 +T 00 01 7F 08 10 09 0F 09 0E 09 0D 4A 26 F5 1E 0B +R 00 00 00 09 +T 00 01 8C F6 A4 3F 97 4F 95 49 4F A2 00 90 97 1A +R 00 00 00 09 +T 00 01 99 0D 90 95 9F 1A 10 02 1A 0F 95 90 9F 1A +R 00 00 00 09 +T 00 01 A6 0E 90 97 1F 0F 17 0D 1E 0B 5C 1F 0B 0A +R 00 00 00 09 +T 00 01 B3 11 20 C3 +R 00 00 00 09 +T 00 01 B6 +R 00 00 00 09 +T 00 01 B6 1E 0F A3 D8 00 7B 0E A2 00 7B 0D A2 00 +R 00 00 00 09 +T 00 01 C3 25 11 AE DF FF 13 0F 4F 12 0E 4F 12 0D +R 00 00 00 09 +T 00 01 D0 25 04 5F 5A 20 17 +R 00 00 00 09 +T 00 01 D6 +R 00 00 00 09 +T 00 01 D6 1E 15 27 07 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 01 E1 +R 00 00 00 09 +T 00 01 E1 1E 19 20 08 +R 00 00 00 09 +T 00 01 E5 +R 00 00 00 09 +T 00 01 E5 AE 00 54 CF 00 00 5F 5A +R 00 00 00 09 12 07 00 00 +T 00 01 ED +R 00 00 00 09 +T 00 01 ED 5B 11 87 +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-large/mbrtowc.sym b/device/lib/stm8-large/mbrtowc.sym new file mode 100644 index 0000000..06fe6a3 --- /dev/null +++ b/device/lib/stm8-large/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 1F0 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/mbsinit.asm b/device/lib/stm8-large/mbsinit.asm new file mode 100644 index 0000000..c56f7e2 --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, 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: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mbsinit.lst b/device/lib/stm8-large/mbsinit.lst new file mode 100644 index 0000000..fbd55a4 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 55 ldw x, (0x04, 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 87 [ 5] 73 retf + 74 .area CODE + 75 .area CONST + 76 .area INITIALIZER + 77 .area CABS (ABS) diff --git a/device/lib/stm8-large/mbsinit.rel b/device/lib/stm8-large/mbsinit.rel new file mode 100644 index 0000000..41f42be --- /dev/null +++ b/device/lib/stm8-large/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 04 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/mbsinit.sym b/device/lib/stm8-large/mbsinit.sym new file mode 100644 index 0000000..94e8166 --- /dev/null +++ b/device/lib/stm8-large/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-large/mbstoc16s.asm b/device/lib/stm8-large/mbstoc16s.asm new file mode 100644 index 0000000..1459287 --- /dev/null +++ b/device/lib/stm8-large/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, (0x19, sp) + pushw y + pushw x + callf _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 + jpf 00118$ +00106$: +; ../mbstoc16s.c: 59: if(m < n) + ldw x, (0x09, sp) + cpw x, (0x19, sp) + clr a + rlc a + ld (0x0d, sp), a +; ../mbstoc16s.c: 60: *c16s = 0; + ldw y, (0x15, sp) +; ../mbstoc16s.c: 57: else if(!l) + ldw x, (0x0b, sp) + jrne 00107$ +; ../mbstoc16s.c: 59: if(m < n) + tnz (0x0d, sp) + jrne 00157$ + jpf 00115$ +00157$: +; ../mbstoc16s.c: 60: *c16s = 0; + ldw x, y + clr (0x1, x) + clr (x) +; ../mbstoc16s.c: 61: break; + jpf 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 (0x15, 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, (0x19, 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 (0x15, 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 (0x15, 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, (0x17, sp) + addw x, (0x0b, sp) + ldw (0x17, sp), x + jpf 00116$ +00115$: +; ../mbstoc16s.c: 85: return(m); + ldw x, (0x09, sp) +00118$: +; ../mbstoc16s.c: 86: } + addw sp, #17 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mbstoc16s.lst b/device/lib/stm8-large/mbstoc16s.lst new file mode 100644 index 0000000..f2fddcd --- /dev/null +++ b/device/lib/stm8-large/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 19 [ 2] 66 ldw y, (0x19, sp) + 00000F 90 89 [ 2] 67 pushw y + 000011 89 [ 2] 68 pushw x + 000012 8Ds00r00r00 [ 5] 69 callf _mbtowc + 000016 5B 06 [ 2] 70 addw sp, #6 + 000018 1F 0B [ 2] 71 ldw (0x0b, sp), x + 72 ; ../mbstoc16s.c: 55: if(l < 0) + 00001A 0D 0B [ 1] 73 tnz (0x0b, sp) + 00001C 2A 06 [ 1] 74 jrpl 00106$ + 75 ; ../mbstoc16s.c: 56: return(-1); + 00001E 5F [ 1] 76 clrw x + 00001F 5A [ 2] 77 decw x + 000020 ACs00r00rCA [ 2] 78 jpf 00118$ + 000024 79 00106$: + 80 ; ../mbstoc16s.c: 59: if(m < n) + 000024 1E 09 [ 2] 81 ldw x, (0x09, sp) + 000026 13 19 [ 2] 82 cpw x, (0x19, sp) + 000028 4F [ 1] 83 clr a + 000029 49 [ 1] 84 rlc a + 00002A 6B 0D [ 1] 85 ld (0x0d, sp), a + 86 ; ../mbstoc16s.c: 60: *c16s = 0; + 00002C 16 15 [ 2] 87 ldw y, (0x15, sp) + 88 ; ../mbstoc16s.c: 57: else if(!l) + 00002E 1E 0B [ 2] 89 ldw x, (0x0b, sp) + 000030 26 10 [ 1] 90 jrne 00107$ + 91 ; ../mbstoc16s.c: 59: if(m < n) + 000032 0D 0D [ 1] 92 tnz (0x0d, sp) + 000034 26 04 [ 1] 93 jrne 00157$ + 000036 ACs00r00rC8 [ 2] 94 jpf 00115$ + 00003A 95 00157$: + 96 ; ../mbstoc16s.c: 60: *c16s = 0; + 00003A 93 [ 1] 97 ldw x, y + 00003B 6F 01 [ 1] 98 clr (0x1, x) + 00003D 7F [ 1] 99 clr (x) + 100 ; ../mbstoc16s.c: 61: break; + 00003E ACs00r00rC8 [ 2] 101 jpf 00115$ + 000042 102 00107$: + 103 ; ../mbstoc16s.c: 70: m++; + 000042 1E 09 [ 2] 104 ldw x, (0x09, sp) + 000044 5C [ 1] 105 incw x + 000045 1F 0E [ 2] 106 ldw (0x0e, sp), x + 107 ; ../mbstoc16s.c: 69: *c16s++ = codepoint; + 000047 93 [ 1] 108 ldw x, y + 000048 5C [ 1] 109 incw x + 000049 5C [ 1] 110 incw x + 00004A 1F 10 [ 2] 111 ldw (0x10, sp), x + 112 ; ../mbstoc16s.c: 64: if (codepoint <= 0xffff) // Basic multilingual plane + 00004C 1E 05 [ 2] 113 ldw x, (0x05, sp) + 00004E 26 16 [ 1] 114 jrne 00113$ + 115 ; ../mbstoc16s.c: 66: if (m >= n) + 000050 7B 0D [ 1] 116 ld a, (0x0d, sp) + 000052 27 74 [ 1] 117 jreq 00115$ + 118 ; ../mbstoc16s.c: 69: *c16s++ = codepoint; + 000054 1E 07 [ 2] 119 ldw x, (0x07, sp) + 000056 1F 09 [ 2] 120 ldw (0x09, sp), x + 000058 93 [ 1] 121 ldw x, y + 000059 16 09 [ 2] 122 ldw y, (0x09, sp) + 00005B FF [ 2] 123 ldw (x), y + 00005C 16 10 [ 2] 124 ldw y, (0x10, sp) + 00005E 17 15 [ 2] 125 ldw (0x15, sp), y + 126 ; ../mbstoc16s.c: 70: m++; + 000060 16 0E [ 2] 127 ldw y, (0x0e, sp) + 000062 17 09 [ 2] 128 ldw (0x09, sp), y + 000064 20 57 [ 2] 129 jra 00114$ + 000066 130 00113$: + 131 ; ../mbstoc16s.c: 74: if (m + 1 >= n) + 000066 1E 0E [ 2] 132 ldw x, (0x0e, sp) + 000068 13 19 [ 2] 133 cpw x, (0x19, sp) + 00006A 24 5C [ 1] 134 jrnc 00115$ + 135 ; ../mbstoc16s.c: 77: codepoint -= 0x100000; + 00006C 7B 08 [ 1] 136 ld a, (0x08, sp) + 00006E 6B 04 [ 1] 137 ld (0x04, sp), a + 000070 7B 07 [ 1] 138 ld a, (0x07, sp) + 000072 1E 05 [ 2] 139 ldw x, (0x05, sp) + 000074 1D 00 10 [ 2] 140 subw x, #0x0010 + 000077 6B 07 [ 1] 141 ld (0x07, sp), a + 000079 1F 05 [ 2] 142 ldw (0x05, sp), x + 00007B 7B 04 [ 1] 143 ld a, (0x04, sp) + 00007D 6B 08 [ 1] 144 ld (0x08, sp), a + 145 ; ../mbstoc16s.c: 78: *c16s++ = ((codepoint >> 10) & 0x3ff) + 0xd800; + 00007F 1E 06 [ 2] 146 ldw x, (0x06, sp) + 000081 1F 03 [ 2] 147 ldw (0x03, sp), x + 000083 7B 05 [ 1] 148 ld a, (0x05, sp) + 000085 6B 02 [ 1] 149 ld (0x02, sp), a + 000087 0F 01 [ 1] 150 clr (0x01, sp) + 000089 04 02 [ 1] 151 srl (0x02, sp) + 00008B 06 03 [ 1] 152 rrc (0x03, sp) + 00008D 06 04 [ 1] 153 rrc (0x04, sp) + 00008F 04 02 [ 1] 154 srl (0x02, sp) + 000091 06 03 [ 1] 155 rrc (0x03, sp) + 000093 06 04 [ 1] 156 rrc (0x04, sp) + 000095 7B 04 [ 1] 157 ld a, (0x04, sp) + 000097 97 [ 1] 158 ld xl, a + 000098 7B 03 [ 1] 159 ld a, (0x03, sp) + 00009A A4 03 [ 1] 160 and a, #0x03 + 00009C 95 [ 1] 161 ld xh, a + 00009D 1C D8 00 [ 2] 162 addw x, #0xd800 + 0000A0 90 FF [ 2] 163 ldw (y), x + 0000A2 16 10 [ 2] 164 ldw y, (0x10, sp) + 165 ; ../mbstoc16s.c: 79: *c16s++ = (codepoint & 0x3ff) + 0xdc00; + 0000A4 17 15 [ 2] 166 ldw (0x15, sp), y + 0000A6 1E 07 [ 2] 167 ldw x, (0x07, sp) + 0000A8 9E [ 1] 168 ld a, xh + 0000A9 A4 03 [ 1] 169 and a, #0x03 + 0000AB 95 [ 1] 170 ld xh, a + 0000AC 1C DC 00 [ 2] 171 addw x, #0xdc00 + 0000AF 90 FF [ 2] 172 ldw (y), x + 0000B1 72 A9 00 02 [ 2] 173 addw y, #0x0002 + 0000B5 17 15 [ 2] 174 ldw (0x15, sp), y + 175 ; ../mbstoc16s.c: 80: m += 2; + 0000B7 1E 09 [ 2] 176 ldw x, (0x09, sp) + 0000B9 5C [ 1] 177 incw x + 0000BA 5C [ 1] 178 incw x + 0000BB 1F 09 [ 2] 179 ldw (0x09, sp), x + 0000BD 180 00114$: + 181 ; ../mbstoc16s.c: 82: s += l; + 0000BD 1E 17 [ 2] 182 ldw x, (0x17, sp) + 0000BF 72 FB 0B [ 2] 183 addw x, (0x0b, sp) + 0000C2 1F 17 [ 2] 184 ldw (0x17, sp), x + 0000C4 ACs00r00r05 [ 2] 185 jpf 00116$ + 0000C8 186 00115$: + 187 ; ../mbstoc16s.c: 85: return(m); + 0000C8 1E 09 [ 2] 188 ldw x, (0x09, sp) + 0000CA 189 00118$: + 190 ; ../mbstoc16s.c: 86: } + 0000CA 5B 11 [ 2] 191 addw sp, #17 + 0000CC 87 [ 5] 192 retf + 193 .area CODE + 194 .area CONST + 195 .area INITIALIZER + 196 .area CABS (ABS) diff --git a/device/lib/stm8-large/mbstoc16s.rel b/device/lib/stm8-large/mbstoc16s.rel new file mode 100644 index 0000000..34b6d08 --- /dev/null +++ b/device/lib/stm8-large/mbstoc16s.rel @@ -0,0 +1,78 @@ +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 CD 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 19 90 89 89 +R 00 00 00 09 +T 00 00 12 8D 00 00 00 5B 06 1F 0B 0D 0B 2A 06 5F +R 00 00 00 09 82 04 00 01 +T 00 00 1F 5A AC 00 00 CA +R 00 00 00 09 80 05 00 09 +T 00 00 24 +R 00 00 00 09 +T 00 00 24 1E 09 13 19 4F 49 6B 0D 16 15 1E 0B 26 +R 00 00 00 09 +T 00 00 31 10 0D 0D 26 04 AC 00 00 C8 +R 00 00 00 09 80 09 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 93 6F 01 7F AC 00 00 C8 +R 00 00 00 09 80 08 00 09 +T 00 00 42 +R 00 00 00 09 +T 00 00 42 1E 09 5C 1F 0E 93 5C 5C 1F 10 1E 05 26 +R 00 00 00 09 +T 00 00 4F 16 7B 0D 27 74 1E 07 1F 09 93 16 09 FF +R 00 00 00 09 +T 00 00 5C 16 10 17 15 16 0E 17 09 20 57 +R 00 00 00 09 +T 00 00 66 +R 00 00 00 09 +T 00 00 66 1E 0E 13 19 24 5C 7B 08 6B 04 7B 07 1E +R 00 00 00 09 +T 00 00 73 05 1D 00 10 6B 07 1F 05 7B 04 6B 08 1E +R 00 00 00 09 +T 00 00 80 06 1F 03 7B 05 6B 02 0F 01 04 02 06 03 +R 00 00 00 09 +T 00 00 8D 06 04 04 02 06 03 06 04 7B 04 97 7B 03 +R 00 00 00 09 +T 00 00 9A A4 03 95 1C D8 00 90 FF 16 10 17 15 1E +R 00 00 00 09 +T 00 00 A7 07 9E A4 03 95 1C DC 00 90 FF 72 A9 +R 00 00 00 09 +T 00 00 B3 00 02 17 15 1E 09 5C 5C 1F 09 +R 00 00 00 09 +T 00 00 BD +R 00 00 00 09 +T 00 00 BD 1E 17 72 FB 0B 1F 17 AC +R 00 00 00 09 +T 00 00 C5 00 00 05 +R 00 00 00 09 80 03 00 09 +T 00 00 C8 +R 00 00 00 09 +T 00 00 C8 1E 09 +R 00 00 00 09 +T 00 00 CA +R 00 00 00 09 +T 00 00 CA 5B 11 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/mbstoc16s.sym b/device/lib/stm8-large/mbstoc16s.sym new file mode 100644 index 0000000..e23132d --- /dev/null +++ b/device/lib/stm8-large/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 CD flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/mbstowcs.asm b/device/lib/stm8-large/mbstowcs.asm new file mode 100644 index 0000000..510482b --- /dev/null +++ b/device/lib/stm8-large/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, (0x0c, sp) + ldw (0x03, sp), y + clrw x + ldw (0x05, sp), x + ldw y, (0x10, 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, (0x10, sp) + pushw x + pushw y + callf _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, (0x0e, sp) + ldw (0x0e, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mbstowcs.lst b/device/lib/stm8-large/mbstowcs.lst new file mode 100644 index 0000000..41d5d7b --- /dev/null +++ b/device/lib/stm8-large/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 0C [ 2] 60 ldw y, (0x0c, 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 10 [ 2] 64 ldw y, (0x10, 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 30 [ 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 10 [ 2] 80 ldw x, (0x10, sp) + 00002A 89 [ 2] 81 pushw x + 00002B 90 89 [ 2] 82 pushw y + 00002D 8Ds00r00r00 [ 5] 83 callf _mbtowc + 000031 5B 06 [ 2] 84 addw sp, #6 + 85 ; ../mbstowcs.c: 39: if(!b) + 000033 5D [ 2] 86 tnzw x + 000034 27 15 [ 1] 87 jreq 00107$ + 88 ; ../mbstowcs.c: 41: if(b < 0) + 000036 5D [ 2] 89 tnzw x + 000037 2A 04 [ 1] 90 jrpl 00104$ + 91 ; ../mbstowcs.c: 42: return(-1); + 000039 5F [ 1] 92 clrw x + 00003A 5A [ 2] 93 decw x + 00003B 20 10 [ 2] 94 jra 00108$ + 00003D 95 00104$: + 96 ; ../mbstowcs.c: 43: s += b; + 00003D 72 FB 0E [ 2] 97 addw x, (0x0e, sp) + 000040 1F 0E [ 2] 98 ldw (0x0e, sp), x + 99 ; ../mbstowcs.c: 44: m++; + 000042 1E 05 [ 2] 100 ldw x, (0x05, sp) + 000044 5C [ 1] 101 incw x + 000045 1F 05 [ 2] 102 ldw (0x05, sp), x + 000047 1F 01 [ 2] 103 ldw (0x01, sp), x + 000049 20 C5 [ 2] 104 jra 00105$ + 00004B 105 00107$: + 106 ; ../mbstowcs.c: 47: return(m); + 00004B 1E 01 [ 2] 107 ldw x, (0x01, sp) + 00004D 108 00108$: + 109 ; ../mbstowcs.c: 48: } + 00004D 5B 08 [ 2] 110 addw sp, #8 + 00004F 87 [ 5] 111 retf + 112 .area CODE + 113 .area CONST + 114 .area INITIALIZER + 115 .area CABS (ABS) diff --git a/device/lib/stm8-large/mbstowcs.rel b/device/lib/stm8-large/mbstowcs.rel new file mode 100644 index 0000000..a00158c --- /dev/null +++ b/device/lib/stm8-large/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 50 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 0C 17 03 5F 1F 05 16 +R 00 00 00 09 +T 00 00 0D 10 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 30 16 03 +R 00 00 00 09 +T 00 00 1D 1E 03 1C 00 04 1F 03 4B 04 4B 00 1E 10 +R 00 00 00 09 +T 00 00 2A 89 90 89 8D 00 00 00 5B 06 5D 27 15 5D +R 00 00 00 09 82 07 00 01 +T 00 00 37 2A 04 5F 5A 20 10 +R 00 00 00 09 +T 00 00 3D +R 00 00 00 09 +T 00 00 3D 72 FB 0E 1F 0E 1E 05 5C 1F 05 1F 01 20 +R 00 00 00 09 +T 00 00 4A C5 +R 00 00 00 09 +T 00 00 4B +R 00 00 00 09 +T 00 00 4B 1E 01 +R 00 00 00 09 +T 00 00 4D +R 00 00 00 09 +T 00 00 4D 5B 08 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/mbstowcs.sym b/device/lib/stm8-large/mbstowcs.sym new file mode 100644 index 0000000..39bb102 --- /dev/null +++ b/device/lib/stm8-large/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 50 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/mbtowc.asm b/device/lib/stm8-large/mbtowc.asm new file mode 100644 index 0000000..1924ccb --- /dev/null +++ b/device/lib/stm8-large/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, (0x12, sp) + jrne 00102$ + jpf 00126$ +00102$: +; ../mbtowc.c: 40: seqlen = 1; + ld a, #0x01 + ld (0x0b, sp), a +; ../mbtowc.c: 41: first_byte = *s; + ldw y, (0x12, 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, (0x14, sp) + cpw x, (0x09, sp) + jrnc 00136$ +00108$: +; ../mbtowc.c: 51: return(-1); + clrw x + decw x + jpf 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 + jpf 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 (0x12, sp), y + ld a, (0x0b, sp) + dec a + ldw y, (0x12, 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, (0x10, sp) + jreq 00119$ +; ../mbtowc.c: 70: *pwc = codepoint; + ldw y, (0x10, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/mbtowc.lst b/device/lib/stm8-large/mbtowc.lst new file mode 100644 index 0000000..adca0d5 --- /dev/null +++ b/device/lib/stm8-large/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 12 [ 2] 57 ldw x, (0x12, sp) + 000004 26 04 [ 1] 58 jrne 00102$ + 000006 ACs00r01r40 [ 2] 59 jpf 00126$ + 00000A 60 00102$: + 61 ; ../mbtowc.c: 40: seqlen = 1; + 00000A A6 01 [ 1] 62 ld a, #0x01 + 00000C 6B 0B [ 1] 63 ld (0x0b, sp), a + 64 ; ../mbtowc.c: 41: first_byte = *s; + 00000E 16 12 [ 2] 65 ldw y, (0x12, sp) + 000010 17 05 [ 2] 66 ldw (0x05, sp), y + 000012 93 [ 1] 67 ldw x, y + 000013 F6 [ 1] 68 ld a, (x) + 69 ; ../mbtowc.c: 43: if(first_byte & 0x80) + 000014 6B 0C [ 1] 70 ld (0x0c, sp), a + 000016 2A 41 [ 1] 71 jrpl 00107$ + 72 ; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen)) + 000018 A6 01 [ 1] 73 ld a, #0x01 + 00001A 6B 07 [ 1] 74 ld (0x07, sp), a + 00001C 75 00103$: + 00001C AE 00 80 [ 2] 76 ldw x, #0x0080 + 00001F 7B 07 [ 1] 77 ld a, (0x07, sp) + 000021 27 04 [ 1] 78 jreq 00204$ + 000023 79 00203$: + 000023 57 [ 2] 80 sraw x + 000024 4A [ 1] 81 dec a + 000025 26 FC [ 1] 82 jrne 00203$ + 000027 83 00204$: + 000027 7B 0C [ 1] 84 ld a, (0x0c, sp) + 000029 6B 09 [ 1] 85 ld (0x09, sp), a + 00002B 0F 08 [ 1] 86 clr (0x08, sp) + 87 ; ../mbtowc.c: 46: seqlen++; + 00002D 7B 07 [ 1] 88 ld a, (0x07, sp) + 00002F 4C [ 1] 89 inc a + 90 ; ../mbtowc.c: 45: while (first_byte & (0x80 >> seqlen)) + 000030 88 [ 1] 91 push a + 000031 9F [ 1] 92 ld a, xl + 000032 14 0A [ 1] 93 and a, (0x0a, sp) + 000034 6B 0C [ 1] 94 ld (0x0c, sp), a + 000036 9E [ 1] 95 ld a, xh + 000037 14 09 [ 1] 96 and a, (0x09, sp) + 000039 6B 0B [ 1] 97 ld (0x0b, sp), a + 00003B 84 [ 1] 98 pop a + 00003C 1E 0A [ 2] 99 ldw x, (0x0a, sp) + 00003E 27 04 [ 1] 100 jreq 00143$ + 101 ; ../mbtowc.c: 46: seqlen++; + 000040 6B 07 [ 1] 102 ld (0x07, sp), a + 000042 20 D8 [ 2] 103 jra 00103$ + 000044 104 00143$: + 000044 88 [ 1] 105 push a + 000045 7B 08 [ 1] 106 ld a, (0x08, sp) + 000047 6B 0C [ 1] 107 ld (0x0c, sp), a + 000049 84 [ 1] 108 pop a + 109 ; ../mbtowc.c: 47: first_byte &= (0xff >> (seqlen + 1)); + 00004A AE 00 FF [ 2] 110 ldw x, #0x00ff + 00004D 4D [ 1] 111 tnz a + 00004E 27 04 [ 1] 112 jreq 00207$ + 000050 113 00206$: + 000050 57 [ 2] 114 sraw x + 000051 4A [ 1] 115 dec a + 000052 26 FC [ 1] 116 jrne 00206$ + 000054 117 00207$: + 000054 9F [ 1] 118 ld a, xl + 000055 14 0C [ 1] 119 and a, (0x0c, sp) + 000057 6B 0C [ 1] 120 ld (0x0c, sp), a + 000059 121 00107$: + 122 ; ../mbtowc.c: 50: if(seqlen > 4 || n < seqlen) + 000059 7B 0B [ 1] 123 ld a, (0x0b, sp) + 00005B A1 04 [ 1] 124 cp a, #0x04 + 00005D 22 0C [ 1] 125 jrugt 00108$ + 00005F 7B 0B [ 1] 126 ld a, (0x0b, sp) + 000061 6B 0A [ 1] 127 ld (0x0a, sp), a + 000063 0F 09 [ 1] 128 clr (0x09, sp) + 000065 1E 14 [ 2] 129 ldw x, (0x14, sp) + 000067 13 09 [ 2] 130 cpw x, (0x09, sp) + 000069 24 06 [ 1] 131 jrnc 00136$ + 00006B 132 00108$: + 133 ; ../mbtowc.c: 51: return(-1); + 00006B 5F [ 1] 134 clrw x + 00006C 5A [ 2] 135 decw x + 00006D ACs00r01r40 [ 2] 136 jpf 00126$ + 137 ; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++) + 000071 138 00136$: + 000071 A6 01 [ 1] 139 ld a, #0x01 + 000073 140 00121$: + 000073 11 0B [ 1] 141 cp a, (0x0b, sp) + 000075 24 1B [ 1] 142 jrnc 00113$ + 143 ; ../mbtowc.c: 54: if((s[i] & 0xc0) != 0x80) + 000077 5F [ 1] 144 clrw x + 000078 97 [ 1] 145 ld xl, a + 000079 72 FB 05 [ 2] 146 addw x, (0x05, sp) + 00007C 88 [ 1] 147 push a + 00007D F6 [ 1] 148 ld a, (x) + 00007E A4 C0 [ 1] 149 and a, #0xc0 + 000080 97 [ 1] 150 ld xl, a + 000081 4F [ 1] 151 clr a + 000082 95 [ 1] 152 ld xh, a + 000083 84 [ 1] 153 pop a + 000084 A3 00 80 [ 2] 154 cpw x, #0x0080 + 000087 27 06 [ 1] 155 jreq 00122$ + 156 ; ../mbtowc.c: 55: return(-1); + 000089 5F [ 1] 157 clrw x + 00008A 5A [ 2] 158 decw x + 00008B ACs00r01r40 [ 2] 159 jpf 00126$ + 00008F 160 00122$: + 161 ; ../mbtowc.c: 53: for(i = 1; i < seqlen; i++) + 00008F 4C [ 1] 162 inc a + 000090 20 E1 [ 2] 163 jra 00121$ + 000092 164 00113$: + 165 ; ../mbtowc.c: 57: codepoint = first_byte; + 000092 7B 0C [ 1] 166 ld a, (0x0c, sp) + 000094 6B 0A [ 1] 167 ld (0x0a, sp), a + 000096 0F 09 [ 1] 168 clr (0x09, sp) + 000098 5F [ 1] 169 clrw x + 170 ; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--) + 000099 16 05 [ 2] 171 ldw y, (0x05, sp) + 00009B 90 5C [ 1] 172 incw y + 00009D 17 12 [ 2] 173 ldw (0x12, sp), y + 00009F 7B 0B [ 1] 174 ld a, (0x0b, sp) + 0000A1 4A [ 1] 175 dec a + 0000A2 16 12 [ 2] 176 ldw y, (0x12, sp) + 0000A4 17 05 [ 2] 177 ldw (0x05, sp), y + 0000A6 178 00124$: + 0000A6 4D [ 1] 179 tnz a + 0000A7 27 4A [ 1] 180 jreq 00114$ + 181 ; ../mbtowc.c: 61: codepoint <<= 6; + 0000A9 88 [ 1] 182 push a + 0000AA 16 0A [ 2] 183 ldw y, (0x0a, sp) + 0000AC A6 06 [ 1] 184 ld a, #0x06 + 0000AE 185 00215$: + 0000AE 90 58 [ 2] 186 sllw y + 0000B0 59 [ 2] 187 rlcw x + 0000B1 4A [ 1] 188 dec a + 0000B2 26 FA [ 1] 189 jrne 00215$ + 0000B4 84 [ 1] 190 pop a + 0000B5 17 03 [ 2] 191 ldw (0x03, sp), y + 0000B7 1F 01 [ 2] 192 ldw (0x01, sp), x + 193 ; ../mbtowc.c: 62: codepoint |= (*s & 0x3f); + 0000B9 1E 05 [ 2] 194 ldw x, (0x05, sp) + 0000BB 88 [ 1] 195 push a + 0000BC F6 [ 1] 196 ld a, (x) + 0000BD 97 [ 1] 197 ld xl, a + 0000BE 84 [ 1] 198 pop a + 0000BF 41 [ 1] 199 exg a, xl + 0000C0 6B 0A [ 1] 200 ld (0x0a, sp), a + 0000C2 41 [ 1] 201 exg a, xl + 0000C3 0F 09 [ 1] 202 clr (0x09, sp) + 0000C5 88 [ 1] 203 push a + 0000C6 7B 0B [ 1] 204 ld a, (0x0b, sp) + 0000C8 A4 3F [ 1] 205 and a, #0x3f + 0000CA 97 [ 1] 206 ld xl, a + 0000CB 4F [ 1] 207 clr a + 0000CC 95 [ 1] 208 ld xh, a + 0000CD 84 [ 1] 209 pop a + 0000CE 51 [ 1] 210 exgw x, y + 0000CF 5F [ 1] 211 clrw x + 0000D0 90 5D [ 2] 212 tnzw y + 0000D2 2A 01 [ 1] 213 jrpl 00217$ + 0000D4 5A [ 2] 214 decw x + 0000D5 215 00217$: + 0000D5 88 [ 1] 216 push a + 0000D6 90 9F [ 1] 217 ld a, yl + 0000D8 1A 05 [ 1] 218 or a, (0x05, sp) + 0000DA 90 02 [ 1] 219 rlwa y + 0000DC 1A 04 [ 1] 220 or a, (0x04, sp) + 0000DE 90 95 [ 1] 221 ld yh, a + 0000E0 9F [ 1] 222 ld a, xl + 0000E1 1A 03 [ 1] 223 or a, (0x03, sp) + 0000E3 02 [ 1] 224 rlwa x + 0000E4 1A 02 [ 1] 225 or a, (0x02, sp) + 0000E6 95 [ 1] 226 ld xh, a + 0000E7 84 [ 1] 227 pop a + 0000E8 17 09 [ 2] 228 ldw (0x09, sp), y + 229 ; ../mbtowc.c: 63: s++; + 0000EA 16 05 [ 2] 230 ldw y, (0x05, sp) + 0000EC 90 5C [ 1] 231 incw y + 0000EE 17 05 [ 2] 232 ldw (0x05, sp), y + 233 ; ../mbtowc.c: 59: for(s++, i = seqlen - 1; i; i--) + 0000F0 4A [ 1] 234 dec a + 0000F1 20 B3 [ 2] 235 jra 00124$ + 0000F3 236 00114$: + 237 ; ../mbtowc.c: 66: if(codepoint >= 0xd800 && codepoint <= 0xdfff) // UTF-16 surrogate. + 0000F3 7B 0A [ 1] 238 ld a, (0x0a, sp) + 0000F5 A1 00 [ 1] 239 cp a, #0x00 + 0000F7 7B 09 [ 1] 240 ld a, (0x09, sp) + 0000F9 A2 D8 [ 1] 241 sbc a, #0xd8 + 0000FB 9F [ 1] 242 ld a, xl + 0000FC A2 00 [ 1] 243 sbc a, #0x00 + 0000FE 9E [ 1] 244 ld a, xh + 0000FF A2 00 [ 1] 245 sbc a, #0x00 + 000101 25 18 [ 1] 246 jrc 00116$ + 000103 A6 FF [ 1] 247 ld a, #0xff + 000105 11 0A [ 1] 248 cp a, (0x0a, sp) + 000107 A6 DF [ 1] 249 ld a, #0xdf + 000109 12 09 [ 1] 250 sbc a, (0x09, sp) + 00010B 4F [ 1] 251 clr a + 00010C 89 [ 2] 252 pushw x + 00010D 12 02 [ 1] 253 sbc a, (2, sp) + 00010F 85 [ 2] 254 popw x + 000110 4F [ 1] 255 clr a + 000111 89 [ 2] 256 pushw x + 000112 12 01 [ 1] 257 sbc a, (1, sp) + 000114 85 [ 2] 258 popw x + 000115 25 04 [ 1] 259 jrc 00116$ + 260 ; ../mbtowc.c: 67: return(-1); + 000117 5F [ 1] 261 clrw x + 000118 5A [ 2] 262 decw x + 000119 20 25 [ 2] 263 jra 00126$ + 00011B 264 00116$: + 265 ; ../mbtowc.c: 69: if(pwc) + 00011B 16 10 [ 2] 266 ldw y, (0x10, sp) + 00011D 27 0E [ 1] 267 jreq 00119$ + 268 ; ../mbtowc.c: 70: *pwc = codepoint; + 00011F 16 10 [ 2] 269 ldw y, (0x10, sp) + 000121 7B 0A [ 1] 270 ld a, (0x0a, sp) + 000123 90 E7 03 [ 1] 271 ld (0x3, y), a + 000126 7B 09 [ 1] 272 ld a, (0x09, sp) + 000128 90 E7 02 [ 1] 273 ld (0x2, y), a + 00012B 90 FF [ 2] 274 ldw (y), x + 00012D 275 00119$: + 276 ; ../mbtowc.c: 71: return(codepoint ? seqlen : 0); + 00012D 16 09 [ 2] 277 ldw y, (0x09, sp) + 00012F 26 03 [ 1] 278 jrne 00221$ + 000131 5D [ 2] 279 tnzw x + 000132 27 07 [ 1] 280 jreq 00128$ + 000134 281 00221$: + 000134 5F [ 1] 282 clrw x + 000135 7B 0B [ 1] 283 ld a, (0x0b, sp) + 000137 97 [ 1] 284 ld xl, a + 000138 1F 0B [ 2] 285 ldw (0x0b, sp), x + 00013A BC 286 .byte 0xbc + 00013B 287 00128$: + 00013B 5F [ 1] 288 clrw x + 00013C 1F 0B [ 2] 289 ldw (0x0b, sp), x + 00013E 290 00129$: + 00013E 1E 0B [ 2] 291 ldw x, (0x0b, sp) + 000140 292 00126$: + 293 ; ../mbtowc.c: 72: } + 000140 5B 0C [ 2] 294 addw sp, #12 + 000142 87 [ 5] 295 retf + 296 .area CODE + 297 .area CONST + 298 .area INITIALIZER + 299 .area CABS (ABS) diff --git a/device/lib/stm8-large/mbtowc.rel b/device/lib/stm8-large/mbtowc.rel new file mode 100644 index 0000000..aae8a5e --- /dev/null +++ b/device/lib/stm8-large/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 143 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 12 26 04 AC 00 01 40 +R 00 00 00 09 80 0A 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A A6 01 6B 0B 16 12 17 05 93 F6 6B 0C 2A +R 00 00 00 09 +T 00 00 17 41 A6 01 6B 07 +R 00 00 00 09 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C AE 00 80 7B 07 27 04 +R 00 00 00 09 +T 00 00 23 +R 00 00 00 09 +T 00 00 23 57 4A 26 FC +R 00 00 00 09 +T 00 00 27 +R 00 00 00 09 +T 00 00 27 7B 0C 6B 09 0F 08 7B 07 4C 88 9F 14 0A +R 00 00 00 09 +T 00 00 34 6B 0C 9E 14 09 6B 0B 84 1E 0A 27 04 6B +R 00 00 00 09 +T 00 00 41 07 20 D8 +R 00 00 00 09 +T 00 00 44 +R 00 00 00 09 +T 00 00 44 88 7B 08 6B 0C 84 AE 00 FF 4D 27 04 +R 00 00 00 09 +T 00 00 50 +R 00 00 00 09 +T 00 00 50 57 4A 26 FC +R 00 00 00 09 +T 00 00 54 +R 00 00 00 09 +T 00 00 54 9F 14 0C 6B 0C +R 00 00 00 09 +T 00 00 59 +R 00 00 00 09 +T 00 00 59 7B 0B A1 04 22 0C 7B 0B 6B 0A 0F 09 1E +R 00 00 00 09 +T 00 00 66 14 13 09 24 06 +R 00 00 00 09 +T 00 00 6B +R 00 00 00 09 +T 00 00 6B 5F 5A AC 00 01 40 +R 00 00 00 09 80 06 00 09 +T 00 00 71 +R 00 00 00 09 +T 00 00 71 A6 01 +R 00 00 00 09 +T 00 00 73 +R 00 00 00 09 +T 00 00 73 11 0B 24 1B 5F 97 72 FB 05 88 F6 A4 C0 +R 00 00 00 09 +T 00 00 80 97 4F 95 84 A3 00 80 27 06 5F 5A AC +R 00 00 00 09 +T 00 00 8C 00 01 40 +R 00 00 00 09 80 03 00 09 +T 00 00 8F +R 00 00 00 09 +T 00 00 8F 4C 20 E1 +R 00 00 00 09 +T 00 00 92 +R 00 00 00 09 +T 00 00 92 7B 0C 6B 0A 0F 09 5F 16 05 90 5C 17 12 +R 00 00 00 09 +T 00 00 9F 7B 0B 4A 16 12 17 05 +R 00 00 00 09 +T 00 00 A6 +R 00 00 00 09 +T 00 00 A6 4D 27 4A 88 16 0A A6 06 +R 00 00 00 09 +T 00 00 AE +R 00 00 00 09 +T 00 00 AE 90 58 59 4A 26 FA 84 17 03 1F 01 1E 05 +R 00 00 00 09 +T 00 00 BB 88 F6 97 84 41 6B 0A 41 0F 09 88 7B 0B +R 00 00 00 09 +T 00 00 C8 A4 3F 97 4F 95 84 51 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 00 D5 +R 00 00 00 09 +T 00 00 D5 88 90 9F 1A 05 90 02 1A 04 90 95 9F 1A +R 00 00 00 09 +T 00 00 E2 03 02 1A 02 95 84 17 09 16 05 90 5C 17 +R 00 00 00 09 +T 00 00 EF 05 4A 20 B3 +R 00 00 00 09 +T 00 00 F3 +R 00 00 00 09 +T 00 00 F3 7B 0A A1 00 7B 09 A2 D8 9F A2 00 9E A2 +R 00 00 00 09 +T 00 01 00 00 25 18 A6 FF 11 0A A6 DF 12 09 4F 89 +R 00 00 00 09 +T 00 01 0D 12 02 85 4F 89 12 01 85 25 04 5F 5A 20 +R 00 00 00 09 +T 00 01 1A 25 +R 00 00 00 09 +T 00 01 1B +R 00 00 00 09 +T 00 01 1B 16 10 27 0E 16 10 7B 0A 90 E7 03 7B 09 +R 00 00 00 09 +T 00 01 28 90 E7 02 90 FF +R 00 00 00 09 +T 00 01 2D +R 00 00 00 09 +T 00 01 2D 16 09 26 03 5D 27 07 +R 00 00 00 09 +T 00 01 34 +R 00 00 00 09 +T 00 01 34 5F 7B 0B 97 1F 0B BC +R 00 00 00 09 +T 00 01 3B +R 00 00 00 09 +T 00 01 3B 5F 1F 0B +R 00 00 00 09 +T 00 01 3E +R 00 00 00 09 +T 00 01 3E 1E 0B +R 00 00 00 09 +T 00 01 40 +R 00 00 00 09 +T 00 01 40 5B 0C 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/mbtowc.sym b/device/lib/stm8-large/mbtowc.sym new file mode 100644 index 0000000..98c710d --- /dev/null +++ b/device/lib/stm8-large/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 143 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/memccpy.asm b/device/lib/stm8-large/memccpy.asm new file mode 100644 index 0000000..fe796db --- /dev/null +++ b/device/lib/stm8-large/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, (0x0b, sp) +; ../memccpy.c: 34: const char *s = src; + ldw y, (0x0d, sp) +; ../memccpy.c: 36: while (n--) + ldw (0x04, sp), y + ldw (0x06, sp), x + ldw y, (0x11, 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, (0x10, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/memccpy.lst b/device/lib/stm8-large/memccpy.lst new file mode 100644 index 0000000..4e5e2cb --- /dev/null +++ b/device/lib/stm8-large/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 0B [ 2] 56 ldw x, (0x0b, sp) + 57 ; ../memccpy.c: 34: const char *s = src; + 000004 16 0D [ 2] 58 ldw y, (0x0d, 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 11 [ 2] 62 ldw y, (0x11, 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 10 [ 1] 82 ld a, (0x10, 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 87 [ 5] 96 retf + 97 .area CODE + 98 .area CONST + 99 .area INITIALIZER + 100 .area CABS (ABS) diff --git a/device/lib/stm8-large/memccpy.rel b/device/lib/stm8-large/memccpy.rel new file mode 100644 index 0000000..df537a5 --- /dev/null +++ b/device/lib/stm8-large/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 0B 16 0D 17 04 1F 06 16 11 +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 10 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/memccpy.sym b/device/lib/stm8-large/memccpy.sym new file mode 100644 index 0000000..cbe21df --- /dev/null +++ b/device/lib/stm8-large/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-large/memcpy.lst b/device/lib/stm8-large/memcpy.lst new file mode 100644 index 0000000..4ac4de2 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 2] 41 ldw y, (4, sp) + 000002 1E 06 [ 2] 42 ldw x, (6, sp) + 43 + 000004 04 08 [ 1] 44 srl (8, sp) + 000006 06 09 [ 1] 45 rrc (9, 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 08 [ 1] 52 srl (8, sp) + 000012 06 09 [ 1] 53 rrc (9, 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 09 [ 1] 64 tnz (9, sp) + 000024 26 0D [ 1] 65 jrne loop_ent + 000026 0A 08 [ 1] 66 dec (8, 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 09 [ 1] 83 dec (9, sp) + 000047 26 E3 [ 1] 84 jrne loop + 000049 0A 08 [ 1] 85 dec (8, sp) + 00004B 2A DF [ 1] 86 jrpl loop + 87 + 00004D 88 end: + 00004D 1E 04 [ 2] 89 ldw x, (4, sp) + 00004F 87 [ 5] 90 retf + 91 diff --git a/device/lib/stm8-large/memcpy.rel b/device/lib/stm8-large/memcpy.rel new file mode 100644 index 0000000..bdf881a --- /dev/null +++ b/device/lib/stm8-large/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 04 1E 06 04 08 06 09 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 08 06 09 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 09 26 0D 0A 08 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 09 26 E3 0A 08 2A DF +R 00 00 00 01 +T 00 00 4D +R 00 00 00 01 +T 00 00 4D 1E 04 87 +R 00 00 00 01 diff --git a/device/lib/stm8-large/memcpy.s b/device/lib/stm8-large/memcpy.s new file mode 100644 index 0000000..3d3ed8c --- /dev/null +++ b/device/lib/stm8-large/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, (4, sp) + ldw x, (6, sp) + + srl (8, sp) + rrc (9, sp) + jrnc n_x0 + ld a, (x) + ld (y), a + incw x + incw y +n_x0: + srl (8, sp) + rrc (9, 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 (9, sp) + jrne loop_ent + dec (8, 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 (9, sp) + jrne loop + dec (8, sp) + jrpl loop + +end: + ldw x, (4, sp) + retf + diff --git a/device/lib/stm8-large/memcpy.sym b/device/lib/stm8-large/memcpy.sym new file mode 100644 index 0000000..0aac69d --- /dev/null +++ b/device/lib/stm8-large/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-large/modff.asm b/device/lib/stm8-large/modff.asm new file mode 100644 index 0000000..a388770 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0e, sp) + ldw (0x01, sp), y + ldw x, (0x0c, sp) + pushw x + ldw x, (0x0c, sp) + pushw x + callf ___fs2slong + addw sp, #4 + pushw x + pushw y + callf ___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, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + callf ___fssub +; ../modff.c: 37: } + addw sp, #14 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/modff.lst b/device/lib/stm8-large/modff.lst new file mode 100644 index 0000000..e5fa4c1 --- /dev/null +++ b/device/lib/stm8-large/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 0E [ 2] 56 ldw y, (0x0e, sp) + 000004 17 01 [ 2] 57 ldw (0x01, sp), y + 000006 1E 0C [ 2] 58 ldw x, (0x0c, sp) + 000008 89 [ 2] 59 pushw x + 000009 1E 0C [ 2] 60 ldw x, (0x0c, sp) + 00000B 89 [ 2] 61 pushw x + 00000C 8Ds00r00r00 [ 5] 62 callf ___fs2slong + 000010 5B 04 [ 2] 63 addw sp, #4 + 000012 89 [ 2] 64 pushw x + 000013 90 89 [ 2] 65 pushw y + 000015 8Ds00r00r00 [ 5] 66 callf ___slong2fs + 000019 5B 04 [ 2] 67 addw sp, #4 + 00001B 1F 05 [ 2] 68 ldw (0x05, sp), x + 00001D 1E 01 [ 2] 69 ldw x, (0x01, sp) + 00001F 7B 06 [ 1] 70 ld a, (0x06, sp) + 000021 E7 03 [ 1] 71 ld (0x3, x), a + 000023 7B 05 [ 1] 72 ld a, (0x05, sp) + 000025 E7 02 [ 1] 73 ld (0x2, x), a + 000027 FF [ 2] 74 ldw (x), y + 75 ; ../modff.c: 36: return (x-*y); + 000028 1E 05 [ 2] 76 ldw x, (0x05, sp) + 00002A 89 [ 2] 77 pushw x + 00002B 90 89 [ 2] 78 pushw y + 00002D 1E 10 [ 2] 79 ldw x, (0x10, sp) + 00002F 89 [ 2] 80 pushw x + 000030 1E 10 [ 2] 81 ldw x, (0x10, sp) + 000032 89 [ 2] 82 pushw x + 000033 8Ds00r00r00 [ 5] 83 callf ___fssub + 84 ; ../modff.c: 37: } + 000037 5B 0E [ 2] 85 addw sp, #14 + 000039 87 [ 5] 86 retf + 87 .area CODE + 88 .area CONST + 89 .area INITIALIZER + 90 .area CABS (ABS) diff --git a/device/lib/stm8-large/modff.rel b/device/lib/stm8-large/modff.rel new file mode 100644 index 0000000..315aa63 --- /dev/null +++ b/device/lib/stm8-large/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 3A 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 0E 17 01 1E 0C 89 1E 0C 89 8D +R 00 00 00 09 +T 00 00 0D 00 00 00 5B 04 89 90 89 8D +R 00 00 00 09 82 03 00 02 +T 00 00 16 00 00 00 5B 04 1F 05 1E 01 7B 06 E7 03 +R 00 00 00 09 82 03 00 01 +T 00 00 23 7B 05 E7 02 FF 1E 05 89 90 89 1E 10 89 +R 00 00 00 09 +T 00 00 30 1E 10 89 8D 00 00 00 5B 0E 87 +R 00 00 00 09 82 07 00 00 diff --git a/device/lib/stm8-large/modff.sym b/device/lib/stm8-large/modff.sym new file mode 100644 index 0000000..e103c91 --- /dev/null +++ b/device/lib/stm8-large/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 3A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/powf.asm b/device/lib/stm8-large/powf.asm new file mode 100644 index 0000000..fab86f6 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0e, sp) + jrne 00102$ + ldw x, (0x0c, 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, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + callf ___fseq + addw sp, #8 + tnz a + jreq 00104$ + ldw x, (0x0a, sp) + ldw y, (0x08, sp) + jra 00107$ +00104$: +; ../powf.c: 39: if(x <= 0.0) return 0.0; + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + clrw x + pushw x + clrw x + pushw x + callf ___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, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + callf _logf + addw sp, #4 + ldw (0x03, sp), x + ldw x, (0x0e, sp) + pushw x + ldw x, (0x0e, sp) + pushw x + ldw x, (0x07, sp) + pushw x + pushw y + callf ___fsmul + addw sp, #8 + pushw x + pushw y + callf _expf + addw sp, #4 +00107$: +; ../powf.c: 41: } + addw sp, #4 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/powf.lst b/device/lib/stm8-large/powf.lst new file mode 100644 index 0000000..c9a5a17 --- /dev/null +++ b/device/lib/stm8-large/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 0E [ 2] 58 ldw x, (0x0e, sp) + 000004 26 0C [ 1] 59 jrne 00102$ + 000006 1E 0C [ 2] 60 ldw x, (0x0c, 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 5B [ 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 12 [ 2] 72 ldw x, (0x12, sp) + 00001A 89 [ 2] 73 pushw x + 00001B 1E 12 [ 2] 74 ldw x, (0x12, sp) + 00001D 89 [ 2] 75 pushw x + 00001E 8Ds00r00r00 [ 5] 76 callf ___fseq + 000022 5B 08 [ 2] 77 addw sp, #8 + 000024 4D [ 1] 78 tnz a + 000025 27 06 [ 1] 79 jreq 00104$ + 000027 1E 0A [ 2] 80 ldw x, (0x0a, sp) + 000029 16 08 [ 2] 81 ldw y, (0x08, sp) + 00002B 20 40 [ 2] 82 jra 00107$ + 00002D 83 00104$: + 84 ; ../powf.c: 39: if(x <= 0.0) return 0.0; + 00002D 1E 0A [ 2] 85 ldw x, (0x0a, sp) + 00002F 89 [ 2] 86 pushw x + 000030 1E 0A [ 2] 87 ldw x, (0x0a, sp) + 000032 89 [ 2] 88 pushw x + 000033 5F [ 1] 89 clrw x + 000034 89 [ 2] 90 pushw x + 000035 5F [ 1] 91 clrw x + 000036 89 [ 2] 92 pushw x + 000037 8Ds00r00r00 [ 5] 93 callf ___fslt + 00003B 5B 08 [ 2] 94 addw sp, #8 + 00003D 4D [ 1] 95 tnz a + 00003E 26 05 [ 1] 96 jrne 00106$ + 000040 5F [ 1] 97 clrw x + 000041 90 5F [ 1] 98 clrw y + 000043 20 28 [ 2] 99 jra 00107$ + 000045 100 00106$: + 101 ; ../powf.c: 40: return expf(logf(x) * y); + 000045 1E 0A [ 2] 102 ldw x, (0x0a, sp) + 000047 89 [ 2] 103 pushw x + 000048 1E 0A [ 2] 104 ldw x, (0x0a, sp) + 00004A 89 [ 2] 105 pushw x + 00004B 8Ds00r00r00 [ 5] 106 callf _logf + 00004F 5B 04 [ 2] 107 addw sp, #4 + 000051 1F 03 [ 2] 108 ldw (0x03, sp), x + 000053 1E 0E [ 2] 109 ldw x, (0x0e, sp) + 000055 89 [ 2] 110 pushw x + 000056 1E 0E [ 2] 111 ldw x, (0x0e, sp) + 000058 89 [ 2] 112 pushw x + 000059 1E 07 [ 2] 113 ldw x, (0x07, sp) + 00005B 89 [ 2] 114 pushw x + 00005C 90 89 [ 2] 115 pushw y + 00005E 8Ds00r00r00 [ 5] 116 callf ___fsmul + 000062 5B 08 [ 2] 117 addw sp, #8 + 000064 89 [ 2] 118 pushw x + 000065 90 89 [ 2] 119 pushw y + 000067 8Ds00r00r00 [ 5] 120 callf _expf + 00006B 5B 04 [ 2] 121 addw sp, #4 + 00006D 122 00107$: + 123 ; ../powf.c: 41: } + 00006D 5B 04 [ 2] 124 addw sp, #4 + 00006F 87 [ 5] 125 retf + 126 .area CODE + 127 .area CONST + 128 .area INITIALIZER + 129 .area CABS (ABS) diff --git a/device/lib/stm8-large/powf.rel b/device/lib/stm8-large/powf.rel new file mode 100644 index 0000000..b2e948b --- /dev/null +++ b/device/lib/stm8-large/powf.rel @@ -0,0 +1,56 @@ +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 70 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 0E 26 0C 1E 0C 58 26 07 5F 90 +R 00 00 00 09 +T 00 00 0D AE 3F 80 20 5B +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 12 89 1E 12 89 8D +R 00 00 00 09 +T 00 00 1F 00 00 00 5B 08 4D 27 06 1E 0A 16 08 20 +R 00 00 00 09 82 03 00 02 +T 00 00 2C 40 +R 00 00 00 09 +T 00 00 2D +R 00 00 00 09 +T 00 00 2D 1E 0A 89 1E 0A 89 5F 89 5F 89 8D +R 00 00 00 09 +T 00 00 38 00 00 00 5B 08 4D 26 05 5F 90 5F 20 28 +R 00 00 00 09 82 03 00 04 +T 00 00 45 +R 00 00 00 09 +T 00 00 45 1E 0A 89 1E 0A 89 8D 00 00 00 5B 04 1F +R 00 00 00 09 82 0A 00 01 +T 00 00 52 03 1E 0E 89 1E 0E 89 1E 07 89 90 89 8D +R 00 00 00 09 +T 00 00 5F 00 00 00 5B 08 89 90 89 8D +R 00 00 00 09 82 03 00 00 +T 00 00 68 00 00 00 5B 04 +R 00 00 00 09 82 03 00 03 +T 00 00 6D +R 00 00 00 09 +T 00 00 6D 5B 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/powf.sym b/device/lib/stm8-large/powf.sym new file mode 100644 index 0000000..55b9f59 --- /dev/null +++ b/device/lib/stm8-large/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 70 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/printf_large.asm b/device/lib/stm8-large/printf_large.asm new file mode 100644 index 0000000..41c3930 --- /dev/null +++ b/device/lib/stm8-large/printf_large.asm @@ -0,0 +1,1426 @@ +;-------------------------------------------------------- +; 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, (0x04, 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 (0x05, 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, (0x09, sp) + pushw x + push a + push #(00119$) + push #(00119$ >> 8) + push #(00119$ >> 16) + ldw x, (0x0d, sp) + pushw x + ld a, (0x0e, sp) + push a + retf +00119$: + addw sp, #3 +; ../printf_large.c: 127: } + retf +; ../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, (0x05, sp) + swap a + and a, #0x0f + ld (0x01, sp), a + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + ld a, (0x0b, sp) + push a + ld a, (0x0b, sp) + push a + ld a, (0x07, sp) + push a + callf _output_digit + addw sp, #7 +; ../printf_large.c: 152: output_digit( b&0x0F, lower_case, output_char, p ); + ld a, (0x05, sp) + and a, #0x0f + ld (0x01, sp), a + ldw x, (0x0a, sp) + pushw x + ldw x, (0x0a, sp) + pushw x + ld a, (0x0b, sp) + push a + ld a, (0x0b, sp) + push a + ld a, (0x07, sp) + push a + callf _output_digit +; ../printf_large.c: 153: } + addw sp, #8 + retf +; ../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, (0x0d, 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, (0x0f, sp) + jrc 00104$ +; ../printf_large.c: 181: *pb4 -= radix; + ldw x, (0x03, sp) + ld a, (x) + sub a, (0x0f, 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 + retf +; ../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, (0x36, sp) + ld a, (x) + incw x + ldw (0x36, sp), x + ld xl, a + tnz a + jrne 00627$ + jpf 00233$ +00627$: +; ../printf_large.c: 477: if ( c=='%' ) + ld a, xl + cp a, #0x25 + jreq 00630$ + jpf 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, (0x36, 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 (0x36, 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, (0x34, sp) + pushw x + ld a, (0x2f, sp) + push a + push #(00635$) + push #(00635$ >> 8) + push #(00635$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00635$: + 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 00647$ + jpf 00101$ +00647$: +; ../printf_large.c: 522: decimals=0; + clrw x + ldw (0x2a, sp), x +; ../printf_large.c: 525: goto get_conversion_spec; + jpf 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 00651$ + jpf 00122$ +00651$: + ld a, (0x2d, sp) + cp a, #0x2b + jrne 00654$ + jpf 00121$ +00654$: + ld a, (0x2d, sp) + cp a, #0x2d + jrne 00657$ + jpf 00120$ +00657$: + ld a, (0x2d, sp) + cp a, #0x42 + jrne 00660$ + jpf 00123$ +00660$: + ld a, (0x2d, sp) + cp a, #0x43 + jrne 00663$ + jpf 00129$ +00663$: + ld a, (0x2d, sp) + cp a, #0x44 + jrne 00666$ + jpf 00154$ +00666$: + ld a, (0x2d, sp) + cp a, #0x46 + jrne 00669$ + jpf 00158$ +00669$: + ld a, (0x2d, sp) + cp a, #0x48 + jrne 00672$ + jpf 00101$ +00672$: + ld a, (0x2d, sp) + cp a, #0x49 + jrne 00675$ + jpf 00154$ +00675$: + ld a, (0x2d, sp) + cp a, #0x4a + jrne 00678$ + jpf 00101$ +00678$: + ld a, (0x2d, sp) + cp a, #0x4c + jreq 00128$ + ld a, (0x2d, sp) + cp a, #0x4f + jrne 00684$ + jpf 00155$ +00684$: + ld a, (0x2d, sp) + cp a, #0x50 + jrne 00687$ + jpf 00152$ +00687$: + ld a, (0x2d, sp) + cp a, #0x53 + jrne 00690$ + jpf 00133$ +00690$: + ld a, (0x2d, sp) + cp a, #0x54 + jrne 00693$ + jpf 00101$ +00693$: + ld a, (0x2d, sp) + cp a, #0x55 + jrne 00696$ + jpf 00156$ +00696$: + ld a, (0x2d, sp) + cp a, #0x58 + jrne 00699$ + jpf 00157$ +00699$: + ld a, (0x2d, sp) + cp a, #0x5a + jrne 00702$ + jpf 00101$ +00702$: + jpf 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; + jpf 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; + jpf 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; + jpf 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; + jpf 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; + jpf 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, (0x38, sp) + incw x + ldw (0x38, sp), x + addw x, #0xffff + ld a, (x) + jra 00132$ +00131$: +; ../printf_large.c: 564: c = va_arg(ap,int); + ldw x, (0x38, sp) + incw x + incw x + ldw (0x38, sp), x + decw x + decw x + ld a, (0x1, x) +00132$: +; ../printf_large.c: 565: OUTPUT_CHAR( c, p ); + ldw x, (0x34, sp) + pushw x + push a + push #(00705$) + push #(00705$ >> 8) + push #(00705$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00705$: + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x +; ../printf_large.c: 566: break; + jpf 00160$ +; ../printf_large.c: 568: case 'S': +00133$: +; ../printf_large.c: 569: PTR = va_arg(ap,ptr_t); + ldw x, (0x38, sp) + incw x + incw x + ldw (0x38, sp), x + decw x + decw x + ldw x, (x) + ldw (0x05, sp), x +; ../printf_large.c: 582: length = strlen(PTR); + pushw x + callf _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, (0x34, sp) + pushw x + push #0x20 + push #(00712$) + push #(00712$ >> 8) + push #(00712$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00712$: + 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, (0x34, sp) + pushw x + ld a, (0x13, sp) + push a + push #(00716$) + push #(00716$ >> 8) + push #(00716$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00716$: + 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 00718$ + jpf 00160$ +00718$: + ldw x, (0x28, sp) + cpw x, (0x25, sp) + jrc 00719$ + jpf 00160$ +00719$: +; ../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 00720$ + jpf 00314$ +00720$: +; ../printf_large.c: 608: OUTPUT_CHAR( ' ', p ); + ldw x, (0x34, sp) + pushw x + push #0x20 + push #(00721$) + push #(00721$ >> 8) + push #(00721$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00721$: + 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, (0x38, sp) + incw x + incw x + ldw (0x2a, sp), x + ldw (0x38, 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, (0x34, sp) + pushw x + push #0x30 + push #(00723$) + push #(00723$ >> 8) + push #(00723$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00723$: + 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, (0x34, sp) + pushw x + push #0x78 + push #(00724$) + push #(00724$ >> 8) + push #(00724$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00724$: + 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, (0x34, sp) + pushw x + ldw x, (0x34, sp) + pushw x + ld a, (0x35, sp) + push a + ld a, (0x2c, sp) + push a + ld a, (0x33, sp) + push a + callf _output_2digits + addw sp, #7 + 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, (0x34, sp) + pushw x + ldw x, (0x34, sp) + pushw x + ld a, (0x35, sp) + push a + ld a, (0x2c, sp) + push a + ld a, (0x33, sp) + push a + callf _output_2digits + addw sp, #7 + 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, (0x34, sp) + pushw x + ld a, (0x2f, sp) + push a + push #(00725$) + push #(00725$ >> 8) + push #(00725$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00725$: + 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, (0x38, sp) + addw x, #0x0004 + ldw (0x38, 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 00727$ + jpf 00231$ +00727$: +; ../printf_large.c: 700: OUTPUT_CHAR (c, p); + ldw y, (0x34, sp) + pushw y + ld a, xl + push a + push #(00728$) + push #(00728$ >> 8) + push #(00728$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00728$: + 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 00730$ + jpf 00231$ +00730$: +; ../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, (0x38, sp) + incw x + ldw (0x38, 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, (0x38, sp) + addw x, #0x0004 + ldw (0x38, 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, (0x38, sp) + incw x + incw x + ldw (0x38, sp), x + decw x + decw x + ldw x, (x) + clrw y + tnzw x + jrpl 00734$ + decw y +00734$: + 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 00738$ + incw x +00738$: + 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 + callf _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 y, (0x03, sp) + jrne 00182$ + tnzw x + 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, (0x34, sp) + pushw x + push #0x20 + push #(00747$) + push #(00747$ >> 8) + push #(00747$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00747$: + 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, (0x34, sp) + pushw x + push #0x2d + push #(00750$) + push #(00750$ >> 8) + push #(00750$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00750$: + 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, (0x34, sp) + pushw x + push #0x2b + push #(00753$) + push #(00753$ >> 8) + push #(00753$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00753$: + 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, (0x34, sp) + pushw x + push #0x20 + push #(00755$) + push #(00755$ >> 8) + push #(00755$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00755$: + 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, (0x34, sp) + pushw x + push a + push #(00759$) + push #(00759$ >> 8) + push #(00759$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00759$: + 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, (0x34, sp) + pushw x + ldw x, (0x34, sp) + pushw x + ld a, (0x35, sp) + push a + ld a, (0x2c, sp) + push a + ld a, (0x30, sp) + push a + callf _output_digit + addw sp, #7 +; ../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 00766$ + jpf 00231$ +00766$: +; ../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 00767$ + jpf 00231$ +00767$: +; ../printf_large.c: 860: OUTPUT_CHAR(' ', p); + ldw x, (0x34, sp) + pushw x + push #0x20 + push #(00768$) + push #(00768$ >> 8) + push #(00768$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00768$: + 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 y, (0x34, sp) + pushw y + ld a, xl + push a + push #(00770$) + push #(00770$ >> 8) + push #(00770$ >> 16) + ldw x, (0x38, sp) + pushw x + ld a, (0x39, sp) + push a + retf +00770$: + addw sp, #3 + ldw x, (0x10, sp) + incw x + ldw (0x10, sp), x + jpf 00231$ +00233$: +; ../printf_large.c: 872: return charsOutputted; + ldw x, (0x10, sp) +; ../printf_large.c: 873: } + addw sp, #45 + retf + .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-large/printf_large.lst b/device/lib/stm8-large/printf_large.lst new file mode 100644 index 0000000..c18a192 --- /dev/null +++ b/device/lib/stm8-large/printf_large.lst @@ -0,0 +1,1427 @@ + 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 04 [ 1] 56 ld a, (0x04, 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 05 [ 1] 64 tnz (0x05, 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 09 [ 2] 70 ldw x, (0x09, sp) + 000012 89 [ 2] 71 pushw x + 000013 88 [ 1] 72 push a + 000014 4Br21 [ 1] 73 push #(00119$) + 000016 4Bs00 [ 1] 74 push #(00119$ >> 8) + 000018 4Bs00 [ 1] 75 push #(00119$ >> 16) + 00001A 1E 0D [ 2] 76 ldw x, (0x0d, sp) + 00001C 89 [ 2] 77 pushw x + 00001D 7B 0E [ 1] 78 ld a, (0x0e, sp) + 00001F 88 [ 1] 79 push a + 000020 87 [ 5] 80 retf + 000021 81 00119$: + 000021 5B 03 [ 2] 82 addw sp, #3 + 83 ; ../printf_large.c: 127: } + 000023 87 [ 5] 84 retf + 85 ; ../printf_large.c: 149: output_2digits (unsigned char b, bool lower_case, pfn_outputchar output_char, void* p) + 86 ; ----------------------------------------- + 87 ; function output_2digits + 88 ; ----------------------------------------- + 000024 89 _output_2digits: + 000024 88 [ 1] 90 push a + 91 ; ../printf_large.c: 151: output_digit( b>>4, lower_case, output_char, p ); + 000025 7B 05 [ 1] 92 ld a, (0x05, sp) + 000027 4E [ 1] 93 swap a + 000028 A4 0F [ 1] 94 and a, #0x0f + 00002A 6B 01 [ 1] 95 ld (0x01, sp), a + 00002C 1E 0A [ 2] 96 ldw x, (0x0a, sp) + 00002E 89 [ 2] 97 pushw x + 00002F 1E 0A [ 2] 98 ldw x, (0x0a, sp) + 000031 89 [ 2] 99 pushw x + 000032 7B 0B [ 1] 100 ld a, (0x0b, sp) + 000034 88 [ 1] 101 push a + 000035 7B 0B [ 1] 102 ld a, (0x0b, sp) + 000037 88 [ 1] 103 push a + 000038 7B 07 [ 1] 104 ld a, (0x07, sp) + 00003A 88 [ 1] 105 push a + 00003B 8Ds00r00r00 [ 5] 106 callf _output_digit + 00003F 5B 07 [ 2] 107 addw sp, #7 + 108 ; ../printf_large.c: 152: output_digit( b&0x0F, lower_case, output_char, p ); + 000041 7B 05 [ 1] 109 ld a, (0x05, sp) + 000043 A4 0F [ 1] 110 and a, #0x0f + 000045 6B 01 [ 1] 111 ld (0x01, sp), a + 000047 1E 0A [ 2] 112 ldw x, (0x0a, sp) + 000049 89 [ 2] 113 pushw x + 00004A 1E 0A [ 2] 114 ldw x, (0x0a, sp) + 00004C 89 [ 2] 115 pushw x + 00004D 7B 0B [ 1] 116 ld a, (0x0b, sp) + 00004F 88 [ 1] 117 push a + 000050 7B 0B [ 1] 118 ld a, (0x0b, sp) + 000052 88 [ 1] 119 push a + 000053 7B 07 [ 1] 120 ld a, (0x07, sp) + 000055 88 [ 1] 121 push a + 000056 8Ds00r00r00 [ 5] 122 callf _output_digit + 123 ; ../printf_large.c: 153: } + 00005A 5B 08 [ 2] 124 addw sp, #8 + 00005C 87 [ 5] 125 retf + 126 ; ../printf_large.c: 168: calculate_digit (value_t _AUTOMEM * value, unsigned char radix) + 127 ; ----------------------------------------- + 128 ; function calculate_digit + 129 ; ----------------------------------------- + 00005D 130 _calculate_digit: + 00005D 52 09 [ 2] 131 sub sp, #9 + 132 ; ../printf_large.c: 170: unsigned long ul = value->ul; + 00005F 16 0D [ 2] 133 ldw y, (0x0d, sp) + 000061 17 01 [ 2] 134 ldw (0x01, sp), y + 000063 93 [ 1] 135 ldw x, y + 000064 90 EE 02 [ 2] 136 ldw y, (0x2, y) + 000067 FE [ 2] 137 ldw x, (x) + 000068 17 08 [ 2] 138 ldw (0x08, sp), y + 00006A 1F 06 [ 2] 139 ldw (0x06, sp), x + 140 ; ../printf_large.c: 171: unsigned char _AUTOMEM * pb4 = &value->byte[4]; + 00006C 1E 01 [ 2] 141 ldw x, (0x01, sp) + 00006E 1C 00 04 [ 2] 142 addw x, #0x0004 + 000071 1F 03 [ 2] 143 ldw (0x03, sp), x + 144 ; ../printf_large.c: 172: unsigned char i = 32; + 000073 A6 20 [ 1] 145 ld a, #0x20 + 000075 6B 05 [ 1] 146 ld (0x05, sp), a + 147 ; ../printf_large.c: 174: do + 000077 148 00103$: + 149 ; ../printf_large.c: 176: *pb4 = (*pb4 << 1) | ((ul >> 31) & 0x01); + 000077 1E 03 [ 2] 150 ldw x, (0x03, sp) + 000079 F6 [ 1] 151 ld a, (x) + 00007A 48 [ 1] 152 sll a + 00007B 97 [ 1] 153 ld xl, a + 00007C 7B 06 [ 1] 154 ld a, (0x06, sp) + 00007E 48 [ 1] 155 sll a + 00007F 4F [ 1] 156 clr a + 000080 49 [ 1] 157 rlc a + 000081 89 [ 2] 158 pushw x + 000082 1A 02 [ 1] 159 or a, (2, sp) + 000084 85 [ 2] 160 popw x + 000085 1E 03 [ 2] 161 ldw x, (0x03, sp) + 000087 F7 [ 1] 162 ld (x), a + 163 ; ../printf_large.c: 177: ul <<= 1; + 000088 08 09 [ 1] 164 sll (0x09, sp) + 00008A 09 08 [ 1] 165 rlc (0x08, sp) + 00008C 09 07 [ 1] 166 rlc (0x07, sp) + 00008E 09 06 [ 1] 167 rlc (0x06, sp) + 168 ; ../printf_large.c: 179: if (radix <= *pb4 ) + 000090 11 0F [ 1] 169 cp a, (0x0f, sp) + 000092 25 1C [ 1] 170 jrc 00104$ + 171 ; ../printf_large.c: 181: *pb4 -= radix; + 000094 1E 03 [ 2] 172 ldw x, (0x03, sp) + 000096 F6 [ 1] 173 ld a, (x) + 000097 10 0F [ 1] 174 sub a, (0x0f, sp) + 000099 1E 03 [ 2] 175 ldw x, (0x03, sp) + 00009B F7 [ 1] 176 ld (x), a + 177 ; ../printf_large.c: 182: ul |= 1; + 00009C 7B 09 [ 1] 178 ld a, (0x09, sp) + 00009E AA 01 [ 1] 179 or a, #0x01 + 0000A0 90 97 [ 1] 180 ld yl, a + 0000A2 7B 08 [ 1] 181 ld a, (0x08, sp) + 0000A4 90 95 [ 1] 182 ld yh, a + 0000A6 7B 07 [ 1] 183 ld a, (0x07, sp) + 0000A8 97 [ 1] 184 ld xl, a + 0000A9 7B 06 [ 1] 185 ld a, (0x06, sp) + 0000AB 95 [ 1] 186 ld xh, a + 0000AC 17 08 [ 2] 187 ldw (0x08, sp), y + 0000AE 1F 06 [ 2] 188 ldw (0x06, sp), x + 0000B0 189 00104$: + 190 ; ../printf_large.c: 184: } while (--i); + 0000B0 0A 05 [ 1] 191 dec (0x05, sp) + 0000B2 26 C3 [ 1] 192 jrne 00103$ + 193 ; ../printf_large.c: 185: value->ul = ul; + 0000B4 1E 01 [ 2] 194 ldw x, (0x01, sp) + 0000B6 16 08 [ 2] 195 ldw y, (0x08, sp) + 0000B8 EF 02 [ 2] 196 ldw (0x2, x), y + 0000BA 16 06 [ 2] 197 ldw y, (0x06, sp) + 0000BC FF [ 2] 198 ldw (x), y + 199 ; ../printf_large.c: 186: } + 0000BD 5B 09 [ 2] 200 addw sp, #9 + 0000BF 87 [ 5] 201 retf + 202 ; ../printf_large.c: 434: _print_format (pfn_outputchar pfn, void* pvoid, const char *format, va_list ap) + 203 ; ----------------------------------------- + 204 ; function _print_format + 205 ; ----------------------------------------- + 0000C0 206 __print_format: + 0000C0 52 2D [ 2] 207 sub sp, #45 + 208 ; ../printf_large.c: 466: charsOutputted = 0; + 0000C2 5F [ 1] 209 clrw x + 0000C3 1F 10 [ 2] 210 ldw (0x10, sp), x + 211 ; ../printf_large.c: 475: while( c=*format++ ) + 0000C5 96 [ 1] 212 ldw x, sp + 0000C6 1C 00 0F [ 2] 213 addw x, #15 + 0000C9 1F 12 [ 2] 214 ldw (0x12, sp), x + 0000CB 96 [ 1] 215 ldw x, sp + 0000CC 1C 00 05 [ 2] 216 addw x, #5 + 0000CF 1F 14 [ 2] 217 ldw (0x14, sp), x + 0000D1 1C 00 04 [ 2] 218 addw x, #0x0004 + 0000D4 1F 16 [ 2] 219 ldw (0x16, sp), x + 0000D6 1F 18 [ 2] 220 ldw (0x18, sp), x + 0000D8 16 16 [ 2] 221 ldw y, (0x16, sp) + 0000DA 17 1A [ 2] 222 ldw (0x1a, sp), y + 0000DC 223 00231$: + 0000DC 1E 36 [ 2] 224 ldw x, (0x36, sp) + 0000DE F6 [ 1] 225 ld a, (x) + 0000DF 5C [ 1] 226 incw x + 0000E0 1F 36 [ 2] 227 ldw (0x36, sp), x + 0000E2 97 [ 1] 228 ld xl, a + 0000E3 4D [ 1] 229 tnz a + 0000E4 26 04 [ 1] 230 jrne 00627$ + 0000E6 ACs00r07r9D [ 2] 231 jpf 00233$ + 0000EA 232 00627$: + 233 ; ../printf_large.c: 477: if ( c=='%' ) + 0000EA 9F [ 1] 234 ld a, xl + 0000EB A1 25 [ 1] 235 cp a, #0x25 + 0000ED 27 04 [ 1] 236 jreq 00630$ + 0000EF ACs00r07r7F [ 2] 237 jpf 00229$ + 0000F3 238 00630$: + 239 ; ../printf_large.c: 479: left_justify = 0; + 0000F3 0F 1C [ 1] 240 clr (0x1c, sp) + 241 ; ../printf_large.c: 480: zero_padding = 0; + 0000F5 0F 1D [ 1] 242 clr (0x1d, sp) + 243 ; ../printf_large.c: 481: prefix_sign = 0; + 0000F7 0F 1E [ 1] 244 clr (0x1e, sp) + 245 ; ../printf_large.c: 482: prefix_space = 0; + 0000F9 0F 1F [ 1] 246 clr (0x1f, sp) + 247 ; ../printf_large.c: 483: signed_argument = 0; + 0000FB 0F 20 [ 1] 248 clr (0x20, sp) + 249 ; ../printf_large.c: 484: char_argument = 0; + 0000FD 0F 21 [ 1] 250 clr (0x21, sp) + 251 ; ../printf_large.c: 485: long_argument = 0; + 0000FF 0F 22 [ 1] 252 clr (0x22, sp) + 253 ; ../printf_large.c: 486: float_argument = 0; + 000101 0F 23 [ 1] 254 clr (0x23, sp) + 255 ; ../printf_large.c: 487: radix = 0; + 000103 0F 24 [ 1] 256 clr (0x24, sp) + 257 ; ../printf_large.c: 488: width = 0; + 000105 5F [ 1] 258 clrw x + 000106 1F 25 [ 2] 259 ldw (0x25, sp), x + 260 ; ../printf_large.c: 489: decimals = -1; + 000108 AE FF FF [ 2] 261 ldw x, #0xffff + 00010B 1F 2A [ 2] 262 ldw (0x2a, sp), x + 263 ; ../printf_large.c: 491: get_conversion_spec: + 00010D 16 36 [ 2] 264 ldw y, (0x36, sp) + 00010F 17 28 [ 2] 265 ldw (0x28, sp), y + 000111 266 00101$: + 267 ; ../printf_large.c: 493: c = *format++; + 000111 1E 28 [ 2] 268 ldw x, (0x28, sp) + 000113 F6 [ 1] 269 ld a, (x) + 000114 6B 2D [ 1] 270 ld (0x2d, sp), a + 000116 1E 28 [ 2] 271 ldw x, (0x28, sp) + 000118 5C [ 1] 272 incw x + 000119 1F 28 [ 2] 273 ldw (0x28, sp), x + 00011B 1F 36 [ 2] 274 ldw (0x36, sp), x + 275 ; ../printf_large.c: 495: if (c=='%') + 00011D 7B 2D [ 1] 276 ld a, (0x2d, sp) + 00011F A1 25 [ 1] 277 cp a, #0x25 + 000121 26 1C [ 1] 278 jrne 00103$ + 279 ; ../printf_large.c: 497: OUTPUT_CHAR(c, p); + 000123 1E 34 [ 2] 280 ldw x, (0x34, sp) + 000125 89 [ 2] 281 pushw x + 000126 7B 2F [ 1] 282 ld a, (0x2f, sp) + 000128 88 [ 1] 283 push a + 000129 4Br36 [ 1] 284 push #(00635$) + 00012B 4Bs01 [ 1] 285 push #(00635$ >> 8) + 00012D 4Bs00 [ 1] 286 push #(00635$ >> 16) + 00012F 1E 38 [ 2] 287 ldw x, (0x38, sp) + 000131 89 [ 2] 288 pushw x + 000132 7B 39 [ 1] 289 ld a, (0x39, sp) + 000134 88 [ 1] 290 push a + 000135 87 [ 5] 291 retf + 000136 292 00635$: + 000136 5B 03 [ 2] 293 addw sp, #3 + 000138 1E 10 [ 2] 294 ldw x, (0x10, sp) + 00013A 5C [ 1] 295 incw x + 00013B 1F 10 [ 2] 296 ldw (0x10, sp), x + 297 ; ../printf_large.c: 498: continue; + 00013D 20 9D [ 2] 298 jra 00231$ + 00013F 299 00103$: + 300 ; ../printf_large.c: 501: if (isdigit(c)) + 00013F 7B 2D [ 1] 301 ld a, (0x2d, sp) + 000141 A1 30 [ 1] 302 cp a, #0x30 + 000143 25 49 [ 1] 303 jrc 00110$ + 000145 7B 2D [ 1] 304 ld a, (0x2d, sp) + 000147 A1 39 [ 1] 305 cp a, #0x39 + 000149 22 43 [ 1] 306 jrugt 00110$ + 307 ; ../printf_large.c: 503: if (decimals==-1) + 00014B 1E 2A [ 2] 308 ldw x, (0x2a, sp) + 00014D 5C [ 1] 309 incw x + 00014E 26 22 [ 1] 310 jrne 00107$ + 311 ; ../printf_large.c: 505: width = 10*width + c - '0'; + 000150 1E 25 [ 2] 312 ldw x, (0x25, sp) + 000152 58 [ 2] 313 sllw x + 000153 58 [ 2] 314 sllw x + 000154 72 FB 25 [ 2] 315 addw x, (0x25, sp) + 000157 58 [ 2] 316 sllw x + 000158 1F 03 [ 2] 317 ldw (0x03, sp), x + 00015A 0F 2C [ 1] 318 clr (0x2c, sp) + 00015C 1E 03 [ 2] 319 ldw x, (0x03, sp) + 00015E 72 FB 2C [ 2] 320 addw x, (0x2c, sp) + 000161 1F 26 [ 2] 321 ldw (0x26, sp), x + 000163 1D 00 30 [ 2] 322 subw x, #0x0030 + 000166 1F 2C [ 2] 323 ldw (0x2c, sp), x + 324 ; ../printf_large.c: 506: if (width == 0) + 000168 1F 25 [ 2] 325 ldw (0x25, sp), x + 00016A 26 A5 [ 1] 326 jrne 00101$ + 327 ; ../printf_large.c: 509: zero_padding = 1; + 00016C A6 01 [ 1] 328 ld a, #0x01 + 00016E 6B 1D [ 1] 329 ld (0x1d, sp), a + 000170 20 9F [ 2] 330 jra 00101$ + 000172 331 00107$: + 332 ; ../printf_large.c: 514: decimals = 10*decimals + c - '0'; + 000172 1E 2A [ 2] 333 ldw x, (0x2a, sp) + 000174 58 [ 2] 334 sllw x + 000175 58 [ 2] 335 sllw x + 000176 72 FB 2A [ 2] 336 addw x, (0x2a, sp) + 000179 58 [ 2] 337 sllw x + 00017A 1F 03 [ 2] 338 ldw (0x03, sp), x + 00017C 0F 2C [ 1] 339 clr (0x2c, sp) + 00017E 1E 03 [ 2] 340 ldw x, (0x03, sp) + 000180 72 FB 2C [ 2] 341 addw x, (0x2c, sp) + 000183 1F 2A [ 2] 342 ldw (0x2a, sp), x + 000185 1D 00 30 [ 2] 343 subw x, #0x0030 + 000188 1F 2C [ 2] 344 ldw (0x2c, sp), x + 00018A 1F 2A [ 2] 345 ldw (0x2a, sp), x + 346 ; ../printf_large.c: 516: goto get_conversion_spec; + 00018C 20 83 [ 2] 347 jra 00101$ + 00018E 348 00110$: + 349 ; ../printf_large.c: 519: if (c=='.') + 00018E 7B 2D [ 1] 350 ld a, (0x2d, sp) + 000190 A1 2E [ 1] 351 cp a, #0x2e + 000192 26 10 [ 1] 352 jrne 00115$ + 353 ; ../printf_large.c: 521: if (decimals==-1) + 000194 1E 2A [ 2] 354 ldw x, (0x2a, sp) + 000196 5C [ 1] 355 incw x + 000197 27 04 [ 1] 356 jreq 00647$ + 000199 ACs00r01r11 [ 2] 357 jpf 00101$ + 00019D 358 00647$: + 359 ; ../printf_large.c: 522: decimals=0; + 00019D 5F [ 1] 360 clrw x + 00019E 1F 2A [ 2] 361 ldw (0x2a, sp), x + 362 ; ../printf_large.c: 525: goto get_conversion_spec; + 0001A0 ACs00r01r11 [ 2] 363 jpf 00101$ + 0001A4 364 00115$: + 365 ; ../printf_large.c: 528: if (islower(c)) + 0001A4 7B 2D [ 1] 366 ld a, (0x2d, sp) + 0001A6 A1 61 [ 1] 367 cp a, #0x61 + 0001A8 25 11 [ 1] 368 jrc 00117$ + 0001AA 7B 2D [ 1] 369 ld a, (0x2d, sp) + 0001AC A1 7A [ 1] 370 cp a, #0x7a + 0001AE 22 0B [ 1] 371 jrugt 00117$ + 372 ; ../printf_large.c: 530: c = toupper(c); + 0001B0 7B 2D [ 1] 373 ld a, (0x2d, sp) + 0001B2 A4 DF [ 1] 374 and a, #0xdf + 0001B4 6B 2D [ 1] 375 ld (0x2d, sp), a + 376 ; ../printf_large.c: 531: lower_case = 1; + 0001B6 A6 01 [ 1] 377 ld a, #0x01 + 0001B8 6B 27 [ 1] 378 ld (0x27, sp), a + 379 ; ../printf_large.c: 534: lower_case = 0; + 0001BA C5 380 .byte 0xc5 + 0001BB 381 00117$: + 0001BB 0F 27 [ 1] 382 clr (0x27, sp) + 0001BD 383 00118$: + 384 ; ../printf_large.c: 536: switch( c ) + 0001BD 7B 2D [ 1] 385 ld a, (0x2d, sp) + 0001BF A1 20 [ 1] 386 cp a, #0x20 + 0001C1 26 04 [ 1] 387 jrne 00651$ + 0001C3 ACs00r02r81 [ 2] 388 jpf 00122$ + 0001C7 389 00651$: + 0001C7 7B 2D [ 1] 390 ld a, (0x2d, sp) + 0001C9 A1 2B [ 1] 391 cp a, #0x2b + 0001CB 26 04 [ 1] 392 jrne 00654$ + 0001CD ACs00r02r79 [ 2] 393 jpf 00121$ + 0001D1 394 00654$: + 0001D1 7B 2D [ 1] 395 ld a, (0x2d, sp) + 0001D3 A1 2D [ 1] 396 cp a, #0x2d + 0001D5 26 04 [ 1] 397 jrne 00657$ + 0001D7 ACs00r02r71 [ 2] 398 jpf 00120$ + 0001DB 399 00657$: + 0001DB 7B 2D [ 1] 400 ld a, (0x2d, sp) + 0001DD A1 42 [ 1] 401 cp a, #0x42 + 0001DF 26 04 [ 1] 402 jrne 00660$ + 0001E1 ACs00r02r89 [ 2] 403 jpf 00123$ + 0001E5 404 00660$: + 0001E5 7B 2D [ 1] 405 ld a, (0x2d, sp) + 0001E7 A1 43 [ 1] 406 cp a, #0x43 + 0001E9 26 04 [ 1] 407 jrne 00663$ + 0001EB ACs00r02r99 [ 2] 408 jpf 00129$ + 0001EF 409 00663$: + 0001EF 7B 2D [ 1] 410 ld a, (0x2d, sp) + 0001F1 A1 44 [ 1] 411 cp a, #0x44 + 0001F3 26 04 [ 1] 412 jrne 00666$ + 0001F5 ACs00r04r46 [ 2] 413 jpf 00154$ + 0001F9 414 00666$: + 0001F9 7B 2D [ 1] 415 ld a, (0x2d, sp) + 0001FB A1 46 [ 1] 416 cp a, #0x46 + 0001FD 26 04 [ 1] 417 jrne 00669$ + 0001FF ACs00r04r62 [ 2] 418 jpf 00158$ + 000203 419 00669$: + 000203 7B 2D [ 1] 420 ld a, (0x2d, sp) + 000205 A1 48 [ 1] 421 cp a, #0x48 + 000207 26 04 [ 1] 422 jrne 00672$ + 000209 ACs00r01r11 [ 2] 423 jpf 00101$ + 00020D 424 00672$: + 00020D 7B 2D [ 1] 425 ld a, (0x2d, sp) + 00020F A1 49 [ 1] 426 cp a, #0x49 + 000211 26 04 [ 1] 427 jrne 00675$ + 000213 ACs00r04r46 [ 2] 428 jpf 00154$ + 000217 429 00675$: + 000217 7B 2D [ 1] 430 ld a, (0x2d, sp) + 000219 A1 4A [ 1] 431 cp a, #0x4a + 00021B 26 04 [ 1] 432 jrne 00678$ + 00021D ACs00r01r11 [ 2] 433 jpf 00101$ + 000221 434 00678$: + 000221 7B 2D [ 1] 435 ld a, (0x2d, sp) + 000223 A1 4C [ 1] 436 cp a, #0x4c + 000225 27 6A [ 1] 437 jreq 00128$ + 000227 7B 2D [ 1] 438 ld a, (0x2d, sp) + 000229 A1 4F [ 1] 439 cp a, #0x4f + 00022B 26 04 [ 1] 440 jrne 00684$ + 00022D ACs00r04r50 [ 2] 441 jpf 00155$ + 000231 442 00684$: + 000231 7B 2D [ 1] 443 ld a, (0x2d, sp) + 000233 A1 50 [ 1] 444 cp a, #0x50 + 000235 26 04 [ 1] 445 jrne 00687$ + 000237 ACs00r03rB7 [ 2] 446 jpf 00152$ + 00023B 447 00687$: + 00023B 7B 2D [ 1] 448 ld a, (0x2d, sp) + 00023D A1 53 [ 1] 449 cp a, #0x53 + 00023F 26 04 [ 1] 450 jrne 00690$ + 000241 ACs00r02rCE [ 2] 451 jpf 00133$ + 000245 452 00690$: + 000245 7B 2D [ 1] 453 ld a, (0x2d, sp) + 000247 A1 54 [ 1] 454 cp a, #0x54 + 000249 26 04 [ 1] 455 jrne 00693$ + 00024B ACs00r01r11 [ 2] 456 jpf 00101$ + 00024F 457 00693$: + 00024F 7B 2D [ 1] 458 ld a, (0x2d, sp) + 000251 A1 55 [ 1] 459 cp a, #0x55 + 000253 26 04 [ 1] 460 jrne 00696$ + 000255 ACs00r04r56 [ 2] 461 jpf 00156$ + 000259 462 00696$: + 000259 7B 2D [ 1] 463 ld a, (0x2d, sp) + 00025B A1 58 [ 1] 464 cp a, #0x58 + 00025D 26 04 [ 1] 465 jrne 00699$ + 00025F ACs00r04r5C [ 2] 466 jpf 00157$ + 000263 467 00699$: + 000263 7B 2D [ 1] 468 ld a, (0x2d, sp) + 000265 A1 5A [ 1] 469 cp a, #0x5a + 000267 26 04 [ 1] 470 jrne 00702$ + 000269 ACs00r01r11 [ 2] 471 jpf 00101$ + 00026D 472 00702$: + 00026D ACs00r04r68 [ 2] 473 jpf 00159$ + 474 ; ../printf_large.c: 538: case '-': + 000271 475 00120$: + 476 ; ../printf_large.c: 539: left_justify = 1; + 000271 A6 01 [ 1] 477 ld a, #0x01 + 000273 6B 1C [ 1] 478 ld (0x1c, sp), a + 479 ; ../printf_large.c: 540: goto get_conversion_spec; + 000275 ACs00r01r11 [ 2] 480 jpf 00101$ + 481 ; ../printf_large.c: 541: case '+': + 000279 482 00121$: + 483 ; ../printf_large.c: 542: prefix_sign = 1; + 000279 A6 01 [ 1] 484 ld a, #0x01 + 00027B 6B 1E [ 1] 485 ld (0x1e, sp), a + 486 ; ../printf_large.c: 543: goto get_conversion_spec; + 00027D ACs00r01r11 [ 2] 487 jpf 00101$ + 488 ; ../printf_large.c: 544: case ' ': + 000281 489 00122$: + 490 ; ../printf_large.c: 545: prefix_space = 1; + 000281 A6 01 [ 1] 491 ld a, #0x01 + 000283 6B 1F [ 1] 492 ld (0x1f, sp), a + 493 ; ../printf_large.c: 546: goto get_conversion_spec; + 000285 ACs00r01r11 [ 2] 494 jpf 00101$ + 495 ; ../printf_large.c: 547: case 'B': /* byte */ + 000289 496 00123$: + 497 ; ../printf_large.c: 548: char_argument = 1; + 000289 A6 01 [ 1] 498 ld a, #0x01 + 00028B 6B 21 [ 1] 499 ld (0x21, sp), a + 500 ; ../printf_large.c: 549: goto get_conversion_spec; + 00028D ACs00r01r11 [ 2] 501 jpf 00101$ + 502 ; ../printf_large.c: 556: case 'L': /* long */ + 000291 503 00128$: + 504 ; ../printf_large.c: 557: long_argument = 1; + 000291 A6 01 [ 1] 505 ld a, #0x01 + 000293 6B 22 [ 1] 506 ld (0x22, sp), a + 507 ; ../printf_large.c: 558: goto get_conversion_spec; + 000295 ACs00r01r11 [ 2] 508 jpf 00101$ + 509 ; ../printf_large.c: 560: case 'C': + 000299 510 00129$: + 511 ; ../printf_large.c: 561: if( char_argument ) + 000299 0D 21 [ 1] 512 tnz (0x21, sp) + 00029B 27 0B [ 1] 513 jreq 00131$ + 514 ; ../printf_large.c: 562: c = va_arg(ap,char); + 00029D 1E 38 [ 2] 515 ldw x, (0x38, sp) + 00029F 5C [ 1] 516 incw x + 0002A0 1F 38 [ 2] 517 ldw (0x38, sp), x + 0002A2 1C FF FF [ 2] 518 addw x, #0xffff + 0002A5 F6 [ 1] 519 ld a, (x) + 0002A6 20 0A [ 2] 520 jra 00132$ + 0002A8 521 00131$: + 522 ; ../printf_large.c: 564: c = va_arg(ap,int); + 0002A8 1E 38 [ 2] 523 ldw x, (0x38, sp) + 0002AA 5C [ 1] 524 incw x + 0002AB 5C [ 1] 525 incw x + 0002AC 1F 38 [ 2] 526 ldw (0x38, sp), x + 0002AE 5A [ 2] 527 decw x + 0002AF 5A [ 2] 528 decw x + 0002B0 E6 01 [ 1] 529 ld a, (0x1, x) + 0002B2 530 00132$: + 531 ; ../printf_large.c: 565: OUTPUT_CHAR( c, p ); + 0002B2 1E 34 [ 2] 532 ldw x, (0x34, sp) + 0002B4 89 [ 2] 533 pushw x + 0002B5 88 [ 1] 534 push a + 0002B6 4BrC3 [ 1] 535 push #(00705$) + 0002B8 4Bs02 [ 1] 536 push #(00705$ >> 8) + 0002BA 4Bs00 [ 1] 537 push #(00705$ >> 16) + 0002BC 1E 38 [ 2] 538 ldw x, (0x38, sp) + 0002BE 89 [ 2] 539 pushw x + 0002BF 7B 39 [ 1] 540 ld a, (0x39, sp) + 0002C1 88 [ 1] 541 push a + 0002C2 87 [ 5] 542 retf + 0002C3 543 00705$: + 0002C3 5B 03 [ 2] 544 addw sp, #3 + 0002C5 1E 10 [ 2] 545 ldw x, (0x10, sp) + 0002C7 5C [ 1] 546 incw x + 0002C8 1F 10 [ 2] 547 ldw (0x10, sp), x + 548 ; ../printf_large.c: 566: break; + 0002CA ACs00r04r8E [ 2] 549 jpf 00160$ + 550 ; ../printf_large.c: 568: case 'S': + 0002CE 551 00133$: + 552 ; ../printf_large.c: 569: PTR = va_arg(ap,ptr_t); + 0002CE 1E 38 [ 2] 553 ldw x, (0x38, sp) + 0002D0 5C [ 1] 554 incw x + 0002D1 5C [ 1] 555 incw x + 0002D2 1F 38 [ 2] 556 ldw (0x38, sp), x + 0002D4 5A [ 2] 557 decw x + 0002D5 5A [ 2] 558 decw x + 0002D6 FE [ 2] 559 ldw x, (x) + 0002D7 1F 05 [ 2] 560 ldw (0x05, sp), x + 561 ; ../printf_large.c: 582: length = strlen(PTR); + 0002D9 89 [ 2] 562 pushw x + 0002DA 8Ds00r00r00 [ 5] 563 callf _strlen + 0002DE 5B 02 [ 2] 564 addw sp, #2 + 0002E0 1F 28 [ 2] 565 ldw (0x28, sp), x + 566 ; ../printf_large.c: 584: if ( decimals == -1 ) + 0002E2 1E 2A [ 2] 567 ldw x, (0x2a, sp) + 0002E4 5C [ 1] 568 incw x + 0002E5 26 04 [ 1] 569 jrne 00135$ + 570 ; ../printf_large.c: 586: decimals = length; + 0002E7 16 28 [ 2] 571 ldw y, (0x28, sp) + 0002E9 17 2A [ 2] 572 ldw (0x2a, sp), y + 0002EB 573 00135$: + 574 ; ../printf_large.c: 588: if ( ( !left_justify ) && (length < width) ) + 0002EB 0D 1C [ 1] 575 tnz (0x1c, sp) + 0002ED 26 3F [ 1] 576 jrne 00277$ + 0002EF 1E 28 [ 2] 577 ldw x, (0x28, sp) + 0002F1 13 25 [ 2] 578 cpw x, (0x25, sp) + 0002F3 24 39 [ 1] 579 jrnc 00277$ + 580 ; ../printf_large.c: 590: width -= length; + 0002F5 1E 25 [ 2] 581 ldw x, (0x25, sp) + 0002F7 72 F0 28 [ 2] 582 subw x, (0x28, sp) + 583 ; ../printf_large.c: 591: while( width-- != 0 ) + 0002FA 16 10 [ 2] 584 ldw y, (0x10, sp) + 0002FC 17 25 [ 2] 585 ldw (0x25, sp), y + 0002FE 1F 2C [ 2] 586 ldw (0x2c, sp), x + 000300 587 00136$: + 000300 1E 2C [ 2] 588 ldw x, (0x2c, sp) + 000302 16 2C [ 2] 589 ldw y, (0x2c, sp) + 000304 90 5A [ 2] 590 decw y + 000306 17 2C [ 2] 591 ldw (0x2c, sp), y + 000308 5D [ 2] 592 tnzw x + 000309 27 1B [ 1] 593 jreq 00312$ + 594 ; ../printf_large.c: 593: OUTPUT_CHAR( ' ', p ); + 00030B 1E 34 [ 2] 595 ldw x, (0x34, sp) + 00030D 89 [ 2] 596 pushw x + 00030E 4B 20 [ 1] 597 push #0x20 + 000310 4Br1D [ 1] 598 push #(00712$) + 000312 4Bs03 [ 1] 599 push #(00712$ >> 8) + 000314 4Bs00 [ 1] 600 push #(00712$ >> 16) + 000316 1E 38 [ 2] 601 ldw x, (0x38, sp) + 000318 89 [ 2] 602 pushw x + 000319 7B 39 [ 1] 603 ld a, (0x39, sp) + 00031B 88 [ 1] 604 push a + 00031C 87 [ 5] 605 retf + 00031D 606 00712$: + 00031D 5B 03 [ 2] 607 addw sp, #3 + 00031F 1E 25 [ 2] 608 ldw x, (0x25, sp) + 000321 5C [ 1] 609 incw x + 000322 1F 25 [ 2] 610 ldw (0x25, sp), x + 000324 20 DA [ 2] 611 jra 00136$ + 612 ; ../printf_large.c: 597: while ( (c = *PTR) && (decimals-- > 0)) + 000326 613 00312$: + 000326 16 25 [ 2] 614 ldw y, (0x25, sp) + 000328 17 10 [ 2] 615 ldw (0x10, sp), y + 00032A 16 2C [ 2] 616 ldw y, (0x2c, sp) + 00032C 17 25 [ 2] 617 ldw (0x25, sp), y + 00032E 618 00277$: + 00032E 16 10 [ 2] 619 ldw y, (0x10, sp) + 000330 17 2C [ 2] 620 ldw (0x2c, sp), y + 000332 621 00143$: + 000332 1E 05 [ 2] 622 ldw x, (0x05, sp) + 000334 F6 [ 1] 623 ld a, (x) + 000335 6B 11 [ 1] 624 ld (0x11, sp), a + 000337 27 2D [ 1] 625 jreq 00313$ + 000339 1E 2A [ 2] 626 ldw x, (0x2a, sp) + 00033B A3 00 00 [ 2] 627 cpw x, #0x0000 + 00033E 2D 26 [ 1] 628 jrsle 00313$ + 000340 1E 2A [ 2] 629 ldw x, (0x2a, sp) + 000342 5A [ 2] 630 decw x + 000343 1F 2A [ 2] 631 ldw (0x2a, sp), x + 632 ; ../printf_large.c: 599: OUTPUT_CHAR( c, p ); + 000345 1E 34 [ 2] 633 ldw x, (0x34, sp) + 000347 89 [ 2] 634 pushw x + 000348 7B 13 [ 1] 635 ld a, (0x13, sp) + 00034A 88 [ 1] 636 push a + 00034B 4Br58 [ 1] 637 push #(00716$) + 00034D 4Bs03 [ 1] 638 push #(00716$ >> 8) + 00034F 4Bs00 [ 1] 639 push #(00716$ >> 16) + 000351 1E 38 [ 2] 640 ldw x, (0x38, sp) + 000353 89 [ 2] 641 pushw x + 000354 7B 39 [ 1] 642 ld a, (0x39, sp) + 000356 88 [ 1] 643 push a + 000357 87 [ 5] 644 retf + 000358 645 00716$: + 000358 5B 03 [ 2] 646 addw sp, #3 + 00035A 1E 2C [ 2] 647 ldw x, (0x2c, sp) + 00035C 5C [ 1] 648 incw x + 00035D 1F 2C [ 2] 649 ldw (0x2c, sp), x + 650 ; ../printf_large.c: 600: PTR++; + 00035F 1E 05 [ 2] 651 ldw x, (0x05, sp) + 000361 5C [ 1] 652 incw x + 000362 1F 05 [ 2] 653 ldw (0x05, sp), x + 000364 20 CC [ 2] 654 jra 00143$ + 000366 655 00313$: + 000366 16 2C [ 2] 656 ldw y, (0x2c, sp) + 000368 17 10 [ 2] 657 ldw (0x10, sp), y + 658 ; ../printf_large.c: 603: if ( left_justify && (length < width)) + 00036A 0D 1C [ 1] 659 tnz (0x1c, sp) + 00036C 26 04 [ 1] 660 jrne 00718$ + 00036E ACs00r04r8E [ 2] 661 jpf 00160$ + 000372 662 00718$: + 000372 1E 28 [ 2] 663 ldw x, (0x28, sp) + 000374 13 25 [ 2] 664 cpw x, (0x25, sp) + 000376 25 04 [ 1] 665 jrc 00719$ + 000378 ACs00r04r8E [ 2] 666 jpf 00160$ + 00037C 667 00719$: + 668 ; ../printf_large.c: 605: width -= length; + 00037C 1E 25 [ 2] 669 ldw x, (0x25, sp) + 00037E 72 F0 28 [ 2] 670 subw x, (0x28, sp) + 000381 1F 2A [ 2] 671 ldw (0x2a, sp), x + 000383 1F 25 [ 2] 672 ldw (0x25, sp), x + 673 ; ../printf_large.c: 606: while( width-- != 0 ) + 000385 16 2C [ 2] 674 ldw y, (0x2c, sp) + 000387 17 29 [ 2] 675 ldw (0x29, sp), y + 000389 16 25 [ 2] 676 ldw y, (0x25, sp) + 00038B 17 2C [ 2] 677 ldw (0x2c, sp), y + 00038D 678 00146$: + 00038D 1E 2C [ 2] 679 ldw x, (0x2c, sp) + 00038F 16 2C [ 2] 680 ldw y, (0x2c, sp) + 000391 90 5A [ 2] 681 decw y + 000393 17 2C [ 2] 682 ldw (0x2c, sp), y + 000395 5D [ 2] 683 tnzw x + 000396 26 04 [ 1] 684 jrne 00720$ + 000398 ACs00r04r86 [ 2] 685 jpf 00314$ + 00039C 686 00720$: + 687 ; ../printf_large.c: 608: OUTPUT_CHAR( ' ', p ); + 00039C 1E 34 [ 2] 688 ldw x, (0x34, sp) + 00039E 89 [ 2] 689 pushw x + 00039F 4B 20 [ 1] 690 push #0x20 + 0003A1 4BrAE [ 1] 691 push #(00721$) + 0003A3 4Bs03 [ 1] 692 push #(00721$ >> 8) + 0003A5 4Bs00 [ 1] 693 push #(00721$ >> 16) + 0003A7 1E 38 [ 2] 694 ldw x, (0x38, sp) + 0003A9 89 [ 2] 695 pushw x + 0003AA 7B 39 [ 1] 696 ld a, (0x39, sp) + 0003AC 88 [ 1] 697 push a + 0003AD 87 [ 5] 698 retf + 0003AE 699 00721$: + 0003AE 5B 03 [ 2] 700 addw sp, #3 + 0003B0 1E 29 [ 2] 701 ldw x, (0x29, sp) + 0003B2 5C [ 1] 702 incw x + 0003B3 1F 29 [ 2] 703 ldw (0x29, sp), x + 0003B5 20 D6 [ 2] 704 jra 00146$ + 705 ; ../printf_large.c: 613: case 'P': + 0003B7 706 00152$: + 707 ; ../printf_large.c: 614: PTR = va_arg(ap,ptr_t); + 0003B7 1E 38 [ 2] 708 ldw x, (0x38, sp) + 0003B9 5C [ 1] 709 incw x + 0003BA 5C [ 1] 710 incw x + 0003BB 1F 2A [ 2] 711 ldw (0x2a, sp), x + 0003BD 1F 38 [ 2] 712 ldw (0x38, sp), x + 0003BF 1E 2A [ 2] 713 ldw x, (0x2a, sp) + 0003C1 5A [ 2] 714 decw x + 0003C2 5A [ 2] 715 decw x + 0003C3 1F 2C [ 2] 716 ldw (0x2c, sp), x + 0003C5 1F 2A [ 2] 717 ldw (0x2a, sp), x + 0003C7 FE [ 2] 718 ldw x, (x) + 0003C8 1F 2C [ 2] 719 ldw (0x2c, sp), x + 0003CA 1F 05 [ 2] 720 ldw (0x05, sp), x + 721 ; ../printf_large.c: 658: OUTPUT_CHAR('0', p); + 0003CC 1E 34 [ 2] 722 ldw x, (0x34, sp) + 0003CE 89 [ 2] 723 pushw x + 0003CF 4B 30 [ 1] 724 push #0x30 + 0003D1 4BrDE [ 1] 725 push #(00723$) + 0003D3 4Bs03 [ 1] 726 push #(00723$ >> 8) + 0003D5 4Bs00 [ 1] 727 push #(00723$ >> 16) + 0003D7 1E 38 [ 2] 728 ldw x, (0x38, sp) + 0003D9 89 [ 2] 729 pushw x + 0003DA 7B 39 [ 1] 730 ld a, (0x39, sp) + 0003DC 88 [ 1] 731 push a + 0003DD 87 [ 5] 732 retf + 0003DE 733 00723$: + 0003DE 5B 03 [ 2] 734 addw sp, #3 + 0003E0 1E 10 [ 2] 735 ldw x, (0x10, sp) + 0003E2 5C [ 1] 736 incw x + 0003E3 1F 2C [ 2] 737 ldw (0x2c, sp), x + 0003E5 1F 2A [ 2] 738 ldw (0x2a, sp), x + 739 ; ../printf_large.c: 659: OUTPUT_CHAR('x', p); + 0003E7 1E 34 [ 2] 740 ldw x, (0x34, sp) + 0003E9 89 [ 2] 741 pushw x + 0003EA 4B 78 [ 1] 742 push #0x78 + 0003EC 4BrF9 [ 1] 743 push #(00724$) + 0003EE 4Bs03 [ 1] 744 push #(00724$ >> 8) + 0003F0 4Bs00 [ 1] 745 push #(00724$ >> 16) + 0003F2 1E 38 [ 2] 746 ldw x, (0x38, sp) + 0003F4 89 [ 2] 747 pushw x + 0003F5 7B 39 [ 1] 748 ld a, (0x39, sp) + 0003F7 88 [ 1] 749 push a + 0003F8 87 [ 5] 750 retf + 0003F9 751 00724$: + 0003F9 5B 03 [ 2] 752 addw sp, #3 + 0003FB 1E 2A [ 2] 753 ldw x, (0x2a, sp) + 0003FD 5C [ 1] 754 incw x + 0003FE 1F 2C [ 2] 755 ldw (0x2c, sp), x + 000400 1F 2A [ 2] 756 ldw (0x2a, sp), x + 757 ; ../printf_large.c: 660: OUTPUT_2DIGITS( value.byte[1] ); + 000402 7B 06 [ 1] 758 ld a, (0x06, sp) + 000404 6B 2D [ 1] 759 ld (0x2d, sp), a + 000406 1E 34 [ 2] 760 ldw x, (0x34, sp) + 000408 89 [ 2] 761 pushw x + 000409 1E 34 [ 2] 762 ldw x, (0x34, sp) + 00040B 89 [ 2] 763 pushw x + 00040C 7B 35 [ 1] 764 ld a, (0x35, sp) + 00040E 88 [ 1] 765 push a + 00040F 7B 2C [ 1] 766 ld a, (0x2c, sp) + 000411 88 [ 1] 767 push a + 000412 7B 33 [ 1] 768 ld a, (0x33, sp) + 000414 88 [ 1] 769 push a + 000415 8Ds00r00r24 [ 5] 770 callf _output_2digits + 000419 5B 07 [ 2] 771 addw sp, #7 + 00041B 1E 2A [ 2] 772 ldw x, (0x2a, sp) + 00041D 5C [ 1] 773 incw x + 00041E 5C [ 1] 774 incw x + 00041F 1F 2C [ 2] 775 ldw (0x2c, sp), x + 000421 1F 2A [ 2] 776 ldw (0x2a, sp), x + 777 ; ../printf_large.c: 661: OUTPUT_2DIGITS( value.byte[0] ); + 000423 7B 05 [ 1] 778 ld a, (0x05, sp) + 000425 6B 2D [ 1] 779 ld (0x2d, sp), a + 000427 1E 34 [ 2] 780 ldw x, (0x34, sp) + 000429 89 [ 2] 781 pushw x + 00042A 1E 34 [ 2] 782 ldw x, (0x34, sp) + 00042C 89 [ 2] 783 pushw x + 00042D 7B 35 [ 1] 784 ld a, (0x35, sp) + 00042F 88 [ 1] 785 push a + 000430 7B 2C [ 1] 786 ld a, (0x2c, sp) + 000432 88 [ 1] 787 push a + 000433 7B 33 [ 1] 788 ld a, (0x33, sp) + 000435 88 [ 1] 789 push a + 000436 8Ds00r00r24 [ 5] 790 callf _output_2digits + 00043A 5B 07 [ 2] 791 addw sp, #7 + 00043C 1E 2A [ 2] 792 ldw x, (0x2a, sp) + 00043E 5C [ 1] 793 incw x + 00043F 5C [ 1] 794 incw x + 000440 1F 2C [ 2] 795 ldw (0x2c, sp), x + 000442 1F 10 [ 2] 796 ldw (0x10, sp), x + 797 ; ../printf_large.c: 663: break; + 000444 20 48 [ 2] 798 jra 00160$ + 799 ; ../printf_large.c: 666: case 'I': + 000446 800 00154$: + 801 ; ../printf_large.c: 667: signed_argument = 1; + 000446 A6 01 [ 1] 802 ld a, #0x01 + 000448 6B 20 [ 1] 803 ld (0x20, sp), a + 804 ; ../printf_large.c: 668: radix = 10; + 00044A A6 0A [ 1] 805 ld a, #0x0a + 00044C 6B 24 [ 1] 806 ld (0x24, sp), a + 807 ; ../printf_large.c: 669: break; + 00044E 20 3E [ 2] 808 jra 00160$ + 809 ; ../printf_large.c: 671: case 'O': + 000450 810 00155$: + 811 ; ../printf_large.c: 672: radix = 8; + 000450 A6 08 [ 1] 812 ld a, #0x08 + 000452 6B 24 [ 1] 813 ld (0x24, sp), a + 814 ; ../printf_large.c: 673: break; + 000454 20 38 [ 2] 815 jra 00160$ + 816 ; ../printf_large.c: 675: case 'U': + 000456 817 00156$: + 818 ; ../printf_large.c: 676: radix = 10; + 000456 A6 0A [ 1] 819 ld a, #0x0a + 000458 6B 24 [ 1] 820 ld (0x24, sp), a + 821 ; ../printf_large.c: 677: break; + 00045A 20 32 [ 2] 822 jra 00160$ + 823 ; ../printf_large.c: 679: case 'X': + 00045C 824 00157$: + 825 ; ../printf_large.c: 680: radix = 16; + 00045C A6 10 [ 1] 826 ld a, #0x10 + 00045E 6B 24 [ 1] 827 ld (0x24, sp), a + 828 ; ../printf_large.c: 681: break; + 000460 20 2C [ 2] 829 jra 00160$ + 830 ; ../printf_large.c: 683: case 'F': + 000462 831 00158$: + 832 ; ../printf_large.c: 684: float_argument=1; + 000462 A6 01 [ 1] 833 ld a, #0x01 + 000464 6B 23 [ 1] 834 ld (0x23, sp), a + 835 ; ../printf_large.c: 685: break; + 000466 20 26 [ 2] 836 jra 00160$ + 837 ; ../printf_large.c: 687: default: + 000468 838 00159$: + 839 ; ../printf_large.c: 689: OUTPUT_CHAR( c, p ); + 000468 1E 34 [ 2] 840 ldw x, (0x34, sp) + 00046A 89 [ 2] 841 pushw x + 00046B 7B 2F [ 1] 842 ld a, (0x2f, sp) + 00046D 88 [ 1] 843 push a + 00046E 4Br7B [ 1] 844 push #(00725$) + 000470 4Bs04 [ 1] 845 push #(00725$ >> 8) + 000472 4Bs00 [ 1] 846 push #(00725$ >> 16) + 000474 1E 38 [ 2] 847 ldw x, (0x38, sp) + 000476 89 [ 2] 848 pushw x + 000477 7B 39 [ 1] 849 ld a, (0x39, sp) + 000479 88 [ 1] 850 push a + 00047A 87 [ 5] 851 retf + 00047B 852 00725$: + 00047B 5B 03 [ 2] 853 addw sp, #3 + 00047D 1E 10 [ 2] 854 ldw x, (0x10, sp) + 00047F 5C [ 1] 855 incw x + 000480 1F 2C [ 2] 856 ldw (0x2c, sp), x + 000482 1F 10 [ 2] 857 ldw (0x10, sp), x + 858 ; ../printf_large.c: 872: return charsOutputted; + 000484 20 08 [ 2] 859 jra 00160$ + 860 ; ../printf_large.c: 691: } + 000486 861 00314$: + 000486 16 29 [ 2] 862 ldw y, (0x29, sp) + 000488 17 10 [ 2] 863 ldw (0x10, sp), y + 00048A 16 2C [ 2] 864 ldw y, (0x2c, sp) + 00048C 17 25 [ 2] 865 ldw (0x25, sp), y + 00048E 866 00160$: + 867 ; ../printf_large.c: 693: if (float_argument) + 00048E 0D 23 [ 1] 868 tnz (0x23, sp) + 000490 27 50 [ 1] 869 jreq 00226$ + 870 ; ../printf_large.c: 695: value.f = va_arg(ap, float); + 000492 1E 38 [ 2] 871 ldw x, (0x38, sp) + 000494 1C 00 04 [ 2] 872 addw x, #0x0004 + 000497 1F 38 [ 2] 873 ldw (0x38, sp), x + 000499 1D 00 04 [ 2] 874 subw x, #0x0004 + 00049C 90 93 [ 1] 875 ldw y, x + 00049E 90 EE 02 [ 2] 876 ldw y, (0x2, y) + 0004A1 FE [ 2] 877 ldw x, (x) + 0004A2 17 07 [ 2] 878 ldw (0x07, sp), y + 0004A4 1F 05 [ 2] 879 ldw (0x05, sp), x + 880 ; ../printf_large.c: 697: PTR="<NO FLOAT>"; + 0004A6 AEr00r00 [ 2] 881 ldw x, #(___str_0 + 0) + 0004A9 1F 05 [ 2] 882 ldw (0x05, sp), x + 883 ; ../printf_large.c: 698: while (c=*PTR++) + 0004AB 16 10 [ 2] 884 ldw y, (0x10, sp) + 0004AD 17 2C [ 2] 885 ldw (0x2c, sp), y + 0004AF 886 00161$: + 0004AF 16 05 [ 2] 887 ldw y, (0x05, sp) + 0004B1 17 28 [ 2] 888 ldw (0x28, sp), y + 0004B3 93 [ 1] 889 ldw x, y + 0004B4 5C [ 1] 890 incw x + 0004B5 1F 2A [ 2] 891 ldw (0x2a, sp), x + 0004B7 1F 05 [ 2] 892 ldw (0x05, sp), x + 0004B9 1E 28 [ 2] 893 ldw x, (0x28, sp) + 0004BB F6 [ 1] 894 ld a, (x) + 0004BC 97 [ 1] 895 ld xl, a + 0004BD 4D [ 1] 896 tnz a + 0004BE 26 04 [ 1] 897 jrne 00727$ + 0004C0 ACs00r00rDC [ 2] 898 jpf 00231$ + 0004C4 899 00727$: + 900 ; ../printf_large.c: 700: OUTPUT_CHAR (c, p); + 0004C4 16 34 [ 2] 901 ldw y, (0x34, sp) + 0004C6 90 89 [ 2] 902 pushw y + 0004C8 9F [ 1] 903 ld a, xl + 0004C9 88 [ 1] 904 push a + 0004CA 4BrD7 [ 1] 905 push #(00728$) + 0004CC 4Bs04 [ 1] 906 push #(00728$ >> 8) + 0004CE 4Bs00 [ 1] 907 push #(00728$ >> 16) + 0004D0 1E 38 [ 2] 908 ldw x, (0x38, sp) + 0004D2 89 [ 2] 909 pushw x + 0004D3 7B 39 [ 1] 910 ld a, (0x39, sp) + 0004D5 88 [ 1] 911 push a + 0004D6 87 [ 5] 912 retf + 0004D7 913 00728$: + 0004D7 5B 03 [ 2] 914 addw sp, #3 + 0004D9 1E 2C [ 2] 915 ldw x, (0x2c, sp) + 0004DB 5C [ 1] 916 incw x + 0004DC 1F 2C [ 2] 917 ldw (0x2c, sp), x + 0004DE 1F 10 [ 2] 918 ldw (0x10, sp), x + 0004E0 20 CD [ 2] 919 jra 00161$ + 0004E2 920 00226$: + 921 ; ../printf_large.c: 718: else if (radix != 0) + 0004E2 0D 24 [ 1] 922 tnz (0x24, sp) + 0004E4 26 04 [ 1] 923 jrne 00730$ + 0004E6 ACs00r00rDC [ 2] 924 jpf 00231$ + 0004EA 925 00730$: + 926 ; ../printf_large.c: 723: unsigned char MEM_SPACE_BUF_PP *pstore = &store[5]; + 0004EA 1E 12 [ 2] 927 ldw x, (0x12, sp) + 0004EC 1F 2B [ 2] 928 ldw (0x2b, sp), x + 929 ; ../printf_large.c: 726: if (char_argument) + 0004EE 0D 21 [ 1] 930 tnz (0x21, sp) + 0004F0 27 21 [ 1] 931 jreq 00172$ + 932 ; ../printf_large.c: 728: value.l = va_arg(ap, char); + 0004F2 1E 38 [ 2] 933 ldw x, (0x38, sp) + 0004F4 5C [ 1] 934 incw x + 0004F5 1F 38 [ 2] 935 ldw (0x38, sp), x + 0004F7 1C FF FF [ 2] 936 addw x, #0xffff + 0004FA F6 [ 1] 937 ld a, (x) + 0004FB 5F [ 1] 938 clrw x + 0004FC 97 [ 1] 939 ld xl, a + 0004FD 90 5F [ 1] 940 clrw y + 0004FF 1F 07 [ 2] 941 ldw (0x07, sp), x + 000501 17 05 [ 2] 942 ldw (0x05, sp), y + 943 ; ../printf_large.c: 729: if (!signed_argument) + 000503 0D 20 [ 1] 944 tnz (0x20, sp) + 000505 26 45 [ 1] 945 jrne 00173$ + 946 ; ../printf_large.c: 731: value.l &= 0xFF; + 000507 1E 07 [ 2] 947 ldw x, (0x07, sp) + 000509 4F [ 1] 948 clr a + 00050A 95 [ 1] 949 ld xh, a + 00050B 90 5F [ 1] 950 clrw y + 00050D 1F 07 [ 2] 951 ldw (0x07, sp), x + 00050F 17 05 [ 2] 952 ldw (0x05, sp), y + 000511 20 39 [ 2] 953 jra 00173$ + 000513 954 00172$: + 955 ; ../printf_large.c: 734: else if (long_argument) + 000513 0D 22 [ 1] 956 tnz (0x22, sp) + 000515 27 16 [ 1] 957 jreq 00169$ + 958 ; ../printf_large.c: 736: value.l = va_arg(ap, long); + 000517 1E 38 [ 2] 959 ldw x, (0x38, sp) + 000519 1C 00 04 [ 2] 960 addw x, #0x0004 + 00051C 1F 38 [ 2] 961 ldw (0x38, sp), x + 00051E 1D 00 04 [ 2] 962 subw x, #0x0004 + 000521 90 93 [ 1] 963 ldw y, x + 000523 90 EE 02 [ 2] 964 ldw y, (0x2, y) + 000526 FE [ 2] 965 ldw x, (x) + 000527 17 07 [ 2] 966 ldw (0x07, sp), y + 000529 1F 05 [ 2] 967 ldw (0x05, sp), x + 00052B 20 1F [ 2] 968 jra 00173$ + 00052D 969 00169$: + 970 ; ../printf_large.c: 740: value.l = va_arg(ap, int); + 00052D 1E 38 [ 2] 971 ldw x, (0x38, sp) + 00052F 5C [ 1] 972 incw x + 000530 5C [ 1] 973 incw x + 000531 1F 38 [ 2] 974 ldw (0x38, sp), x + 000533 5A [ 2] 975 decw x + 000534 5A [ 2] 976 decw x + 000535 FE [ 2] 977 ldw x, (x) + 000536 90 5F [ 1] 978 clrw y + 000538 5D [ 2] 979 tnzw x + 000539 2A 02 [ 1] 980 jrpl 00734$ + 00053B 90 5A [ 2] 981 decw y + 00053D 982 00734$: + 00053D 1F 07 [ 2] 983 ldw (0x07, sp), x + 00053F 17 05 [ 2] 984 ldw (0x05, sp), y + 985 ; ../printf_large.c: 741: if (!signed_argument) + 000541 0D 20 [ 1] 986 tnz (0x20, sp) + 000543 26 07 [ 1] 987 jrne 00173$ + 988 ; ../printf_large.c: 743: value.l &= 0xFFFF; + 000545 16 07 [ 2] 989 ldw y, (0x07, sp) + 000547 5F [ 1] 990 clrw x + 000548 17 07 [ 2] 991 ldw (0x07, sp), y + 00054A 1F 05 [ 2] 992 ldw (0x05, sp), x + 00054C 993 00173$: + 994 ; ../printf_large.c: 747: if ( signed_argument ) + 00054C 0D 20 [ 1] 995 tnz (0x20, sp) + 00054E 27 1D [ 1] 996 jreq 00178$ + 997 ; ../printf_large.c: 749: if (value.l < 0) + 000550 1E 05 [ 2] 998 ldw x, (0x05, sp) + 000552 2A 17 [ 1] 999 jrpl 00175$ + 1000 ; ../printf_large.c: 750: value.l = -value.l; + 000554 16 07 [ 2] 1001 ldw y, (0x07, sp) + 000556 17 03 [ 2] 1002 ldw (0x03, sp), y + 000558 16 05 [ 2] 1003 ldw y, (0x05, sp) + 00055A 17 01 [ 2] 1004 ldw (0x01, sp), y + 00055C 16 03 [ 2] 1005 ldw y, (0x03, sp) + 00055E 90 50 [ 2] 1006 negw y + 000560 1E 01 [ 2] 1007 ldw x, (0x01, sp) + 000562 24 01 [ 1] 1008 jrnc 00738$ + 000564 5C [ 1] 1009 incw x + 000565 1010 00738$: + 000565 50 [ 2] 1011 negw x + 000566 17 07 [ 2] 1012 ldw (0x07, sp), y + 000568 1F 05 [ 2] 1013 ldw (0x05, sp), x + 1014 ; ../printf_large.c: 752: signed_argument = 0; + 00056A C5 1015 .byte 0xc5 + 00056B 1016 00175$: + 00056B 0F 20 [ 1] 1017 clr (0x20, sp) + 00056D 1018 00178$: + 1019 ; ../printf_large.c: 756: lsd = 1; + 00056D A6 01 [ 1] 1020 ld a, #0x01 + 00056F 6B 2D [ 1] 1021 ld (0x2d, sp), a + 1022 ; ../printf_large.c: 758: do { + 000571 16 2B [ 2] 1023 ldw y, (0x2b, sp) + 000573 17 29 [ 2] 1024 ldw (0x29, sp), y + 000575 5F [ 1] 1025 clrw x + 000576 1F 2B [ 2] 1026 ldw (0x2b, sp), x + 000578 1027 00182$: + 1028 ; ../printf_large.c: 759: value.byte[4] = 0; + 000578 0F 09 [ 1] 1029 clr (0x09, sp) + 1030 ; ../printf_large.c: 761: calculate_digit(&value, radix); + 00057A 1E 14 [ 2] 1031 ldw x, (0x14, sp) + 00057C 7B 24 [ 1] 1032 ld a, (0x24, sp) + 00057E 88 [ 1] 1033 push a + 00057F 89 [ 2] 1034 pushw x + 000580 8Ds00r00r5D [ 5] 1035 callf _calculate_digit + 000584 5B 03 [ 2] 1036 addw sp, #3 + 1037 ; ../printf_large.c: 765: if (!lsd) + 000586 0D 2D [ 1] 1038 tnz (0x2d, sp) + 000588 26 23 [ 1] 1039 jrne 00180$ + 1040 ; ../printf_large.c: 767: *pstore = (value.byte[4] << 4) | (value.byte[4] >> 4) | *pstore; + 00058A 1E 18 [ 2] 1041 ldw x, (0x18, sp) + 00058C F6 [ 1] 1042 ld a, (x) + 00058D 4E [ 1] 1043 swap a + 00058E A4 F0 [ 1] 1044 and a, #0xf0 + 000590 97 [ 1] 1045 ld xl, a + 000591 16 18 [ 2] 1046 ldw y, (0x18, sp) + 000593 90 F6 [ 1] 1047 ld a, (y) + 000595 4E [ 1] 1048 swap a + 000596 A4 0F [ 1] 1049 and a, #0x0f + 000598 89 [ 2] 1050 pushw x + 000599 1A 02 [ 1] 1051 or a, (2, sp) + 00059B 85 [ 2] 1052 popw x + 00059C 6B 28 [ 1] 1053 ld (0x28, sp), a + 00059E 1E 29 [ 2] 1054 ldw x, (0x29, sp) + 0005A0 F6 [ 1] 1055 ld a, (x) + 0005A1 1A 28 [ 1] 1056 or a, (0x28, sp) + 0005A3 1E 29 [ 2] 1057 ldw x, (0x29, sp) + 0005A5 F7 [ 1] 1058 ld (x), a + 1059 ; ../printf_large.c: 768: pstore--; + 0005A6 1E 29 [ 2] 1060 ldw x, (0x29, sp) + 0005A8 5A [ 2] 1061 decw x + 0005A9 1F 29 [ 2] 1062 ldw (0x29, sp), x + 0005AB 20 06 [ 2] 1063 jra 00181$ + 0005AD 1064 00180$: + 1065 ; ../printf_large.c: 772: *pstore = value.byte[4]; + 0005AD 1E 16 [ 2] 1066 ldw x, (0x16, sp) + 0005AF F6 [ 1] 1067 ld a, (x) + 0005B0 1E 29 [ 2] 1068 ldw x, (0x29, sp) + 0005B2 F7 [ 1] 1069 ld (x), a + 0005B3 1070 00181$: + 1071 ; ../printf_large.c: 774: length++; + 0005B3 1E 2B [ 2] 1072 ldw x, (0x2b, sp) + 0005B5 5C [ 1] 1073 incw x + 0005B6 1F 2B [ 2] 1074 ldw (0x2b, sp), x + 1075 ; ../printf_large.c: 775: lsd = !lsd; + 0005B8 7B 2D [ 1] 1076 ld a, (0x2d, sp) + 0005BA A0 01 [ 1] 1077 sub a, #0x01 + 0005BC 4F [ 1] 1078 clr a + 0005BD 49 [ 1] 1079 rlc a + 0005BE 6B 2D [ 1] 1080 ld (0x2d, sp), a + 1081 ; ../printf_large.c: 776: } while( value.ul ); + 0005C0 1E 14 [ 2] 1082 ldw x, (0x14, sp) + 0005C2 90 93 [ 1] 1083 ldw y, x + 0005C4 90 EE 02 [ 2] 1084 ldw y, (0x2, y) + 0005C7 17 03 [ 2] 1085 ldw (0x03, sp), y + 0005C9 FE [ 2] 1086 ldw x, (x) + 0005CA 16 03 [ 2] 1087 ldw y, (0x03, sp) + 0005CC 26 AA [ 1] 1088 jrne 00182$ + 0005CE 5D [ 2] 1089 tnzw x + 0005CF 26 A7 [ 1] 1090 jrne 00182$ + 1091 ; ../printf_large.c: 778: if (width == 0) + 0005D1 16 29 [ 2] 1092 ldw y, (0x29, sp) + 0005D3 17 21 [ 2] 1093 ldw (0x21, sp), y + 0005D5 16 2B [ 2] 1094 ldw y, (0x2b, sp) + 0005D7 17 23 [ 2] 1095 ldw (0x23, sp), y + 0005D9 1E 25 [ 2] 1096 ldw x, (0x25, sp) + 0005DB 26 05 [ 1] 1097 jrne 00186$ + 1098 ; ../printf_large.c: 783: width = 1; + 0005DD AE 00 01 [ 2] 1099 ldw x, #0x0001 + 0005E0 1F 25 [ 2] 1100 ldw (0x25, sp), x + 0005E2 1101 00186$: + 1102 ; ../printf_large.c: 787: if (!zero_padding && !left_justify) + 0005E2 0D 1D [ 1] 1103 tnz (0x1d, sp) + 0005E4 26 3D [ 1] 1104 jrne 00191$ + 0005E6 0D 1C [ 1] 1105 tnz (0x1c, sp) + 0005E8 26 39 [ 1] 1106 jrne 00191$ + 1107 ; ../printf_large.c: 789: while ( width > (unsigned char) (length+1) ) + 0005EA 16 10 [ 2] 1108 ldw y, (0x10, sp) + 0005EC 17 29 [ 2] 1109 ldw (0x29, sp), y + 0005EE 16 25 [ 2] 1110 ldw y, (0x25, sp) + 0005F0 17 2B [ 2] 1111 ldw (0x2b, sp), y + 0005F2 1112 00187$: + 0005F2 7B 24 [ 1] 1113 ld a, (0x24, sp) + 0005F4 4C [ 1] 1114 inc a + 0005F5 5F [ 1] 1115 clrw x + 0005F6 97 [ 1] 1116 ld xl, a + 0005F7 13 2B [ 2] 1117 cpw x, (0x2b, sp) + 0005F9 24 20 [ 1] 1118 jrnc 00316$ + 1119 ; ../printf_large.c: 791: OUTPUT_CHAR( ' ', p ); + 0005FB 1E 34 [ 2] 1120 ldw x, (0x34, sp) + 0005FD 89 [ 2] 1121 pushw x + 0005FE 4B 20 [ 1] 1122 push #0x20 + 000600 4Br0D [ 1] 1123 push #(00747$) + 000602 4Bs06 [ 1] 1124 push #(00747$ >> 8) + 000604 4Bs00 [ 1] 1125 push #(00747$ >> 16) + 000606 1E 38 [ 2] 1126 ldw x, (0x38, sp) + 000608 89 [ 2] 1127 pushw x + 000609 7B 39 [ 1] 1128 ld a, (0x39, sp) + 00060B 88 [ 1] 1129 push a + 00060C 87 [ 5] 1130 retf + 00060D 1131 00747$: + 00060D 5B 03 [ 2] 1132 addw sp, #3 + 00060F 1E 29 [ 2] 1133 ldw x, (0x29, sp) + 000611 5C [ 1] 1134 incw x + 000612 1F 29 [ 2] 1135 ldw (0x29, sp), x + 1136 ; ../printf_large.c: 792: width--; + 000614 1E 2B [ 2] 1137 ldw x, (0x2b, sp) + 000616 5A [ 2] 1138 decw x + 000617 1F 2B [ 2] 1139 ldw (0x2b, sp), x + 000619 20 D7 [ 2] 1140 jra 00187$ + 00061B 1141 00316$: + 00061B 16 29 [ 2] 1142 ldw y, (0x29, sp) + 00061D 17 10 [ 2] 1143 ldw (0x10, sp), y + 00061F 16 2B [ 2] 1144 ldw y, (0x2b, sp) + 000621 17 25 [ 2] 1145 ldw (0x25, sp), y + 000623 1146 00191$: + 1147 ; ../printf_large.c: 796: if (signed_argument) // this now means the original value was negative + 000623 0D 20 [ 1] 1148 tnz (0x20, sp) + 000625 27 20 [ 1] 1149 jreq 00201$ + 1150 ; ../printf_large.c: 798: OUTPUT_CHAR( '-', p ); + 000627 1E 34 [ 2] 1151 ldw x, (0x34, sp) + 000629 89 [ 2] 1152 pushw x + 00062A 4B 2D [ 1] 1153 push #0x2d + 00062C 4Br39 [ 1] 1154 push #(00750$) + 00062E 4Bs06 [ 1] 1155 push #(00750$ >> 8) + 000630 4Bs00 [ 1] 1156 push #(00750$ >> 16) + 000632 1E 38 [ 2] 1157 ldw x, (0x38, sp) + 000634 89 [ 2] 1158 pushw x + 000635 7B 39 [ 1] 1159 ld a, (0x39, sp) + 000637 88 [ 1] 1160 push a + 000638 87 [ 5] 1161 retf + 000639 1162 00750$: + 000639 5B 03 [ 2] 1163 addw sp, #3 + 00063B 1E 10 [ 2] 1164 ldw x, (0x10, sp) + 00063D 5C [ 1] 1165 incw x + 00063E 1F 10 [ 2] 1166 ldw (0x10, sp), x + 1167 ; ../printf_large.c: 800: width--; + 000640 1E 25 [ 2] 1168 ldw x, (0x25, sp) + 000642 5A [ 2] 1169 decw x + 000643 1F 25 [ 2] 1170 ldw (0x25, sp), x + 000645 20 4A [ 2] 1171 jra 00202$ + 000647 1172 00201$: + 1173 ; ../printf_large.c: 802: else if (length != 0) + 000647 1E 23 [ 2] 1174 ldw x, (0x23, sp) + 000649 27 46 [ 1] 1175 jreq 00202$ + 1176 ; ../printf_large.c: 805: if (prefix_sign) + 00064B 0D 1E [ 1] 1177 tnz (0x1e, sp) + 00064D 27 20 [ 1] 1178 jreq 00196$ + 1179 ; ../printf_large.c: 807: OUTPUT_CHAR( '+', p ); + 00064F 1E 34 [ 2] 1180 ldw x, (0x34, sp) + 000651 89 [ 2] 1181 pushw x + 000652 4B 2B [ 1] 1182 push #0x2b + 000654 4Br61 [ 1] 1183 push #(00753$) + 000656 4Bs06 [ 1] 1184 push #(00753$ >> 8) + 000658 4Bs00 [ 1] 1185 push #(00753$ >> 16) + 00065A 1E 38 [ 2] 1186 ldw x, (0x38, sp) + 00065C 89 [ 2] 1187 pushw x + 00065D 7B 39 [ 1] 1188 ld a, (0x39, sp) + 00065F 88 [ 1] 1189 push a + 000660 87 [ 5] 1190 retf + 000661 1191 00753$: + 000661 5B 03 [ 2] 1192 addw sp, #3 + 000663 1E 10 [ 2] 1193 ldw x, (0x10, sp) + 000665 5C [ 1] 1194 incw x + 000666 1F 10 [ 2] 1195 ldw (0x10, sp), x + 1196 ; ../printf_large.c: 809: width--; + 000668 1E 25 [ 2] 1197 ldw x, (0x25, sp) + 00066A 5A [ 2] 1198 decw x + 00066B 1F 25 [ 2] 1199 ldw (0x25, sp), x + 00066D 20 22 [ 2] 1200 jra 00202$ + 00066F 1201 00196$: + 1202 ; ../printf_large.c: 811: else if (prefix_space) + 00066F 0D 1F [ 1] 1203 tnz (0x1f, sp) + 000671 27 1E [ 1] 1204 jreq 00202$ + 1205 ; ../printf_large.c: 813: OUTPUT_CHAR( ' ', p ); + 000673 1E 34 [ 2] 1206 ldw x, (0x34, sp) + 000675 89 [ 2] 1207 pushw x + 000676 4B 20 [ 1] 1208 push #0x20 + 000678 4Br85 [ 1] 1209 push #(00755$) + 00067A 4Bs06 [ 1] 1210 push #(00755$ >> 8) + 00067C 4Bs00 [ 1] 1211 push #(00755$ >> 16) + 00067E 1E 38 [ 2] 1212 ldw x, (0x38, sp) + 000680 89 [ 2] 1213 pushw x + 000681 7B 39 [ 1] 1214 ld a, (0x39, sp) + 000683 88 [ 1] 1215 push a + 000684 87 [ 5] 1216 retf + 000685 1217 00755$: + 000685 5B 03 [ 2] 1218 addw sp, #3 + 000687 1E 10 [ 2] 1219 ldw x, (0x10, sp) + 000689 5C [ 1] 1220 incw x + 00068A 1F 10 [ 2] 1221 ldw (0x10, sp), x + 1222 ; ../printf_large.c: 815: width--; + 00068C 1E 25 [ 2] 1223 ldw x, (0x25, sp) + 00068E 5A [ 2] 1224 decw x + 00068F 1F 25 [ 2] 1225 ldw (0x25, sp), x + 000691 1226 00202$: + 1227 ; ../printf_large.c: 820: if (!left_justify) + 000691 0D 1C [ 1] 1228 tnz (0x1c, sp) + 000693 26 3A [ 1] 1229 jrne 00210$ + 1230 ; ../printf_large.c: 822: while ( width-- > length ) + 000695 16 10 [ 2] 1231 ldw y, (0x10, sp) + 000697 17 29 [ 2] 1232 ldw (0x29, sp), y + 000699 16 25 [ 2] 1233 ldw y, (0x25, sp) + 00069B 17 2B [ 2] 1234 ldw (0x2b, sp), y + 00069D 1235 00203$: + 00069D 16 2B [ 2] 1236 ldw y, (0x2b, sp) + 00069F 1E 2B [ 2] 1237 ldw x, (0x2b, sp) + 0006A1 5A [ 2] 1238 decw x + 0006A2 1F 2B [ 2] 1239 ldw (0x2b, sp), x + 0006A4 93 [ 1] 1240 ldw x, y + 0006A5 13 23 [ 2] 1241 cpw x, (0x23, sp) + 0006A7 23 3A [ 2] 1242 jrule 00317$ + 1243 ; ../printf_large.c: 824: OUTPUT_CHAR( zero_padding ? '0' : ' ', p ); + 0006A9 0D 1D [ 1] 1244 tnz (0x1d, sp) + 0006AB 27 04 [ 1] 1245 jreq 00236$ + 0006AD AE 00 30 [ 2] 1246 ldw x, #0x0030 + 0006B0 BC 1247 .byte 0xbc + 0006B1 1248 00236$: + 0006B1 AE 00 20 [ 2] 1249 ldw x, #0x0020 + 0006B4 1250 00237$: + 0006B4 9F [ 1] 1251 ld a, xl + 0006B5 1E 34 [ 2] 1252 ldw x, (0x34, sp) + 0006B7 89 [ 2] 1253 pushw x + 0006B8 88 [ 1] 1254 push a + 0006B9 4BrC6 [ 1] 1255 push #(00759$) + 0006BB 4Bs06 [ 1] 1256 push #(00759$ >> 8) + 0006BD 4Bs00 [ 1] 1257 push #(00759$ >> 16) + 0006BF 1E 38 [ 2] 1258 ldw x, (0x38, sp) + 0006C1 89 [ 2] 1259 pushw x + 0006C2 7B 39 [ 1] 1260 ld a, (0x39, sp) + 0006C4 88 [ 1] 1261 push a + 0006C5 87 [ 5] 1262 retf + 0006C6 1263 00759$: + 0006C6 5B 03 [ 2] 1264 addw sp, #3 + 0006C8 1E 29 [ 2] 1265 ldw x, (0x29, sp) + 0006CA 5C [ 1] 1266 incw x + 0006CB 1F 29 [ 2] 1267 ldw (0x29, sp), x + 0006CD 20 CE [ 2] 1268 jra 00203$ + 0006CF 1269 00210$: + 1270 ; ../printf_large.c: 830: if (width > length) + 0006CF 1E 25 [ 2] 1271 ldw x, (0x25, sp) + 0006D1 13 23 [ 2] 1272 cpw x, (0x23, sp) + 0006D3 23 09 [ 2] 1273 jrule 00207$ + 1274 ; ../printf_large.c: 831: width -= length; + 0006D5 1E 25 [ 2] 1275 ldw x, (0x25, sp) + 0006D7 72 F0 23 [ 2] 1276 subw x, (0x23, sp) + 0006DA 1F 28 [ 2] 1277 ldw (0x28, sp), x + 0006DC 20 0D [ 2] 1278 jra 00309$ + 0006DE 1279 00207$: + 1280 ; ../printf_large.c: 833: width = 0; + 0006DE 5F [ 1] 1281 clrw x + 0006DF 1F 28 [ 2] 1282 ldw (0x28, sp), x + 1283 ; ../printf_large.c: 872: return charsOutputted; + 0006E1 20 08 [ 2] 1284 jra 00309$ + 1285 ; ../printf_large.c: 837: while( length-- ) + 0006E3 1286 00317$: + 0006E3 16 29 [ 2] 1287 ldw y, (0x29, sp) + 0006E5 17 10 [ 2] 1288 ldw (0x10, sp), y + 0006E7 16 2B [ 2] 1289 ldw y, (0x2b, sp) + 0006E9 17 28 [ 2] 1290 ldw (0x28, sp), y + 0006EB 1291 00309$: + 0006EB 16 21 [ 2] 1292 ldw y, (0x21, sp) + 0006ED 17 2B [ 2] 1293 ldw (0x2b, sp), y + 0006EF 16 10 [ 2] 1294 ldw y, (0x10, sp) + 0006F1 17 25 [ 2] 1295 ldw (0x25, sp), y + 0006F3 1296 00215$: + 0006F3 1E 23 [ 2] 1297 ldw x, (0x23, sp) + 0006F5 16 23 [ 2] 1298 ldw y, (0x23, sp) + 0006F7 90 5A [ 2] 1299 decw y + 0006F9 17 23 [ 2] 1300 ldw (0x23, sp), y + 0006FB 5D [ 2] 1301 tnzw x + 0006FC 27 41 [ 1] 1302 jreq 00318$ + 1303 ; ../printf_large.c: 839: lsd = !lsd; + 0006FE 7B 2D [ 1] 1304 ld a, (0x2d, sp) + 000700 A0 01 [ 1] 1305 sub a, #0x01 + 000702 4F [ 1] 1306 clr a + 000703 49 [ 1] 1307 rlc a + 1308 ; ../printf_large.c: 840: if (!lsd) + 000704 6B 2D [ 1] 1309 ld (0x2d, sp), a + 000706 26 0E [ 1] 1310 jrne 00213$ + 1311 ; ../printf_large.c: 842: pstore++; + 000708 1E 2B [ 2] 1312 ldw x, (0x2b, sp) + 00070A 5C [ 1] 1313 incw x + 1314 ; ../printf_large.c: 843: value.byte[4] = *pstore >> 4; + 00070B 1F 2B [ 2] 1315 ldw (0x2b, sp), x + 00070D F6 [ 1] 1316 ld a, (x) + 00070E 4E [ 1] 1317 swap a + 00070F A4 0F [ 1] 1318 and a, #0x0f + 000711 1E 16 [ 2] 1319 ldw x, (0x16, sp) + 000713 F7 [ 1] 1320 ld (x), a + 000714 20 08 [ 2] 1321 jra 00214$ + 000716 1322 00213$: + 1323 ; ../printf_large.c: 847: value.byte[4] = *pstore & 0x0F; + 000716 1E 2B [ 2] 1324 ldw x, (0x2b, sp) + 000718 F6 [ 1] 1325 ld a, (x) + 000719 A4 0F [ 1] 1326 and a, #0x0f + 00071B 1E 16 [ 2] 1327 ldw x, (0x16, sp) + 00071D F7 [ 1] 1328 ld (x), a + 00071E 1329 00214$: + 1330 ; ../printf_large.c: 850: output_digit( value.byte[4], lower_case, output_char, p ); + 00071E 1E 1A [ 2] 1331 ldw x, (0x1a, sp) + 000720 F6 [ 1] 1332 ld a, (x) + 000721 6B 2A [ 1] 1333 ld (0x2a, sp), a + 000723 1E 34 [ 2] 1334 ldw x, (0x34, sp) + 000725 89 [ 2] 1335 pushw x + 000726 1E 34 [ 2] 1336 ldw x, (0x34, sp) + 000728 89 [ 2] 1337 pushw x + 000729 7B 35 [ 1] 1338 ld a, (0x35, sp) + 00072B 88 [ 1] 1339 push a + 00072C 7B 2C [ 1] 1340 ld a, (0x2c, sp) + 00072E 88 [ 1] 1341 push a + 00072F 7B 30 [ 1] 1342 ld a, (0x30, sp) + 000731 88 [ 1] 1343 push a + 000732 8Ds00r00r00 [ 5] 1344 callf _output_digit + 000736 5B 07 [ 2] 1345 addw sp, #7 + 1346 ; ../printf_large.c: 851: charsOutputted++; + 000738 1E 25 [ 2] 1347 ldw x, (0x25, sp) + 00073A 5C [ 1] 1348 incw x + 00073B 1F 25 [ 2] 1349 ldw (0x25, sp), x + 00073D 20 B4 [ 2] 1350 jra 00215$ + 00073F 1351 00318$: + 00073F 16 25 [ 2] 1352 ldw y, (0x25, sp) + 000741 17 10 [ 2] 1353 ldw (0x10, sp), y + 1354 ; ../printf_large.c: 856: if (left_justify) + 000743 0D 1C [ 1] 1355 tnz (0x1c, sp) + 000745 26 04 [ 1] 1356 jrne 00766$ + 000747 ACs00r00rDC [ 2] 1357 jpf 00231$ + 00074B 1358 00766$: + 1359 ; ../printf_large.c: 858: while (width-- > 0) + 00074B 16 25 [ 2] 1360 ldw y, (0x25, sp) + 00074D 17 2C [ 2] 1361 ldw (0x2c, sp), y + 00074F 16 28 [ 2] 1362 ldw y, (0x28, sp) + 000751 17 2A [ 2] 1363 ldw (0x2a, sp), y + 000753 1364 00218$: + 000753 1E 2A [ 2] 1365 ldw x, (0x2a, sp) + 000755 16 2A [ 2] 1366 ldw y, (0x2a, sp) + 000757 90 5A [ 2] 1367 decw y + 000759 17 2A [ 2] 1368 ldw (0x2a, sp), y + 00075B 5D [ 2] 1369 tnzw x + 00075C 26 04 [ 1] 1370 jrne 00767$ + 00075E ACs00r00rDC [ 2] 1371 jpf 00231$ + 000762 1372 00767$: + 1373 ; ../printf_large.c: 860: OUTPUT_CHAR(' ', p); + 000762 1E 34 [ 2] 1374 ldw x, (0x34, sp) + 000764 89 [ 2] 1375 pushw x + 000765 4B 20 [ 1] 1376 push #0x20 + 000767 4Br74 [ 1] 1377 push #(00768$) + 000769 4Bs07 [ 1] 1378 push #(00768$ >> 8) + 00076B 4Bs00 [ 1] 1379 push #(00768$ >> 16) + 00076D 1E 38 [ 2] 1380 ldw x, (0x38, sp) + 00076F 89 [ 2] 1381 pushw x + 000770 7B 39 [ 1] 1382 ld a, (0x39, sp) + 000772 88 [ 1] 1383 push a + 000773 87 [ 5] 1384 retf + 000774 1385 00768$: + 000774 5B 03 [ 2] 1386 addw sp, #3 + 000776 1E 2C [ 2] 1387 ldw x, (0x2c, sp) + 000778 5C [ 1] 1388 incw x + 000779 1F 2C [ 2] 1389 ldw (0x2c, sp), x + 00077B 1F 10 [ 2] 1390 ldw (0x10, sp), x + 00077D 20 D4 [ 2] 1391 jra 00218$ + 00077F 1392 00229$: + 1393 ; ../printf_large.c: 868: OUTPUT_CHAR( c, p ); + 00077F 16 34 [ 2] 1394 ldw y, (0x34, sp) + 000781 90 89 [ 2] 1395 pushw y + 000783 9F [ 1] 1396 ld a, xl + 000784 88 [ 1] 1397 push a + 000785 4Br92 [ 1] 1398 push #(00770$) + 000787 4Bs07 [ 1] 1399 push #(00770$ >> 8) + 000789 4Bs00 [ 1] 1400 push #(00770$ >> 16) + 00078B 1E 38 [ 2] 1401 ldw x, (0x38, sp) + 00078D 89 [ 2] 1402 pushw x + 00078E 7B 39 [ 1] 1403 ld a, (0x39, sp) + 000790 88 [ 1] 1404 push a + 000791 87 [ 5] 1405 retf + 000792 1406 00770$: + 000792 5B 03 [ 2] 1407 addw sp, #3 + 000794 1E 10 [ 2] 1408 ldw x, (0x10, sp) + 000796 5C [ 1] 1409 incw x + 000797 1F 10 [ 2] 1410 ldw (0x10, sp), x + 000799 ACs00r00rDC [ 2] 1411 jpf 00231$ + 00079D 1412 00233$: + 1413 ; ../printf_large.c: 872: return charsOutputted; + 00079D 1E 10 [ 2] 1414 ldw x, (0x10, sp) + 1415 ; ../printf_large.c: 873: } + 00079F 5B 2D [ 2] 1416 addw sp, #45 + 0007A1 87 [ 5] 1417 retf + 1418 .area CODE + 1419 .area CONST + 1420 .area CONST + 000000 1421 ___str_0: + 000000 3C 4E 4F 20 46 4C 4F 1422 .ascii "<NO FLOAT>" + 41 54 3E + 00000A 00 1423 .db 0x00 + 1424 .area CODE + 1425 .area INITIALIZER + 1426 .area CABS (ABS) diff --git a/device/lib/stm8-large/printf_large.rel b/device/lib/stm8-large/printf_large.rel new file mode 100644 index 0000000..b4d9a41 --- /dev/null +++ b/device/lib/stm8-large/printf_large.rel @@ -0,0 +1,694 @@ +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 7A2 flags 0 addr 0 +S __print_format Def0000C0 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 7B 04 AB 30 A1 39 23 08 AB 07 0D 05 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 09 89 88 4B 00 00 21 4B 00 00 21 4B +R 00 00 00 09 F1 01 08 00 09 F1 81 0C 00 09 +T 00 00 19 00 00 21 1E 0D 89 7B 0E 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 5B 03 87 +R 00 00 00 09 +T 00 00 24 +R 00 00 00 09 +T 00 00 24 88 7B 05 4E A4 0F 6B 01 1E 0A 89 1E 0A +R 00 00 00 09 +T 00 00 31 89 7B 0B 88 7B 0B 88 7B 07 88 8D +R 00 00 00 09 +T 00 00 3C 00 00 00 5B 07 7B 05 A4 0F 6B 01 1E 0A +R 00 00 00 09 80 03 00 09 +T 00 00 49 89 1E 0A 89 7B 0B 88 7B 0B 88 7B 07 88 +R 00 00 00 09 +T 00 00 56 8D 00 00 00 5B 08 87 +R 00 00 00 09 80 04 00 09 +T 00 00 5D +R 00 00 00 09 +T 00 00 5D 52 09 16 0D 17 01 93 90 EE 02 FE 17 08 +R 00 00 00 09 +T 00 00 6A 1F 06 1E 01 1C 00 04 1F 03 A6 20 6B 05 +R 00 00 00 09 +T 00 00 77 +R 00 00 00 09 +T 00 00 77 1E 03 F6 48 97 7B 06 48 4F 49 89 1A 02 +R 00 00 00 09 +T 00 00 84 85 1E 03 F7 08 09 09 08 09 07 09 06 11 +R 00 00 00 09 +T 00 00 91 0F 25 1C 1E 03 F6 10 0F 1E 03 F7 7B 09 +R 00 00 00 09 +T 00 00 9E AA 01 90 97 7B 08 90 95 7B 07 97 7B 06 +R 00 00 00 09 +T 00 00 AB 95 17 08 1F 06 +R 00 00 00 09 +T 00 00 B0 +R 00 00 00 09 +T 00 00 B0 0A 05 26 C3 1E 01 16 08 EF 02 16 06 FF +R 00 00 00 09 +T 00 00 BD 5B 09 87 +R 00 00 00 09 +T 00 00 C0 +R 00 00 00 09 +T 00 00 C0 52 2D 5F 1F 10 96 1C 00 0F 1F 12 96 1C +R 00 00 00 09 +T 00 00 CD 00 05 1F 14 1C 00 04 1F 16 1F 18 16 16 +R 00 00 00 09 +T 00 00 DA 17 1A +R 00 00 00 09 +T 00 00 DC +R 00 00 00 09 +T 00 00 DC 1E 36 F6 5C 1F 36 97 4D 26 04 AC +R 00 00 00 09 +T 00 00 E7 00 07 9D +R 00 00 00 09 80 03 00 09 +T 00 00 EA +R 00 00 00 09 +T 00 00 EA 9F A1 25 27 04 AC 00 07 7F +R 00 00 00 09 80 09 00 09 +T 00 00 F3 +R 00 00 00 09 +T 00 00 F3 0F 1C 0F 1D 0F 1E 0F 1F 0F 20 0F 21 0F +R 00 00 00 09 +T 00 01 00 22 0F 23 0F 24 5F 1F 25 AE FF FF 1F 2A +R 00 00 00 09 +T 00 01 0D 16 36 17 28 +R 00 00 00 09 +T 00 01 11 +R 00 00 00 09 +T 00 01 11 1E 28 F6 6B 2D 1E 28 5C 1F 28 1F 36 7B +R 00 00 00 09 +T 00 01 1E 2D A1 25 26 1C 1E 34 89 7B 2F 88 4B +R 00 00 00 09 +T 00 01 2A 00 01 36 4B 00 01 36 4B +R 00 00 00 09 F1 01 03 00 09 F1 81 07 00 09 +T 00 01 2E 00 01 36 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 01 36 +R 00 00 00 09 +T 00 01 36 5B 03 1E 10 5C 1F 10 20 9D +R 00 00 00 09 +T 00 01 3F +R 00 00 00 09 +T 00 01 3F 7B 2D A1 30 25 49 7B 2D A1 39 22 43 1E +R 00 00 00 09 +T 00 01 4C 2A 5C 26 22 1E 25 58 58 72 FB 25 58 1F +R 00 00 00 09 +T 00 01 59 03 0F 2C 1E 03 72 FB 2C 1F 26 1D 00 30 +R 00 00 00 09 +T 00 01 66 1F 2C 1F 25 26 A5 A6 01 6B 1D 20 9F +R 00 00 00 09 +T 00 01 72 +R 00 00 00 09 +T 00 01 72 1E 2A 58 58 72 FB 2A 58 1F 03 0F 2C 1E +R 00 00 00 09 +T 00 01 7F 03 72 FB 2C 1F 2A 1D 00 30 1F 2C 1F 2A +R 00 00 00 09 +T 00 01 8C 20 83 +R 00 00 00 09 +T 00 01 8E +R 00 00 00 09 +T 00 01 8E 7B 2D A1 2E 26 10 1E 2A 5C 27 04 AC +R 00 00 00 09 +T 00 01 9A 00 01 11 +R 00 00 00 09 80 03 00 09 +T 00 01 9D +R 00 00 00 09 +T 00 01 9D 5F 1F 2A AC 00 01 11 +R 00 00 00 09 80 07 00 09 +T 00 01 A4 +R 00 00 00 09 +T 00 01 A4 7B 2D A1 61 25 11 7B 2D A1 7A 22 0B 7B +R 00 00 00 09 +T 00 01 B1 2D A4 DF 6B 2D A6 01 6B 27 C5 +R 00 00 00 09 +T 00 01 BB +R 00 00 00 09 +T 00 01 BB 0F 27 +R 00 00 00 09 +T 00 01 BD +R 00 00 00 09 +T 00 01 BD 7B 2D A1 20 26 04 AC 00 02 81 +R 00 00 00 09 80 0A 00 09 +T 00 01 C7 +R 00 00 00 09 +T 00 01 C7 7B 2D A1 2B 26 04 AC 00 02 79 +R 00 00 00 09 80 0A 00 09 +T 00 01 D1 +R 00 00 00 09 +T 00 01 D1 7B 2D A1 2D 26 04 AC 00 02 71 +R 00 00 00 09 80 0A 00 09 +T 00 01 DB +R 00 00 00 09 +T 00 01 DB 7B 2D A1 42 26 04 AC 00 02 89 +R 00 00 00 09 80 0A 00 09 +T 00 01 E5 +R 00 00 00 09 +T 00 01 E5 7B 2D A1 43 26 04 AC 00 02 99 +R 00 00 00 09 80 0A 00 09 +T 00 01 EF +R 00 00 00 09 +T 00 01 EF 7B 2D A1 44 26 04 AC 00 04 46 +R 00 00 00 09 80 0A 00 09 +T 00 01 F9 +R 00 00 00 09 +T 00 01 F9 7B 2D A1 46 26 04 AC 00 04 62 +R 00 00 00 09 80 0A 00 09 +T 00 02 03 +R 00 00 00 09 +T 00 02 03 7B 2D A1 48 26 04 AC 00 01 11 +R 00 00 00 09 80 0A 00 09 +T 00 02 0D +R 00 00 00 09 +T 00 02 0D 7B 2D A1 49 26 04 AC 00 04 46 +R 00 00 00 09 80 0A 00 09 +T 00 02 17 +R 00 00 00 09 +T 00 02 17 7B 2D A1 4A 26 04 AC 00 01 11 +R 00 00 00 09 80 0A 00 09 +T 00 02 21 +R 00 00 00 09 +T 00 02 21 7B 2D A1 4C 27 6A 7B 2D A1 4F 26 04 AC +R 00 00 00 09 +T 00 02 2E 00 04 50 +R 00 00 00 09 80 03 00 09 +T 00 02 31 +R 00 00 00 09 +T 00 02 31 7B 2D A1 50 26 04 AC 00 03 B7 +R 00 00 00 09 80 0A 00 09 +T 00 02 3B +R 00 00 00 09 +T 00 02 3B 7B 2D A1 53 26 04 AC 00 02 CE +R 00 00 00 09 80 0A 00 09 +T 00 02 45 +R 00 00 00 09 +T 00 02 45 7B 2D A1 54 26 04 AC 00 01 11 +R 00 00 00 09 80 0A 00 09 +T 00 02 4F +R 00 00 00 09 +T 00 02 4F 7B 2D A1 55 26 04 AC 00 04 56 +R 00 00 00 09 80 0A 00 09 +T 00 02 59 +R 00 00 00 09 +T 00 02 59 7B 2D A1 58 26 04 AC 00 04 5C +R 00 00 00 09 80 0A 00 09 +T 00 02 63 +R 00 00 00 09 +T 00 02 63 7B 2D A1 5A 26 04 AC 00 01 11 +R 00 00 00 09 80 0A 00 09 +T 00 02 6D +R 00 00 00 09 +T 00 02 6D AC 00 04 68 +R 00 00 00 09 80 04 00 09 +T 00 02 71 +R 00 00 00 09 +T 00 02 71 A6 01 6B 1C AC 00 01 11 +R 00 00 00 09 80 08 00 09 +T 00 02 79 +R 00 00 00 09 +T 00 02 79 A6 01 6B 1E AC 00 01 11 +R 00 00 00 09 80 08 00 09 +T 00 02 81 +R 00 00 00 09 +T 00 02 81 A6 01 6B 1F AC 00 01 11 +R 00 00 00 09 80 08 00 09 +T 00 02 89 +R 00 00 00 09 +T 00 02 89 A6 01 6B 21 AC 00 01 11 +R 00 00 00 09 80 08 00 09 +T 00 02 91 +R 00 00 00 09 +T 00 02 91 A6 01 6B 22 AC 00 01 11 +R 00 00 00 09 80 08 00 09 +T 00 02 99 +R 00 00 00 09 +T 00 02 99 0D 21 27 0B 1E 38 5C 1F 38 1C FF FF F6 +R 00 00 00 09 +T 00 02 A6 20 0A +R 00 00 00 09 +T 00 02 A8 +R 00 00 00 09 +T 00 02 A8 1E 38 5C 5C 1F 38 5A 5A E6 01 +R 00 00 00 09 +T 00 02 B2 +R 00 00 00 09 +T 00 02 B2 1E 34 89 88 4B 00 02 C3 4B 00 02 C3 4B +R 00 00 00 09 F1 01 08 00 09 F1 81 0C 00 09 +T 00 02 BB 00 02 C3 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 02 C3 +R 00 00 00 09 +T 00 02 C3 5B 03 1E 10 5C 1F 10 AC +R 00 00 00 09 +T 00 02 CB 00 04 8E +R 00 00 00 09 80 03 00 09 +T 00 02 CE +R 00 00 00 09 +T 00 02 CE 1E 38 5C 5C 1F 38 5A 5A FE 1F 05 89 8D +R 00 00 00 09 +T 00 02 DB 00 00 00 5B 02 1F 28 1E 2A 5C 26 04 16 +R 00 00 00 09 82 03 00 01 +T 00 02 E8 28 17 2A +R 00 00 00 09 +T 00 02 EB +R 00 00 00 09 +T 00 02 EB 0D 1C 26 3F 1E 28 13 25 24 39 1E 25 72 +R 00 00 00 09 +T 00 02 F8 F0 28 16 10 17 25 1F 2C +R 00 00 00 09 +T 00 03 00 +R 00 00 00 09 +T 00 03 00 1E 2C 16 2C 90 5A 17 2C 5D 27 1B 1E 34 +R 00 00 00 09 +T 00 03 0D 89 4B 20 4B 00 03 1D 4B 00 03 1D 4B +R 00 00 00 09 F1 01 07 00 09 F1 81 0B 00 09 +T 00 03 15 00 03 1D 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 03 1D +R 00 00 00 09 +T 00 03 1D 5B 03 1E 25 5C 1F 25 20 DA +R 00 00 00 09 +T 00 03 26 +R 00 00 00 09 +T 00 03 26 16 25 17 10 16 2C 17 25 +R 00 00 00 09 +T 00 03 2E +R 00 00 00 09 +T 00 03 2E 16 10 17 2C +R 00 00 00 09 +T 00 03 32 +R 00 00 00 09 +T 00 03 32 1E 05 F6 6B 11 27 2D 1E 2A A3 00 00 2D +R 00 00 00 09 +T 00 03 3F 26 1E 2A 5A 1F 2A 1E 34 89 7B 13 88 4B +R 00 00 00 09 +T 00 03 4C 00 03 58 4B 00 03 58 4B +R 00 00 00 09 F1 01 03 00 09 F1 81 07 00 09 +T 00 03 50 00 03 58 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 03 58 +R 00 00 00 09 +T 00 03 58 5B 03 1E 2C 5C 1F 2C 1E 05 5C 1F 05 20 +R 00 00 00 09 +T 00 03 65 CC +R 00 00 00 09 +T 00 03 66 +R 00 00 00 09 +T 00 03 66 16 2C 17 10 0D 1C 26 04 AC +R 00 00 00 09 +T 00 03 6F 00 04 8E +R 00 00 00 09 80 03 00 09 +T 00 03 72 +R 00 00 00 09 +T 00 03 72 1E 28 13 25 25 04 AC 00 04 8E +R 00 00 00 09 80 0A 00 09 +T 00 03 7C +R 00 00 00 09 +T 00 03 7C 1E 25 72 F0 28 1F 2A 1F 25 16 2C 17 29 +R 00 00 00 09 +T 00 03 89 16 25 17 2C +R 00 00 00 09 +T 00 03 8D +R 00 00 00 09 +T 00 03 8D 1E 2C 16 2C 90 5A 17 2C 5D 26 04 AC +R 00 00 00 09 +T 00 03 99 00 04 86 +R 00 00 00 09 80 03 00 09 +T 00 03 9C +R 00 00 00 09 +T 00 03 9C 1E 34 89 4B 20 4B 00 03 AE 4B 00 03 AE +R 00 00 00 09 F1 01 09 00 09 F1 81 0D 00 09 +T 00 03 A5 4B 00 03 AE 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 04 00 09 +T 00 03 AE +R 00 00 00 09 +T 00 03 AE 5B 03 1E 29 5C 1F 29 20 D6 +R 00 00 00 09 +T 00 03 B7 +R 00 00 00 09 +T 00 03 B7 1E 38 5C 5C 1F 2A 1F 38 1E 2A 5A 5A 1F +R 00 00 00 09 +T 00 03 C4 2C 1F 2A FE 1F 2C 1F 05 1E 34 89 4B 30 +R 00 00 00 09 +T 00 03 D1 4B 00 03 DE 4B 00 03 DE 4B +R 00 00 00 09 F1 01 04 00 09 F1 81 08 00 09 +T 00 03 D6 00 03 DE 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 03 DE +R 00 00 00 09 +T 00 03 DE 5B 03 1E 10 5C 1F 2C 1F 2A 1E 34 89 4B +R 00 00 00 09 +T 00 03 EB 78 4B 00 03 F9 4B 00 03 F9 4B +R 00 00 00 09 F1 01 05 00 09 F1 81 09 00 09 +T 00 03 F1 00 03 F9 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 03 F9 +R 00 00 00 09 +T 00 03 F9 5B 03 1E 2A 5C 1F 2C 1F 2A 7B 06 6B 2D +R 00 00 00 09 +T 00 04 06 1E 34 89 1E 34 89 7B 35 88 7B 2C 88 7B +R 00 00 00 09 +T 00 04 13 33 88 8D 00 00 24 5B 07 1E 2A 5C 5C 1F +R 00 00 00 09 80 06 00 09 +T 00 04 20 2C 1F 2A 7B 05 6B 2D 1E 34 89 1E 34 89 +R 00 00 00 09 +T 00 04 2D 7B 35 88 7B 2C 88 7B 33 88 8D +R 00 00 00 09 +T 00 04 37 00 00 24 5B 07 1E 2A 5C 5C 1F 2C 1F 10 +R 00 00 00 09 80 03 00 09 +T 00 04 44 20 48 +R 00 00 00 09 +T 00 04 46 +R 00 00 00 09 +T 00 04 46 A6 01 6B 20 A6 0A 6B 24 20 3E +R 00 00 00 09 +T 00 04 50 +R 00 00 00 09 +T 00 04 50 A6 08 6B 24 20 38 +R 00 00 00 09 +T 00 04 56 +R 00 00 00 09 +T 00 04 56 A6 0A 6B 24 20 32 +R 00 00 00 09 +T 00 04 5C +R 00 00 00 09 +T 00 04 5C A6 10 6B 24 20 2C +R 00 00 00 09 +T 00 04 62 +R 00 00 00 09 +T 00 04 62 A6 01 6B 23 20 26 +R 00 00 00 09 +T 00 04 68 +R 00 00 00 09 +T 00 04 68 1E 34 89 7B 2F 88 4B 00 04 7B 4B +R 00 00 00 09 F1 01 0A 00 09 +T 00 04 71 00 04 7B 4B 00 04 7B 1E 38 89 7B 39 88 +R 00 00 00 09 F1 81 03 00 09 F3 01 07 00 09 +T 00 04 7A 87 +R 00 00 00 09 +T 00 04 7B +R 00 00 00 09 +T 00 04 7B 5B 03 1E 10 5C 1F 2C 1F 10 20 08 +R 00 00 00 09 +T 00 04 86 +R 00 00 00 09 +T 00 04 86 16 29 17 10 16 2C 17 25 +R 00 00 00 09 +T 00 04 8E +R 00 00 00 09 +T 00 04 8E 0D 23 27 50 1E 38 1C 00 04 1F 38 1D +R 00 00 00 09 +T 00 04 9A 00 04 90 93 90 EE 02 FE 17 07 1F 05 AE +R 00 00 00 09 +T 00 04 A7 00 00 1F 05 16 10 17 2C +R 00 00 00 09 00 03 00 07 +T 00 04 AF +R 00 00 00 09 +T 00 04 AF 16 05 17 28 93 5C 1F 2A 1F 05 1E 28 F6 +R 00 00 00 09 +T 00 04 BC 97 4D 26 04 AC 00 00 DC +R 00 00 00 09 80 08 00 09 +T 00 04 C4 +R 00 00 00 09 +T 00 04 C4 16 34 90 89 9F 88 4B 00 04 D7 4B +R 00 00 00 09 F1 01 0A 00 09 +T 00 04 CD 00 04 D7 4B 00 04 D7 1E 38 89 7B 39 88 +R 00 00 00 09 F1 81 03 00 09 F3 01 07 00 09 +T 00 04 D6 87 +R 00 00 00 09 +T 00 04 D7 +R 00 00 00 09 +T 00 04 D7 5B 03 1E 2C 5C 1F 2C 1F 10 20 CD +R 00 00 00 09 +T 00 04 E2 +R 00 00 00 09 +T 00 04 E2 0D 24 26 04 AC 00 00 DC +R 00 00 00 09 80 08 00 09 +T 00 04 EA +R 00 00 00 09 +T 00 04 EA 1E 12 1F 2B 0D 21 27 21 1E 38 5C 1F 38 +R 00 00 00 09 +T 00 04 F7 1C FF FF F6 5F 97 90 5F 1F 07 17 05 0D +R 00 00 00 09 +T 00 05 04 20 26 45 1E 07 4F 95 90 5F 1F 07 17 05 +R 00 00 00 09 +T 00 05 11 20 39 +R 00 00 00 09 +T 00 05 13 +R 00 00 00 09 +T 00 05 13 0D 22 27 16 1E 38 1C 00 04 1F 38 1D +R 00 00 00 09 +T 00 05 1F 00 04 90 93 90 EE 02 FE 17 07 1F 05 20 +R 00 00 00 09 +T 00 05 2C 1F +R 00 00 00 09 +T 00 05 2D +R 00 00 00 09 +T 00 05 2D 1E 38 5C 5C 1F 38 5A 5A FE 90 5F 5D 2A +R 00 00 00 09 +T 00 05 3A 02 90 5A +R 00 00 00 09 +T 00 05 3D +R 00 00 00 09 +T 00 05 3D 1F 07 17 05 0D 20 26 07 16 07 5F 17 07 +R 00 00 00 09 +T 00 05 4A 1F 05 +R 00 00 00 09 +T 00 05 4C +R 00 00 00 09 +T 00 05 4C 0D 20 27 1D 1E 05 2A 17 16 07 17 03 16 +R 00 00 00 09 +T 00 05 59 05 17 01 16 03 90 50 1E 01 24 01 5C +R 00 00 00 09 +T 00 05 65 +R 00 00 00 09 +T 00 05 65 50 17 07 1F 05 C5 +R 00 00 00 09 +T 00 05 6B +R 00 00 00 09 +T 00 05 6B 0F 20 +R 00 00 00 09 +T 00 05 6D +R 00 00 00 09 +T 00 05 6D A6 01 6B 2D 16 2B 17 29 5F 1F 2B +R 00 00 00 09 +T 00 05 78 +R 00 00 00 09 +T 00 05 78 0F 09 1E 14 7B 24 88 89 8D +R 00 00 00 09 +T 00 05 81 00 00 5D 5B 03 0D 2D 26 23 1E 18 F6 4E +R 00 00 00 09 80 03 00 09 +T 00 05 8E A4 F0 97 16 18 90 F6 4E A4 0F 89 1A 02 +R 00 00 00 09 +T 00 05 9B 85 6B 28 1E 29 F6 1A 28 1E 29 F7 1E 29 +R 00 00 00 09 +T 00 05 A8 5A 1F 29 20 06 +R 00 00 00 09 +T 00 05 AD +R 00 00 00 09 +T 00 05 AD 1E 16 F6 1E 29 F7 +R 00 00 00 09 +T 00 05 B3 +R 00 00 00 09 +T 00 05 B3 1E 2B 5C 1F 2B 7B 2D A0 01 4F 49 6B 2D +R 00 00 00 09 +T 00 05 C0 1E 14 90 93 90 EE 02 17 03 FE 16 03 26 +R 00 00 00 09 +T 00 05 CD AA 5D 26 A7 16 29 17 21 16 2B 17 23 1E +R 00 00 00 09 +T 00 05 DA 25 26 05 AE 00 01 1F 25 +R 00 00 00 09 +T 00 05 E2 +R 00 00 00 09 +T 00 05 E2 0D 1D 26 3D 0D 1C 26 39 16 10 17 29 16 +R 00 00 00 09 +T 00 05 EF 25 17 2B +R 00 00 00 09 +T 00 05 F2 +R 00 00 00 09 +T 00 05 F2 7B 24 4C 5F 97 13 2B 24 20 1E 34 89 4B +R 00 00 00 09 +T 00 05 FF 20 4B 00 06 0D 4B 00 06 0D 4B +R 00 00 00 09 F1 01 05 00 09 F1 81 09 00 09 +T 00 06 05 00 06 0D 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 06 0D +R 00 00 00 09 +T 00 06 0D 5B 03 1E 29 5C 1F 29 1E 2B 5A 1F 2B 20 +R 00 00 00 09 +T 00 06 1A D7 +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 25 +R 00 00 00 09 +T 00 06 23 +R 00 00 00 09 +T 00 06 23 0D 20 27 20 1E 34 89 4B 2D 4B 00 06 39 +R 00 00 00 09 F1 01 0D 00 09 +T 00 06 2E 4B 00 06 39 4B 00 06 39 1E 38 89 7B 39 +R 00 00 00 09 F1 81 04 00 09 F3 01 08 00 09 +T 00 06 37 88 87 +R 00 00 00 09 +T 00 06 39 +R 00 00 00 09 +T 00 06 39 5B 03 1E 10 5C 1F 10 1E 25 5A 1F 25 20 +R 00 00 00 09 +T 00 06 46 4A +R 00 00 00 09 +T 00 06 47 +R 00 00 00 09 +T 00 06 47 1E 23 27 46 0D 1E 27 20 1E 34 89 4B 2B +R 00 00 00 09 +T 00 06 54 4B 00 06 61 4B 00 06 61 4B +R 00 00 00 09 F1 01 04 00 09 F1 81 08 00 09 +T 00 06 59 00 06 61 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 03 00 09 +T 00 06 61 +R 00 00 00 09 +T 00 06 61 5B 03 1E 10 5C 1F 10 1E 25 5A 1F 25 20 +R 00 00 00 09 +T 00 06 6E 22 +R 00 00 00 09 +T 00 06 6F +R 00 00 00 09 +T 00 06 6F 0D 1F 27 1E 1E 34 89 4B 20 4B 00 06 85 +R 00 00 00 09 F1 01 0D 00 09 +T 00 06 7A 4B 00 06 85 4B 00 06 85 1E 38 89 7B 39 +R 00 00 00 09 F1 81 04 00 09 F3 01 08 00 09 +T 00 06 83 88 87 +R 00 00 00 09 +T 00 06 85 +R 00 00 00 09 +T 00 06 85 5B 03 1E 10 5C 1F 10 1E 25 5A 1F 25 +R 00 00 00 09 +T 00 06 91 +R 00 00 00 09 +T 00 06 91 0D 1C 26 3A 16 10 17 29 16 25 17 2B +R 00 00 00 09 +T 00 06 9D +R 00 00 00 09 +T 00 06 9D 16 2B 1E 2B 5A 1F 2B 93 13 23 23 3A 0D +R 00 00 00 09 +T 00 06 AA 1D 27 04 AE 00 30 BC +R 00 00 00 09 +T 00 06 B1 +R 00 00 00 09 +T 00 06 B1 AE 00 20 +R 00 00 00 09 +T 00 06 B4 +R 00 00 00 09 +T 00 06 B4 9F 1E 34 89 88 4B 00 06 C6 4B 00 06 C6 +R 00 00 00 09 F1 01 09 00 09 F1 81 0D 00 09 +T 00 06 BD 4B 00 06 C6 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 04 00 09 +T 00 06 C6 +R 00 00 00 09 +T 00 06 C6 5B 03 1E 29 5C 1F 29 20 CE +R 00 00 00 09 +T 00 06 CF +R 00 00 00 09 +T 00 06 CF 1E 25 13 23 23 09 1E 25 72 F0 23 1F 28 +R 00 00 00 09 +T 00 06 DC 20 0D +R 00 00 00 09 +T 00 06 DE +R 00 00 00 09 +T 00 06 DE 5F 1F 28 20 08 +R 00 00 00 09 +T 00 06 E3 +R 00 00 00 09 +T 00 06 E3 16 29 17 10 16 2B 17 28 +R 00 00 00 09 +T 00 06 EB +R 00 00 00 09 +T 00 06 EB 16 21 17 2B 16 10 17 25 +R 00 00 00 09 +T 00 06 F3 +R 00 00 00 09 +T 00 06 F3 1E 23 16 23 90 5A 17 23 5D 27 41 7B 2D +R 00 00 00 09 +T 00 07 00 A0 01 4F 49 6B 2D 26 0E 1E 2B 5C 1F 2B +R 00 00 00 09 +T 00 07 0D F6 4E A4 0F 1E 16 F7 20 08 +R 00 00 00 09 +T 00 07 16 +R 00 00 00 09 +T 00 07 16 1E 2B F6 A4 0F 1E 16 F7 +R 00 00 00 09 +T 00 07 1E +R 00 00 00 09 +T 00 07 1E 1E 1A F6 6B 2A 1E 34 89 1E 34 89 7B 35 +R 00 00 00 09 +T 00 07 2B 88 7B 2C 88 7B 30 88 8D +R 00 00 00 09 +T 00 07 33 00 00 00 5B 07 1E 25 5C 1F 25 20 B4 +R 00 00 00 09 80 03 00 09 +T 00 07 3F +R 00 00 00 09 +T 00 07 3F 16 25 17 10 0D 1C 26 04 AC +R 00 00 00 09 +T 00 07 48 00 00 DC +R 00 00 00 09 80 03 00 09 +T 00 07 4B +R 00 00 00 09 +T 00 07 4B 16 25 17 2C 16 28 17 2A +R 00 00 00 09 +T 00 07 53 +R 00 00 00 09 +T 00 07 53 1E 2A 16 2A 90 5A 17 2A 5D 26 04 AC +R 00 00 00 09 +T 00 07 5F 00 00 DC +R 00 00 00 09 80 03 00 09 +T 00 07 62 +R 00 00 00 09 +T 00 07 62 1E 34 89 4B 20 4B 00 07 74 4B 00 07 74 +R 00 00 00 09 F1 01 09 00 09 F1 81 0D 00 09 +T 00 07 6B 4B 00 07 74 1E 38 89 7B 39 88 87 +R 00 00 00 09 F3 01 04 00 09 +T 00 07 74 +R 00 00 00 09 +T 00 07 74 5B 03 1E 2C 5C 1F 2C 1F 10 20 D4 +R 00 00 00 09 +T 00 07 7F +R 00 00 00 09 +T 00 07 7F 16 34 90 89 9F 88 4B 00 07 92 4B +R 00 00 00 09 F1 01 0A 00 09 +T 00 07 88 00 07 92 4B 00 07 92 1E 38 89 7B 39 88 +R 00 00 00 09 F1 81 03 00 09 F3 01 07 00 09 +T 00 07 91 87 +R 00 00 00 09 +T 00 07 92 +R 00 00 00 09 +T 00 07 92 5B 03 1E 10 5C 1F 10 AC +R 00 00 00 09 +T 00 07 9A 00 00 DC +R 00 00 00 09 80 03 00 09 +T 00 07 9D +R 00 00 00 09 +T 00 07 9D 1E 10 5B 2D 87 +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-large/printf_large.sym b/device/lib/stm8-large/printf_large.sym new file mode 100644 index 0000000..798b32b --- /dev/null +++ b/device/lib/stm8-large/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 0000C0 GR + 9 _calculate_digit 00005D R + 9 _output_2digits 000024 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 7A2 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/puts.asm b/device/lib/stm8-large/puts.asm new file mode 100644 index 0000000..8ea54f4 --- /dev/null +++ b/device/lib/stm8-large/puts.asm @@ -0,0 +1,87 @@ +;-------------------------------------------------------- +; 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, (0x04, 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 + callf _putchar + addw sp, #2 + popw y + incw x + jrne 00103$ +; ../puts.c: 35: return EOF; + clrw x + decw x + jra 00106$ +00105$: +; ../puts.c: 36: return putchar('\n'); + push #0x0a + push #0x00 + callf _putchar + addw sp, #2 +00106$: +; ../puts.c: 37: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/puts.lst b/device/lib/stm8-large/puts.lst new file mode 100644 index 0000000..d9e3ea8 --- /dev/null +++ b/device/lib/stm8-large/puts.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 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 04 [ 2] 56 ldw y, (0x04, sp) + 000002 57 00103$: + 000002 90 F6 [ 1] 58 ld a, (y) + 000004 27 16 [ 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 8Ds00r00r00 [ 5] 66 callf _putchar + 000011 5B 02 [ 2] 67 addw sp, #2 + 000013 90 85 [ 2] 68 popw y + 000015 5C [ 1] 69 incw x + 000016 26 EA [ 1] 70 jrne 00103$ + 71 ; ../puts.c: 35: return EOF; + 000018 5F [ 1] 72 clrw x + 000019 5A [ 2] 73 decw x + 00001A 20 0A [ 2] 74 jra 00106$ + 00001C 75 00105$: + 76 ; ../puts.c: 36: return putchar('\n'); + 00001C 4B 0A [ 1] 77 push #0x0a + 00001E 4B 00 [ 1] 78 push #0x00 + 000020 8Ds00r00r00 [ 5] 79 callf _putchar + 000024 5B 02 [ 2] 80 addw sp, #2 + 000026 81 00106$: + 82 ; ../puts.c: 37: } + 000026 87 [ 5] 83 retf + 84 .area CODE + 85 .area CONST + 86 .area INITIALIZER + 87 .area CABS (ABS) diff --git a/device/lib/stm8-large/puts.rel b/device/lib/stm8-large/puts.rel new file mode 100644 index 0000000..f9cad2b --- /dev/null +++ b/device/lib/stm8-large/puts.rel @@ -0,0 +1,38 @@ +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 27 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 04 +R 00 00 00 09 +T 00 00 02 +R 00 00 00 09 +T 00 00 02 90 F6 27 16 90 5C 5F 97 90 89 89 8D +R 00 00 00 09 +T 00 00 0E 00 00 00 5B 02 90 85 5C 26 EA 5F 5A 20 +R 00 00 00 09 82 03 00 00 +T 00 00 1B 0A +R 00 00 00 09 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 4B 0A 4B 00 8D 00 00 00 5B 02 +R 00 00 00 09 82 08 00 00 +T 00 00 26 +R 00 00 00 09 +T 00 00 26 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/puts.sym b/device/lib/stm8-large/puts.sym new file mode 100644 index 0000000..86f5ad6 --- /dev/null +++ b/device/lib/stm8-large/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 27 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/qsort.asm b/device/lib/stm8-large/qsort.asm new file mode 100644 index 0000000..0cc83b7 --- /dev/null +++ b/device/lib/stm8-large/qsort.asm @@ -0,0 +1,176 @@ +;-------------------------------------------------------- +; 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, (0x0a, sp) +; ../qsort.c: 36: unsigned char *restrict s = src; + ldw y, (0x0c, sp) +; ../qsort.c: 38: while(n--) + ldw (0x03, sp), y + ldw y, (0x0e, 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 + retf +; ../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, (0x10, sp) + ldw (0x0b, sp), y + ldw (0x01, sp), y +; ../qsort.c: 52: if(nmemb <= 1) + ldw x, (0x12, 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, (0x14, sp) + ldw (0x05, sp), y + ldw x, y + pushw x + ldw x, (0x14, sp) + pushw x + callf __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 + push #(00147$) + push #(00147$ >> 8) + push #(00147$ >> 16) + ldw x, (0x1e, sp) + pushw x + ld a, (0x1f, sp) + push a + retf +00147$: + 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 + callf _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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/qsort.lst b/device/lib/stm8-large/qsort.lst new file mode 100644 index 0000000..7f83dd9 --- /dev/null +++ b/device/lib/stm8-large/qsort.lst @@ -0,0 +1,176 @@ + 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 0A [ 2] 56 ldw x, (0x0a, sp) + 57 ; ../qsort.c: 36: unsigned char *restrict s = src; + 000004 16 0C [ 2] 58 ldw y, (0x0c, sp) + 59 ; ../qsort.c: 38: while(n--) + 000006 17 03 [ 2] 60 ldw (0x03, sp), y + 000008 16 0E [ 2] 61 ldw y, (0x0e, 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 87 [ 5] 92 retf + 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 10 [ 2] 100 ldw y, (0x10, 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 12 [ 2] 104 ldw x, (0x12, sp) + 00003E A3 00 01 [ 2] 105 cpw x, #0x0001 + 106 ; ../qsort.c: 53: return; + 000041 23 61 [ 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 14 [ 2] 111 ldw y, (0x14, 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 14 [ 2] 115 ldw x, (0x14, sp) + 00004F 89 [ 2] 116 pushw x + 000050 8Ds00r00r00 [ 5] 117 callf __mulint + 000054 5B 04 [ 2] 118 addw sp, #4 + 000056 72 FB 01 [ 2] 119 addw x, (0x01, sp) + 000059 1F 07 [ 2] 120 ldw (0x07, sp), x + 00005B 121 00110$: + 00005B 1E 03 [ 2] 122 ldw x, (0x03, sp) + 00005D 13 07 [ 2] 123 cpw x, (0x07, sp) + 00005F 24 43 [ 1] 124 jrnc 00112$ + 125 ; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size) + 000061 16 03 [ 2] 126 ldw y, (0x03, sp) + 000063 127 00107$: + 000063 51 [ 1] 128 exgw x, y + 000064 13 01 [ 2] 129 cpw x, (0x01, sp) + 000066 51 [ 1] 130 exgw x, y + 000067 23 32 [ 2] 131 jrule 00111$ + 000069 93 [ 1] 132 ldw x, y + 00006A 72 F0 05 [ 2] 133 subw x, (0x05, sp) + 00006D 1F 09 [ 2] 134 ldw (0x09, sp), x + 00006F 17 0B [ 2] 135 ldw (0x0b, sp), y + 000071 89 [ 2] 136 pushw x + 000072 1E 0D [ 2] 137 ldw x, (0x0d, sp) + 000074 89 [ 2] 138 pushw x + 000075 4Br82 [ 1] 139 push #(00147$) + 000077 4Bs00 [ 1] 140 push #(00147$ >> 8) + 000079 4Bs00 [ 1] 141 push #(00147$ >> 16) + 00007B 1E 1E [ 2] 142 ldw x, (0x1e, sp) + 00007D 89 [ 2] 143 pushw x + 00007E 7B 1F [ 1] 144 ld a, (0x1f, sp) + 000080 88 [ 1] 145 push a + 000081 87 [ 5] 146 retf + 000082 147 00147$: + 000082 5B 04 [ 2] 148 addw sp, #4 + 000084 5D [ 2] 149 tnzw x + 000085 2A 14 [ 1] 150 jrpl 00111$ + 151 ; ../qsort.c: 58: swap(j, j - size, size); + 000087 1E 09 [ 2] 152 ldw x, (0x09, sp) + 000089 16 05 [ 2] 153 ldw y, (0x05, sp) + 00008B 90 89 [ 2] 154 pushw y + 00008D 89 [ 2] 155 pushw x + 00008E 1E 0F [ 2] 156 ldw x, (0x0f, sp) + 000090 89 [ 2] 157 pushw x + 000091 8Ds00r00r00 [ 5] 158 callf _swap + 000095 5B 06 [ 2] 159 addw sp, #6 + 160 ; ../qsort.c: 57: for(unsigned char *j = i; (j > b) && (*compar)(j, j - size) < 0; j -= size) + 000097 16 09 [ 2] 161 ldw y, (0x09, sp) + 000099 20 C8 [ 2] 162 jra 00107$ + 00009B 163 00111$: + 164 ; ../qsort.c: 55: for(unsigned char *i = base; i < b + nmemb * size; i += size) + 00009B 1E 03 [ 2] 165 ldw x, (0x03, sp) + 00009D 72 FB 05 [ 2] 166 addw x, (0x05, sp) + 0000A0 1F 03 [ 2] 167 ldw (0x03, sp), x + 0000A2 20 B7 [ 2] 168 jra 00110$ + 0000A4 169 00112$: + 170 ; ../qsort.c: 60: } + 0000A4 5B 0C [ 2] 171 addw sp, #12 + 0000A6 87 [ 5] 172 retf + 173 .area CODE + 174 .area CONST + 175 .area INITIALIZER + 176 .area CABS (ABS) diff --git a/device/lib/stm8-large/qsort.rel b/device/lib/stm8-large/qsort.rel new file mode 100644 index 0000000..cd61557 --- /dev/null +++ b/device/lib/stm8-large/qsort.rel @@ -0,0 +1,68 @@ +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 A7 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 0A 16 0C 17 03 16 0E 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 87 +R 00 00 00 09 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 52 0C 16 10 17 0B 17 01 1E 12 A3 00 01 +R 00 00 00 09 +T 00 00 41 23 61 16 0B 17 03 16 14 17 05 93 89 1E +R 00 00 00 09 +T 00 00 4E 14 89 8D 00 00 00 5B 04 72 FB 01 1F 07 +R 00 00 00 09 82 06 00 00 +T 00 00 5B +R 00 00 00 09 +T 00 00 5B 1E 03 13 07 24 43 16 03 +R 00 00 00 09 +T 00 00 63 +R 00 00 00 09 +T 00 00 63 51 13 01 51 23 32 93 72 F0 05 1F 09 17 +R 00 00 00 09 +T 00 00 70 0B 89 1E 0D 89 4B 00 00 82 4B 00 00 82 +R 00 00 00 09 F1 01 09 00 09 F1 81 0D 00 09 +T 00 00 79 4B 00 00 82 1E 1E 89 7B 1F 88 87 +R 00 00 00 09 F3 01 04 00 09 +T 00 00 82 +R 00 00 00 09 +T 00 00 82 5B 04 5D 2A 14 1E 09 16 05 90 89 89 1E +R 00 00 00 09 +T 00 00 8F 0F 89 8D 00 00 00 5B 06 16 09 20 C8 +R 00 00 00 09 80 06 00 09 +T 00 00 9B +R 00 00 00 09 +T 00 00 9B 1E 03 72 FB 05 1F 03 20 B7 +R 00 00 00 09 +T 00 00 A4 +R 00 00 00 09 +T 00 00 A4 5B 0C 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/qsort.sym b/device/lib/stm8-large/qsort.sym new file mode 100644 index 0000000..9e7fd05 --- /dev/null +++ b/device/lib/stm8-large/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 A7 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/rand.asm b/device/lib/stm8-large/rand.asm new file mode 100644 index 0000000..efffd3c --- /dev/null +++ b/device/lib/stm8-large/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 + retf +; ../rand.c: 53: void srand(unsigned int seed) +; ----------------------------------------- +; function srand +; ----------------------------------------- +_srand: +; ../rand.c: 55: s = seed | 0x80000000; /* s shall not become 0 */ + ldw y, (0x04, sp) + clrw x + sllw x + scf + rrcw x + ldw _s+2, y + ldw _s+0, x +; ../rand.c: 56: } + retf + .area CODE + .area CONST + .area INITIALIZER +__xinit__s: + .byte #0x80, #0x00, #0x00, #0x01 ; 2147483649 + .area CABS (ABS) diff --git a/device/lib/stm8-large/rand.lst b/device/lib/stm8-large/rand.lst new file mode 100644 index 0000000..4e0bfc7 --- /dev/null +++ b/device/lib/stm8-large/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 87 [ 5] 135 retf + 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 04 [ 2] 142 ldw y, (0x04, 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 87 [ 5] 150 retf + 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-large/rand.rel b/device/lib/stm8-large/rand.rel new file mode 100644 index 0000000..01b238f --- /dev/null +++ b/device/lib/stm8-large/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 87 +R 00 00 00 09 10 03 00 02 +T 00 00 89 +R 00 00 00 09 +T 00 00 89 16 04 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 87 +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-large/rand.sym b/device/lib/stm8-large/rand.sym new file mode 100644 index 0000000..0f31826 --- /dev/null +++ b/device/lib/stm8-large/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-large/realloc.asm b/device/lib/stm8-large/realloc.asm new file mode 100644 index 0000000..26c962e --- /dev/null +++ b/device/lib/stm8-large/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, (0x18, sp) + jrne 00102$ +; ../realloc.c: 70: return(malloc(size)); + ldw x, (0x1a, sp) + pushw x + callf _malloc + addw sp, #2 + jpf 00132$ +00102$: +; ../realloc.c: 72: if(!size) + ldw x, (0x1a, sp) + jrne 00104$ +; ../realloc.c: 74: free(ptr); + ldw x, (0x18, sp) + pushw x + callf _free + addw sp, #2 +; ../realloc.c: 75: return(0); + clrw x + jpf 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, (0x18, 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, (0x1a, sp) + jreq 00106$ + incw x + incw x + cpw x, (0x1a, sp) + jrnc 00107$ +00106$: +; ../realloc.c: 83: return(0); + clrw x + jpf 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, (0x18, 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$ + jpf 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 + callf _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, (0x1a, sp) + pushw x + callf _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, (0x1a, sp) + jrc 00136$ + ldw x, (0x1a, sp) +00136$: + pushw x + ldw x, (0x1a, sp) + pushw x + ldw x, (0x17, sp) + pushw x + callf ___memcpy + addw sp, #6 +; ../realloc.c: 129: free(ptr); + ldw x, (0x18, sp) + pushw x + callf _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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/realloc.lst b/device/lib/stm8-large/realloc.lst new file mode 100644 index 0000000..00a12e5 --- /dev/null +++ b/device/lib/stm8-large/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 18 [ 2] 60 ldw x, (0x18, sp) + 000004 26 0D [ 1] 61 jrne 00102$ + 62 ; ../realloc.c: 70: return(malloc(size)); + 000006 1E 1A [ 2] 63 ldw x, (0x1a, sp) + 000008 89 [ 2] 64 pushw x + 000009 8Ds00r00r00 [ 5] 65 callf _malloc + 00000D 5B 02 [ 2] 66 addw sp, #2 + 00000F ACs00r01r6F [ 2] 67 jpf 00132$ + 000013 68 00102$: + 69 ; ../realloc.c: 72: if(!size) + 000013 1E 1A [ 2] 70 ldw x, (0x1a, sp) + 000015 26 0E [ 1] 71 jrne 00104$ + 72 ; ../realloc.c: 74: free(ptr); + 000017 1E 18 [ 2] 73 ldw x, (0x18, sp) + 000019 89 [ 2] 74 pushw x + 00001A 8Ds00r00r00 [ 5] 75 callf _free + 00001E 5B 02 [ 2] 76 addw sp, #2 + 77 ; ../realloc.c: 75: return(0); + 000020 5F [ 1] 78 clrw x + 000021 ACs00r01r6F [ 2] 79 jpf 00132$ + 000025 80 00104$: + 81 ; ../realloc.c: 78: prev_free = 0, pf = 0; + 000025 5F [ 1] 82 clrw x + 000026 1F 01 [ 2] 83 ldw (0x01, sp), x + 000028 5F [ 1] 84 clrw x + 000029 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 + 00002B CEu00u00 [ 2] 87 ldw x, ___sdcc_heap_free+0 + 00002E 1F 13 [ 2] 88 ldw (0x13, sp), x + 000030 AEr00r00 [ 2] 89 ldw x, #(___sdcc_heap_free + 0) + 000033 1F 05 [ 2] 90 ldw (0x05, sp), x + 000035 91 00130$: + 000035 1E 13 [ 2] 92 ldw x, (0x13, sp) + 000037 27 1D [ 1] 93 jreq 00105$ + 000039 16 18 [ 2] 94 ldw y, (0x18, sp) + 00003B 17 11 [ 2] 95 ldw (0x11, sp), y + 00003D 1E 13 [ 2] 96 ldw x, (0x13, sp) + 00003F 13 11 [ 2] 97 cpw x, (0x11, sp) + 000041 24 13 [ 1] 98 jrnc 00105$ + 000043 16 13 [ 2] 99 ldw y, (0x13, sp) + 000045 17 01 [ 2] 100 ldw (0x01, sp), y + 000047 16 05 [ 2] 101 ldw y, (0x05, sp) + 000049 17 03 [ 2] 102 ldw (0x03, sp), y + 00004B 1E 13 [ 2] 103 ldw x, (0x13, sp) + 00004D 5C [ 1] 104 incw x + 00004E 5C [ 1] 105 incw x + 00004F 1F 05 [ 2] 106 ldw (0x05, sp), x + 000051 FE [ 2] 107 ldw x, (x) + 000052 1F 13 [ 2] 108 ldw (0x13, sp), x + 000054 20 DF [ 2] 109 jra 00130$ + 000056 110 00105$: + 111 ; ../realloc.c: 80: next_free = h; + 000056 16 13 [ 2] 112 ldw y, (0x13, sp) + 000058 17 07 [ 2] 113 ldw (0x07, sp), y + 114 ; ../realloc.c: 82: if(!size || size + offsetof(struct header, next_free) < size) + 00005A 1E 1A [ 2] 115 ldw x, (0x1a, sp) + 00005C 27 06 [ 1] 116 jreq 00106$ + 00005E 5C [ 1] 117 incw x + 00005F 5C [ 1] 118 incw x + 000060 13 1A [ 2] 119 cpw x, (0x1a, sp) + 000062 24 05 [ 1] 120 jrnc 00107$ + 000064 121 00106$: + 122 ; ../realloc.c: 83: return(0); + 000064 5F [ 1] 123 clrw x + 000065 ACs00r01r6F [ 2] 124 jpf 00132$ + 000069 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. + 000069 1F 09 [ 2] 128 ldw (0x09, sp), x + 00006B A3 00 04 [ 2] 129 cpw x, #0x0004 + 00006E 24 05 [ 1] 130 jrnc 00110$ + 131 ; ../realloc.c: 86: blocksize = sizeof(struct header); + 000070 AE 00 04 [ 2] 132 ldw x, #0x0004 + 000073 1F 09 [ 2] 133 ldw (0x09, sp), x + 000075 134 00110$: + 135 ; ../realloc.c: 88: h = (void HEAPSPACE *)((char HEAPSPACE *)(ptr) - offsetof(struct header, next_free)); + 000075 1E 18 [ 2] 136 ldw x, (0x18, sp) + 000077 5A [ 2] 137 decw x + 000078 5A [ 2] 138 decw x + 139 ; ../realloc.c: 89: oldblocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h; + 000079 1F 0B [ 2] 140 ldw (0x0b, sp), x + 00007B FE [ 2] 141 ldw x, (x) + 00007C 1F 0D [ 2] 142 ldw (0x0d, sp), x + 00007E 16 0B [ 2] 143 ldw y, (0x0b, sp) + 000080 17 0F [ 2] 144 ldw (0x0f, sp), y + 000082 72 F0 0F [ 2] 145 subw x, (0x0f, sp) + 146 ; ../realloc.c: 91: maxblocksize = oldblocksize; + 000085 1F 11 [ 2] 147 ldw (0x11, sp), x + 000087 1F 13 [ 2] 148 ldw (0x13, sp), x + 149 ; ../realloc.c: 92: if(prev_free && prev_free->next == h) // Can merge with previous block + 000089 1E 01 [ 2] 150 ldw x, (0x01, sp) + 00008B 27 10 [ 1] 151 jreq 00112$ + 00008D FE [ 2] 152 ldw x, (x) + 00008E 13 0B [ 2] 153 cpw x, (0x0b, sp) + 000090 26 0B [ 1] 154 jrne 00112$ + 155 ; ../realloc.c: 93: maxblocksize += (char HEAPSPACE *)h - (char HEAPSPACE *)prev_free; + 000092 1E 01 [ 2] 156 ldw x, (0x01, sp) + 000094 50 [ 2] 157 negw x + 000095 72 FB 0F [ 2] 158 addw x, (0x0f, sp) + 000098 72 FB 11 [ 2] 159 addw x, (0x11, sp) + 00009B 1F 13 [ 2] 160 ldw (0x13, sp), x + 00009D 161 00112$: + 162 ; ../realloc.c: 94: if(next_free == h->next) // Can merge with next block + 00009D 1E 07 [ 2] 163 ldw x, (0x07, sp) + 00009F 13 0D [ 2] 164 cpw x, (0x0d, sp) + 0000A1 26 0F [ 1] 165 jrne 00115$ + 166 ; ../realloc.c: 95: maxblocksize += (char HEAPSPACE *)(next_free->next) - (char HEAPSPACE *)next_free; + 0000A3 1E 07 [ 2] 167 ldw x, (0x07, sp) + 0000A5 FE [ 2] 168 ldw x, (x) + 0000A6 16 07 [ 2] 169 ldw y, (0x07, sp) + 0000A8 17 0F [ 2] 170 ldw (0x0f, sp), y + 0000AA 72 F0 0F [ 2] 171 subw x, (0x0f, sp) + 0000AD 72 FB 13 [ 2] 172 addw x, (0x13, sp) + 0000B0 1F 13 [ 2] 173 ldw (0x13, sp), x + 0000B2 174 00115$: + 175 ; ../realloc.c: 97: if(blocksize <= maxblocksize) // Can resize in place. + 0000B2 1E 09 [ 2] 176 ldw x, (0x09, sp) + 0000B4 13 13 [ 2] 177 cpw x, (0x13, sp) + 0000B6 23 04 [ 2] 178 jrule 00247$ + 0000B8 ACs00r01r3D [ 2] 179 jpf 00125$ + 0000BC 180 00247$: + 181 ; ../realloc.c: 99: if(prev_free && prev_free->next == h) // Always move into previous block to defragment + 0000BC 1E 01 [ 2] 182 ldw x, (0x01, sp) + 0000BE 27 2F [ 1] 183 jreq 00117$ + 0000C0 FE [ 2] 184 ldw x, (x) + 0000C1 13 0B [ 2] 185 cpw x, (0x0b, sp) + 0000C3 26 2A [ 1] 186 jrne 00117$ + 187 ; ../realloc.c: 101: memmove(prev_free, h, blocksize <= oldblocksize ? blocksize : oldblocksize); + 0000C5 1E 09 [ 2] 188 ldw x, (0x09, sp) + 0000C7 13 11 [ 2] 189 cpw x, (0x11, sp) + 0000C9 22 04 [ 1] 190 jrugt 00134$ + 0000CB 16 09 [ 2] 191 ldw y, (0x09, sp) + 0000CD 17 11 [ 2] 192 ldw (0x11, sp), y + 0000CF 193 00134$: + 0000CF 16 0B [ 2] 194 ldw y, (0x0b, sp) + 0000D1 1E 01 [ 2] 195 ldw x, (0x01, sp) + 0000D3 7B 12 [ 1] 196 ld a, (0x12, sp) + 0000D5 88 [ 1] 197 push a + 0000D6 7B 12 [ 1] 198 ld a, (0x12, sp) + 0000D8 88 [ 1] 199 push a + 0000D9 90 89 [ 2] 200 pushw y + 0000DB 89 [ 2] 201 pushw x + 0000DC 8Ds00r00r00 [ 5] 202 callf _memmove + 0000E0 5B 06 [ 2] 203 addw sp, #6 + 204 ; ../realloc.c: 102: h = prev_free; + 0000E2 16 01 [ 2] 205 ldw y, (0x01, sp) + 0000E4 17 0B [ 2] 206 ldw (0x0b, sp), y + 207 ; ../realloc.c: 103: *pf = next_free; + 0000E6 1E 03 [ 2] 208 ldw x, (0x03, sp) + 0000E8 16 07 [ 2] 209 ldw y, (0x07, sp) + 0000EA FF [ 2] 210 ldw (x), y + 211 ; ../realloc.c: 104: f = pf; + 0000EB 16 03 [ 2] 212 ldw y, (0x03, sp) + 0000ED 17 05 [ 2] 213 ldw (0x05, sp), y + 0000EF 214 00117$: + 215 ; ../realloc.c: 107: if(next_free && next_free == h->next) // Merge with following block + 0000EF 1E 07 [ 2] 216 ldw x, (0x07, sp) + 0000F1 27 16 [ 1] 217 jreq 00120$ + 0000F3 1E 0B [ 2] 218 ldw x, (0x0b, sp) + 0000F5 FE [ 2] 219 ldw x, (x) + 0000F6 13 07 [ 2] 220 cpw x, (0x07, sp) + 0000F8 26 0F [ 1] 221 jrne 00120$ + 222 ; ../realloc.c: 109: h->next = next_free->next; + 0000FA 1E 07 [ 2] 223 ldw x, (0x07, sp) + 0000FC FE [ 2] 224 ldw x, (x) + 0000FD 16 0B [ 2] 225 ldw y, (0x0b, sp) + 0000FF 90 FF [ 2] 226 ldw (y), x + 227 ; ../realloc.c: 110: *f = next_free->next_free; + 000101 1E 07 [ 2] 228 ldw x, (0x07, sp) + 000103 EE 02 [ 2] 229 ldw x, (0x2, x) + 000105 16 05 [ 2] 230 ldw y, (0x05, sp) + 000107 90 FF [ 2] 231 ldw (y), x + 000109 232 00120$: + 233 ; ../realloc.c: 113: if(maxblocksize >= blocksize + sizeof(struct header)) // Create new block from free space + 000109 1E 09 [ 2] 234 ldw x, (0x09, sp) + 00010B 1C 00 04 [ 2] 235 addw x, #0x0004 + 00010E 1F 11 [ 2] 236 ldw (0x11, sp), x + 000110 1E 13 [ 2] 237 ldw x, (0x13, sp) + 000112 13 11 [ 2] 238 cpw x, (0x11, sp) + 000114 25 21 [ 1] 239 jrc 00123$ + 240 ; ../realloc.c: 115: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + blocksize); + 000116 1E 0B [ 2] 241 ldw x, (0x0b, sp) + 000118 72 FB 09 [ 2] 242 addw x, (0x09, sp) + 00011B 1F 13 [ 2] 243 ldw (0x13, sp), x + 244 ; ../realloc.c: 116: newheader->next = h->next; + 00011D 1E 0B [ 2] 245 ldw x, (0x0b, sp) + 00011F FE [ 2] 246 ldw x, (x) + 000120 16 13 [ 2] 247 ldw y, (0x13, sp) + 000122 90 FF [ 2] 248 ldw (y), x + 249 ; ../realloc.c: 117: newheader->next_free = *f; + 000124 1E 13 [ 2] 250 ldw x, (0x13, sp) + 000126 5C [ 1] 251 incw x + 000127 5C [ 1] 252 incw x + 000128 16 05 [ 2] 253 ldw y, (0x05, sp) + 00012A 90 FE [ 2] 254 ldw y, (y) + 00012C FF [ 2] 255 ldw (x), y + 256 ; ../realloc.c: 118: *f = newheader; + 00012D 1E 05 [ 2] 257 ldw x, (0x05, sp) + 00012F 16 13 [ 2] 258 ldw y, (0x13, sp) + 000131 FF [ 2] 259 ldw (x), y + 260 ; ../realloc.c: 119: h->next = newheader; + 000132 1E 0B [ 2] 261 ldw x, (0x0b, sp) + 000134 16 13 [ 2] 262 ldw y, (0x13, sp) + 000136 FF [ 2] 263 ldw (x), y + 000137 264 00123$: + 265 ; ../realloc.c: 122: return(&(h->next_free)); + 000137 1E 0B [ 2] 266 ldw x, (0x0b, sp) + 000139 5C [ 1] 267 incw x + 00013A 5C [ 1] 268 incw x + 00013B 20 32 [ 2] 269 jra 00132$ + 00013D 270 00125$: + 271 ; ../realloc.c: 125: if(ret = malloc(size)) + 00013D 1E 1A [ 2] 272 ldw x, (0x1a, sp) + 00013F 89 [ 2] 273 pushw x + 000140 8Ds00r00r00 [ 5] 274 callf _malloc + 000144 5B 02 [ 2] 275 addw sp, #2 + 000146 1F 13 [ 2] 276 ldw (0x13, sp), x + 000148 5D [ 2] 277 tnzw x + 000149 27 23 [ 1] 278 jreq 00127$ + 279 ; ../realloc.c: 127: size_t oldsize = oldblocksize - offsetof(struct header, next_free); + 00014B 1E 11 [ 2] 280 ldw x, (0x11, sp) + 00014D 5A [ 2] 281 decw x + 00014E 5A [ 2] 282 decw x + 283 ; ../realloc.c: 128: memcpy(ret, ptr, size <= oldsize ? size : oldsize); + 00014F 13 1A [ 2] 284 cpw x, (0x1a, sp) + 000151 25 02 [ 1] 285 jrc 00136$ + 000153 1E 1A [ 2] 286 ldw x, (0x1a, sp) + 000155 287 00136$: + 000155 89 [ 2] 288 pushw x + 000156 1E 1A [ 2] 289 ldw x, (0x1a, sp) + 000158 89 [ 2] 290 pushw x + 000159 1E 17 [ 2] 291 ldw x, (0x17, sp) + 00015B 89 [ 2] 292 pushw x + 00015C 8Ds00r00r00 [ 5] 293 callf ___memcpy + 000160 5B 06 [ 2] 294 addw sp, #6 + 295 ; ../realloc.c: 129: free(ptr); + 000162 1E 18 [ 2] 296 ldw x, (0x18, sp) + 000164 89 [ 2] 297 pushw x + 000165 8Ds00r00r00 [ 5] 298 callf _free + 000169 5B 02 [ 2] 299 addw sp, #2 + 300 ; ../realloc.c: 130: return(ret); + 00016B 1E 13 [ 2] 301 ldw x, (0x13, sp) + 302 ; ../realloc.c: 133: return(0); + 00016D 21 303 .byte 0x21 + 00016E 304 00127$: + 00016E 5F [ 1] 305 clrw x + 00016F 306 00132$: + 307 ; ../realloc.c: 134: } + 00016F 5B 14 [ 2] 308 addw sp, #20 + 000171 87 [ 5] 309 retf + 310 .area CODE + 311 .area CONST + 312 .area INITIALIZER + 313 .area CABS (ABS) diff --git a/device/lib/stm8-large/realloc.rel b/device/lib/stm8-large/realloc.rel new file mode 100644 index 0000000..48d6567 --- /dev/null +++ b/device/lib/stm8-large/realloc.rel @@ -0,0 +1,138 @@ +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 172 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 18 26 0D 1E 1A 89 8D +R 00 00 00 09 +T 00 00 0A 00 00 00 5B 02 AC 00 01 6F +R 00 00 00 09 82 03 00 02 80 09 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 1E 1A 26 0E 1E 18 89 8D +R 00 00 00 09 +T 00 00 1B 00 00 00 5B 02 5F AC 00 01 6F +R 00 00 00 09 82 03 00 00 80 0A 00 09 +T 00 00 25 +R 00 00 00 09 +T 00 00 25 5F 1F 01 5F 1F 03 CE 00 00 1F 13 AE +R 00 00 00 09 12 0A 00 05 +T 00 00 31 00 00 1F 05 +R 00 00 00 09 02 03 00 05 +T 00 00 35 +R 00 00 00 09 +T 00 00 35 1E 13 27 1D 16 18 17 11 1E 13 13 11 24 +R 00 00 00 09 +T 00 00 42 13 16 13 17 01 16 05 17 03 1E 13 5C 5C +R 00 00 00 09 +T 00 00 4F 1F 05 FE 1F 13 20 DF +R 00 00 00 09 +T 00 00 56 +R 00 00 00 09 +T 00 00 56 16 13 17 07 1E 1A 27 06 5C 5C 13 1A 24 +R 00 00 00 09 +T 00 00 63 05 +R 00 00 00 09 +T 00 00 64 +R 00 00 00 09 +T 00 00 64 5F AC 00 01 6F +R 00 00 00 09 80 05 00 09 +T 00 00 69 +R 00 00 00 09 +T 00 00 69 1F 09 A3 00 04 24 05 AE 00 04 1F 09 +R 00 00 00 09 +T 00 00 75 +R 00 00 00 09 +T 00 00 75 1E 18 5A 5A 1F 0B FE 1F 0D 16 0B 17 0F +R 00 00 00 09 +T 00 00 82 72 F0 0F 1F 11 1F 13 1E 01 27 10 FE 13 +R 00 00 00 09 +T 00 00 8F 0B 26 0B 1E 01 50 72 FB 0F 72 FB 11 1F +R 00 00 00 09 +T 00 00 9C 13 +R 00 00 00 09 +T 00 00 9D +R 00 00 00 09 +T 00 00 9D 1E 07 13 0D 26 0F 1E 07 FE 16 07 17 0F +R 00 00 00 09 +T 00 00 AA 72 F0 0F 72 FB 13 1F 13 +R 00 00 00 09 +T 00 00 B2 +R 00 00 00 09 +T 00 00 B2 1E 09 13 13 23 04 AC 00 01 3D +R 00 00 00 09 80 0A 00 09 +T 00 00 BC +R 00 00 00 09 +T 00 00 BC 1E 01 27 2F FE 13 0B 26 2A 1E 09 13 11 +R 00 00 00 09 +T 00 00 C9 22 04 16 09 17 11 +R 00 00 00 09 +T 00 00 CF +R 00 00 00 09 +T 00 00 CF 16 0B 1E 01 7B 12 88 7B 12 88 90 89 89 +R 00 00 00 09 +T 00 00 DC 8D 00 00 00 5B 06 16 01 17 0B 1E 03 16 +R 00 00 00 09 82 04 00 01 +T 00 00 E9 07 FF 16 03 17 05 +R 00 00 00 09 +T 00 00 EF +R 00 00 00 09 +T 00 00 EF 1E 07 27 16 1E 0B FE 13 07 26 0F 1E 07 +R 00 00 00 09 +T 00 00 FC FE 16 0B 90 FF 1E 07 EE 02 16 05 90 FF +R 00 00 00 09 +T 00 01 09 +R 00 00 00 09 +T 00 01 09 1E 09 1C 00 04 1F 11 1E 13 13 11 25 21 +R 00 00 00 09 +T 00 01 16 1E 0B 72 FB 09 1F 13 1E 0B FE 16 13 90 +R 00 00 00 09 +T 00 01 23 FF 1E 13 5C 5C 16 05 90 FE FF 1E 05 16 +R 00 00 00 09 +T 00 01 30 13 FF 1E 0B 16 13 FF +R 00 00 00 09 +T 00 01 37 +R 00 00 00 09 +T 00 01 37 1E 0B 5C 5C 20 32 +R 00 00 00 09 +T 00 01 3D +R 00 00 00 09 +T 00 01 3D 1E 1A 89 8D 00 00 00 5B 02 1F 13 5D 27 +R 00 00 00 09 82 07 00 02 +T 00 01 4A 23 1E 11 5A 5A 13 1A 25 02 1E 1A +R 00 00 00 09 +T 00 01 55 +R 00 00 00 09 +T 00 01 55 89 1E 1A 89 1E 17 89 8D +R 00 00 00 09 +T 00 01 5D 00 00 00 5B 06 1E 18 89 8D +R 00 00 00 09 82 03 00 04 +T 00 01 66 00 00 00 5B 02 1E 13 21 +R 00 00 00 09 82 03 00 00 +T 00 01 6E +R 00 00 00 09 +T 00 01 6E 5F +R 00 00 00 09 +T 00 01 6F +R 00 00 00 09 +T 00 01 6F 5B 14 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/realloc.sym b/device/lib/stm8-large/realloc.sym new file mode 100644 index 0000000..3ecbce1 --- /dev/null +++ b/device/lib/stm8-large/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 172 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/setjmp.lst b/device/lib/stm8-large/setjmp.lst new file mode 100644 index 0000000..31dd3c3 --- /dev/null +++ b/device/lib/stm8-large/setjmp.lst @@ -0,0 +1,77 @@ + 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 04 [ 2] 34 ldw y, (4, sp) + 35 + 36 ; store return address + 000002 1E 01 [ 2] 37 ldw x, (1, sp) + 000004 90 FF [ 2] 38 ldw (y), x + 000006 7B 03 [ 1] 39 ld a, (3, sp) + 000008 90 E7 02 [ 1] 40 ld (2, y), a + 41 + 42 ; store stack pointer + 00000B 96 [ 1] 43 ldw x, sp + 00000C 90 EF 03 [ 2] 44 ldw (3, y), x + 45 + 46 ; return 0 + 00000F 5F [ 1] 47 clrw x + 48 + 000010 87 [ 5] 49 retf + 50 + 51 .globl _longjmp + 52 + 000011 53 _longjmp: + 000011 1E 04 [ 2] 54 ldw x, (4, sp) + 000013 16 06 [ 2] 55 ldw y, (6, sp) + 56 + 57 ; Restore stack pointer + 000015 89 [ 2] 58 pushw x + 000016 EE 03 [ 2] 59 ldw x, (3, x) + 000018 EF 01 [ 2] 60 ldw (1, x), y + 00001A 90 85 [ 2] 61 popw y + 00001C 94 [ 1] 62 ldw sp, x + 63 + 64 ; Calculate return value + 00001D 85 [ 2] 65 popw x + 00001E 84 [ 1] 66 pop a + 00001F 5D [ 2] 67 tnzw x + 000020 26 01 [ 1] 68 jrne jump + 000022 5C [ 1] 69 incw x + 000023 70 jump: + 71 ; return + 000023 90 F6 [ 1] 72 ld a, (y) + 000025 90 EE 01 [ 2] 73 ldw y, (1, y) + 000028 90 89 [ 2] 74 pushw y + 00002A 88 [ 1] 75 push a + 00002B 87 [ 5] 76 retf + 77 diff --git a/device/lib/stm8-large/setjmp.rel b/device/lib/stm8-large/setjmp.rel new file mode 100644 index 0000000..8f86077 --- /dev/null +++ b/device/lib/stm8-large/setjmp.rel @@ -0,0 +1,23 @@ +XH3 +H 2 areas 3 global symbols +S .__.ABS. Def000000 +A _CODE size 0 flags 0 addr 0 +A CODE size 2C flags 0 addr 0 +S _longjmp Def000011 +S ___setjmp Def000000 +T 00 00 00 +R 00 00 00 01 +T 00 00 00 16 04 1E 01 90 FF 7B 03 90 E7 02 96 90 +R 00 00 00 01 +T 00 00 0D EF 03 5F 87 +R 00 00 00 01 +T 00 00 11 +R 00 00 00 01 +T 00 00 11 1E 04 16 06 89 EE 03 EF 01 90 85 94 85 +R 00 00 00 01 +T 00 00 1E 84 5D 26 01 5C +R 00 00 00 01 +T 00 00 23 +R 00 00 00 01 +T 00 00 23 90 F6 90 EE 01 90 89 88 87 +R 00 00 00 01 diff --git a/device/lib/stm8-large/setjmp.s b/device/lib/stm8-large/setjmp.s new file mode 100644 index 0000000..aec6ab6 --- /dev/null +++ b/device/lib/stm8-large/setjmp.s @@ -0,0 +1,77 @@ +;-------------------------------------------------------------------------- +; 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, (4, sp) + + ; store return address + ldw x, (1, sp) + ldw (y), x + ld a, (3, sp) + ld (2, y), a + + ; store stack pointer + ldw x, sp + ldw (3, y), x + + ; return 0 + clrw x + + retf + + .globl _longjmp + +_longjmp: + ldw x, (4, sp) + ldw y, (6, sp) + + ; Restore stack pointer + pushw x + ldw x, (3, x) + ldw (1, x), y + popw y + ldw sp, x + + ; Calculate return value + popw x + pop a + tnzw x + jrne jump + incw x +jump: + ; return + ld a, (y) + ldw y, (1, y) + pushw y + push a + retf + diff --git a/device/lib/stm8-large/setjmp.sym b/device/lib/stm8-large/setjmp.sym new file mode 100644 index 0000000..3dc63c9 --- /dev/null +++ b/device/lib/stm8-large/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 000011 GR + 1 jump 000023 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 2C flags 0 + diff --git a/device/lib/stm8-large/sincosf.asm b/device/lib/stm8-large/sincosf.asm new file mode 100644 index 0000000..7301f7d --- /dev/null +++ b/device/lib/stm8-large/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 (0x15, sp) + jreq 00105$ +; ../sincosf.c: 58: y=fabsf(x)+HALF_PI; + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + callf _fabsf + addw sp, #4 + push #0xdb + push #0x0f + push #0xc9 + push #0x3f + pushw x + pushw y + callf ___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, (0x17, sp) + pushw x + ldw x, (0x17, sp) + pushw x + callf ___fslt + addw sp, #8 + tnz a + jreq 00102$ +; ../sincosf.c: 64: { y=-x; sign=1; } + ldw y, (0x13, sp) + ldw x, (0x11, 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, (0x13, sp) + ldw (0x0a, sp), y + ldw y, (0x11, 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 + callf ___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 + jpf 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 + callf ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x00 + push #0x3f + pushw x + pushw y + callf ___fsadd + addw sp, #8 + pushw x + pushw y + callf ___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 + callf ___sint2fs + addw sp, #2 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../sincosf.c: 83: if(iscos) XN-=0.5; + tnz (0x15, sp) + jreq 00112$ + clrw x + pushw x + push #0x00 + push #0x3f + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf ___fssub + addw sp, #8 + ldw (0x03, sp), x + ldw (0x01, sp), y +00112$: +; ../sincosf.c: 85: y=fabsf(x); + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + callf _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 + callf ___fs2sint + addw sp, #4 + pushw x + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + callf ___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 + callf ___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 + callf ___fslt + addw sp, #8 + tnz a + jrne 00159$ + jpf 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 + callf ___fsmul + addw sp, #8 + push #0x22 + push #0xb2 + push #0x4f + push #0xb9 + pushw x + pushw y + callf ___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 + callf ___fsmul + addw sp, #8 + push #0x3e + push #0x87 + push #0x08 + push #0x3c + pushw x + pushw y + callf ___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 + callf ___fsmul + addw sp, #8 + push #0xa4 + push #0xaa + push #0x2a + push #0xbe + pushw x + pushw y + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/sincosf.lst b/device/lib/stm8-large/sincosf.lst new file mode 100644 index 0000000..9fb9cdf --- /dev/null +++ b/device/lib/stm8-large/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 15 [ 1] 57 tnz (0x15, sp) + 000004 27 25 [ 1] 58 jreq 00105$ + 59 ; ../sincosf.c: 58: y=fabsf(x)+HALF_PI; + 000006 1E 13 [ 2] 60 ldw x, (0x13, sp) + 000008 89 [ 2] 61 pushw x + 000009 1E 13 [ 2] 62 ldw x, (0x13, sp) + 00000B 89 [ 2] 63 pushw x + 00000C 8Ds00r00r00 [ 5] 64 callf _fabsf + 000010 5B 04 [ 2] 65 addw sp, #4 + 000012 4B DB [ 1] 66 push #0xdb + 000014 4B 0F [ 1] 67 push #0x0f + 000016 4B C9 [ 1] 68 push #0xc9 + 000018 4B 3F [ 1] 69 push #0x3f + 00001A 89 [ 2] 70 pushw x + 00001B 90 89 [ 2] 71 pushw y + 00001D 8Ds00r00r00 [ 5] 72 callf ___fsadd + 000021 5B 08 [ 2] 73 addw sp, #8 + 000023 1F 0A [ 2] 74 ldw (0x0a, sp), x + 000025 17 08 [ 2] 75 ldw (0x08, sp), y + 76 ; ../sincosf.c: 59: sign=0; + 000027 0F 0D [ 1] 77 clr (0x0d, sp) + 000029 20 2E [ 2] 78 jra 00106$ + 00002B 79 00105$: + 80 ; ../sincosf.c: 63: if(x<0.0) + 00002B 5F [ 1] 81 clrw x + 00002C 89 [ 2] 82 pushw x + 00002D 5F [ 1] 83 clrw x + 00002E 89 [ 2] 84 pushw x + 00002F 1E 17 [ 2] 85 ldw x, (0x17, sp) + 000031 89 [ 2] 86 pushw x + 000032 1E 17 [ 2] 87 ldw x, (0x17, sp) + 000034 89 [ 2] 88 pushw x + 000035 8Ds00r00r00 [ 5] 89 callf ___fslt + 000039 5B 08 [ 2] 90 addw sp, #8 + 00003B 4D [ 1] 91 tnz a + 00003C 27 11 [ 1] 92 jreq 00102$ + 93 ; ../sincosf.c: 64: { y=-x; sign=1; } + 00003E 16 13 [ 2] 94 ldw y, (0x13, sp) + 000040 1E 11 [ 2] 95 ldw x, (0x11, sp) + 000042 58 [ 2] 96 sllw x + 000043 8C [ 1] 97 ccf + 000044 56 [ 2] 98 rrcw x + 000045 17 0A [ 2] 99 ldw (0x0a, sp), y + 000047 1F 08 [ 2] 100 ldw (0x08, sp), x + 000049 A6 01 [ 1] 101 ld a, #0x01 + 00004B 6B 0D [ 1] 102 ld (0x0d, sp), a + 00004D 20 0A [ 2] 103 jra 00106$ + 00004F 104 00102$: + 105 ; ../sincosf.c: 66: { y=x; sign=0; } + 00004F 16 13 [ 2] 106 ldw y, (0x13, sp) + 000051 17 0A [ 2] 107 ldw (0x0a, sp), y + 000053 16 11 [ 2] 108 ldw y, (0x11, sp) + 000055 17 08 [ 2] 109 ldw (0x08, sp), y + 000057 0F 0D [ 1] 110 clr (0x0d, sp) + 000059 111 00106$: + 112 ; ../sincosf.c: 69: if(y>YMAX) + 000059 1E 0A [ 2] 113 ldw x, (0x0a, sp) + 00005B 89 [ 2] 114 pushw x + 00005C 1E 0A [ 2] 115 ldw x, (0x0a, sp) + 00005E 89 [ 2] 116 pushw x + 00005F 4B 00 [ 1] 117 push #0x00 + 000061 4B 0C [ 1] 118 push #0x0c + 000063 4B 49 [ 1] 119 push #0x49 + 000065 4B 46 [ 1] 120 push #0x46 + 000067 8Ds00r00r00 [ 5] 121 callf ___fslt + 00006B 5B 08 [ 2] 122 addw sp, #8 + 00006D 6B 0C [ 1] 123 ld (0x0c, sp), a + 00006F 27 0D [ 1] 124 jreq 00108$ + 125 ; ../sincosf.c: 71: errno=ERANGE; + 000071 AE 00 22 [ 2] 126 ldw x, #0x0022 + 000074 CFu00u00 [ 2] 127 ldw _errno+0, x + 128 ; ../sincosf.c: 72: return 0.0; + 000077 5F [ 1] 129 clrw x + 000078 90 5F [ 1] 130 clrw y + 00007A ACs00r02r69 [ 2] 131 jpf 00115$ + 00007E 132 00108$: + 133 ; ../sincosf.c: 76: N=((y*iPI)+0.5); /*y is positive*/ + 00007E 1E 0A [ 2] 134 ldw x, (0x0a, sp) + 000080 89 [ 2] 135 pushw x + 000081 1E 0A [ 2] 136 ldw x, (0x0a, sp) + 000083 89 [ 2] 137 pushw x + 000084 4B 83 [ 1] 138 push #0x83 + 000086 4B F9 [ 1] 139 push #0xf9 + 000088 4B A2 [ 1] 140 push #0xa2 + 00008A 4B 3E [ 1] 141 push #0x3e + 00008C 8Ds00r00r00 [ 5] 142 callf ___fsmul + 000090 5B 08 [ 2] 143 addw sp, #8 + 000092 4B 00 [ 1] 144 push #0x00 + 000094 4B 00 [ 1] 145 push #0x00 + 000096 4B 00 [ 1] 146 push #0x00 + 000098 4B 3F [ 1] 147 push #0x3f + 00009A 89 [ 2] 148 pushw x + 00009B 90 89 [ 2] 149 pushw y + 00009D 8Ds00r00r00 [ 5] 150 callf ___fsadd + 0000A1 5B 08 [ 2] 151 addw sp, #8 + 0000A3 89 [ 2] 152 pushw x + 0000A4 90 89 [ 2] 153 pushw y + 0000A6 8Ds00r00r00 [ 5] 154 callf ___fs2sint + 0000AA 5B 04 [ 2] 155 addw sp, #4 + 156 ; ../sincosf.c: 79: if(N&1) sign=!sign; + 0000AC 9F [ 1] 157 ld a, xl + 0000AD 44 [ 1] 158 srl a + 0000AE 24 08 [ 1] 159 jrnc 00110$ + 0000B0 7B 0D [ 1] 160 ld a, (0x0d, sp) + 0000B2 A0 01 [ 1] 161 sub a, #0x01 + 0000B4 4F [ 1] 162 clr a + 0000B5 49 [ 1] 163 rlc a + 0000B6 6B 0D [ 1] 164 ld (0x0d, sp), a + 0000B8 165 00110$: + 166 ; ../sincosf.c: 81: XN=N; + 0000B8 89 [ 2] 167 pushw x + 0000B9 8Ds00r00r00 [ 5] 168 callf ___sint2fs + 0000BD 5B 02 [ 2] 169 addw sp, #2 + 0000BF 1F 03 [ 2] 170 ldw (0x03, sp), x + 0000C1 17 01 [ 2] 171 ldw (0x01, sp), y + 172 ; ../sincosf.c: 83: if(iscos) XN-=0.5; + 0000C3 0D 15 [ 1] 173 tnz (0x15, sp) + 0000C5 27 16 [ 1] 174 jreq 00112$ + 0000C7 5F [ 1] 175 clrw x + 0000C8 89 [ 2] 176 pushw x + 0000C9 4B 00 [ 1] 177 push #0x00 + 0000CB 4B 3F [ 1] 178 push #0x3f + 0000CD 1E 07 [ 2] 179 ldw x, (0x07, sp) + 0000CF 89 [ 2] 180 pushw x + 0000D0 1E 07 [ 2] 181 ldw x, (0x07, sp) + 0000D2 89 [ 2] 182 pushw x + 0000D3 8Ds00r00r00 [ 5] 183 callf ___fssub + 0000D7 5B 08 [ 2] 184 addw sp, #8 + 0000D9 1F 03 [ 2] 185 ldw (0x03, sp), x + 0000DB 17 01 [ 2] 186 ldw (0x01, sp), y + 0000DD 187 00112$: + 188 ; ../sincosf.c: 85: y=fabsf(x); + 0000DD 1E 13 [ 2] 189 ldw x, (0x13, sp) + 0000DF 89 [ 2] 190 pushw x + 0000E0 1E 13 [ 2] 191 ldw x, (0x13, sp) + 0000E2 89 [ 2] 192 pushw x + 0000E3 8Ds00r00r00 [ 5] 193 callf _fabsf + 0000E7 5B 04 [ 2] 194 addw sp, #4 + 0000E9 1F 07 [ 2] 195 ldw (0x07, sp), x + 0000EB 17 05 [ 2] 196 ldw (0x05, sp), y + 197 ; ../sincosf.c: 86: r=(int)y; + 0000ED 1E 07 [ 2] 198 ldw x, (0x07, sp) + 0000EF 89 [ 2] 199 pushw x + 0000F0 1E 07 [ 2] 200 ldw x, (0x07, sp) + 0000F2 89 [ 2] 201 pushw x + 0000F3 8Ds00r00r00 [ 5] 202 callf ___fs2sint + 0000F7 5B 04 [ 2] 203 addw sp, #4 + 0000F9 89 [ 2] 204 pushw x + 0000FA 8Ds00r00r00 [ 5] 205 callf ___sint2fs + 0000FE 5B 02 [ 2] 206 addw sp, #2 + 000100 1F 0B [ 2] 207 ldw (0x0b, sp), x + 000102 17 09 [ 2] 208 ldw (0x09, sp), y + 209 ; ../sincosf.c: 87: g=y-r; + 000104 1E 0B [ 2] 210 ldw x, (0x0b, sp) + 000106 89 [ 2] 211 pushw x + 000107 1E 0B [ 2] 212 ldw x, (0x0b, sp) + 000109 89 [ 2] 213 pushw x + 00010A 1E 0B [ 2] 214 ldw x, (0x0b, sp) + 00010C 89 [ 2] 215 pushw x + 00010D 1E 0B [ 2] 216 ldw x, (0x0b, sp) + 00010F 89 [ 2] 217 pushw x + 000110 8Ds00r00r00 [ 5] 218 callf ___fssub + 000114 5B 08 [ 2] 219 addw sp, #8 + 000116 1F 07 [ 2] 220 ldw (0x07, sp), x + 000118 17 05 [ 2] 221 ldw (0x05, sp), y + 222 ; ../sincosf.c: 88: f=((r-XN*C1)+g)-XN*C2; + 00011A 1E 03 [ 2] 223 ldw x, (0x03, sp) + 00011C 89 [ 2] 224 pushw x + 00011D 1E 03 [ 2] 225 ldw x, (0x03, sp) + 00011F 89 [ 2] 226 pushw x + 000120 5F [ 1] 227 clrw x + 000121 89 [ 2] 228 pushw x + 000122 4B 49 [ 1] 229 push #0x49 + 000124 4B 40 [ 1] 230 push #0x40 + 000126 8Ds00r00r00 [ 5] 231 callf ___fsmul + 00012A 5B 08 [ 2] 232 addw sp, #8 + 00012C 89 [ 2] 233 pushw x + 00012D 90 89 [ 2] 234 pushw y + 00012F 1E 0F [ 2] 235 ldw x, (0x0f, sp) + 000131 89 [ 2] 236 pushw x + 000132 1E 0F [ 2] 237 ldw x, (0x0f, sp) + 000134 89 [ 2] 238 pushw x + 000135 8Ds00r00r00 [ 5] 239 callf ___fssub + 000139 5B 08 [ 2] 240 addw sp, #8 + 00013B 1F 0B [ 2] 241 ldw (0x0b, sp), x + 00013D 1E 07 [ 2] 242 ldw x, (0x07, sp) + 00013F 89 [ 2] 243 pushw x + 000140 1E 07 [ 2] 244 ldw x, (0x07, sp) + 000142 89 [ 2] 245 pushw x + 000143 1E 0F [ 2] 246 ldw x, (0x0f, sp) + 000145 89 [ 2] 247 pushw x + 000146 90 89 [ 2] 248 pushw y + 000148 8Ds00r00r00 [ 5] 249 callf ___fsadd + 00014C 5B 08 [ 2] 250 addw sp, #8 + 00014E 1F 0B [ 2] 251 ldw (0x0b, sp), x + 000150 17 09 [ 2] 252 ldw (0x09, sp), y + 000152 1E 03 [ 2] 253 ldw x, (0x03, sp) + 000154 89 [ 2] 254 pushw x + 000155 1E 03 [ 2] 255 ldw x, (0x03, sp) + 000157 89 [ 2] 256 pushw x + 000158 4B 22 [ 1] 257 push #0x22 + 00015A 4B AA [ 1] 258 push #0xaa + 00015C 4B 7D [ 1] 259 push #0x7d + 00015E 4B 3A [ 1] 260 push #0x3a + 000160 8Ds00r00r00 [ 5] 261 callf ___fsmul + 000164 5B 08 [ 2] 262 addw sp, #8 + 000166 89 [ 2] 263 pushw x + 000167 90 89 [ 2] 264 pushw y + 000169 1E 0F [ 2] 265 ldw x, (0x0f, sp) + 00016B 89 [ 2] 266 pushw x + 00016C 1E 0F [ 2] 267 ldw x, (0x0f, sp) + 00016E 89 [ 2] 268 pushw x + 00016F 8Ds00r00r00 [ 5] 269 callf ___fssub + 000173 5B 08 [ 2] 270 addw sp, #8 + 000175 1F 03 [ 2] 271 ldw (0x03, sp), x + 000177 17 01 [ 2] 272 ldw (0x01, sp), y + 273 ; ../sincosf.c: 90: g=f*f; + 000179 1E 03 [ 2] 274 ldw x, (0x03, sp) + 00017B 89 [ 2] 275 pushw x + 00017C 1E 03 [ 2] 276 ldw x, (0x03, sp) + 00017E 89 [ 2] 277 pushw x + 00017F 1E 07 [ 2] 278 ldw x, (0x07, sp) + 000181 89 [ 2] 279 pushw x + 000182 1E 07 [ 2] 280 ldw x, (0x07, sp) + 000184 89 [ 2] 281 pushw x + 000185 8Ds00r00r00 [ 5] 282 callf ___fsmul + 000189 5B 08 [ 2] 283 addw sp, #8 + 00018B 1F 07 [ 2] 284 ldw (0x07, sp), x + 00018D 17 05 [ 2] 285 ldw (0x05, sp), y + 286 ; ../sincosf.c: 91: if(g>EPS2) //Used to be if(fabsf(f)>EPS) + 00018F 1E 07 [ 2] 287 ldw x, (0x07, sp) + 000191 89 [ 2] 288 pushw x + 000192 1E 07 [ 2] 289 ldw x, (0x07, sp) + 000194 89 [ 2] 290 pushw x + 000195 4B F3 [ 1] 291 push #0xf3 + 000197 4B FF [ 1] 292 push #0xff + 000199 4B 7F [ 1] 293 push #0x7f + 00019B 4B 33 [ 1] 294 push #0x33 + 00019D 8Ds00r00r00 [ 5] 295 callf ___fslt + 0001A1 5B 08 [ 2] 296 addw sp, #8 + 0001A3 4D [ 1] 297 tnz a + 0001A4 26 04 [ 1] 298 jrne 00159$ + 0001A6 ACs00r02r4C [ 2] 299 jpf 00114$ + 0001AA 300 00159$: + 301 ; ../sincosf.c: 93: r=(((r4*g+r3)*g+r2)*g+r1)*g; + 0001AA 1E 07 [ 2] 302 ldw x, (0x07, sp) + 0001AC 89 [ 2] 303 pushw x + 0001AD 1E 07 [ 2] 304 ldw x, (0x07, sp) + 0001AF 89 [ 2] 305 pushw x + 0001B0 4B 5B [ 1] 306 push #0x5b + 0001B2 4B 9C [ 1] 307 push #0x9c + 0001B4 4B 2E [ 1] 308 push #0x2e + 0001B6 4B 36 [ 1] 309 push #0x36 + 0001B8 8Ds00r00r00 [ 5] 310 callf ___fsmul + 0001BC 5B 08 [ 2] 311 addw sp, #8 + 0001BE 4B 22 [ 1] 312 push #0x22 + 0001C0 4B B2 [ 1] 313 push #0xb2 + 0001C2 4B 4F [ 1] 314 push #0x4f + 0001C4 4B B9 [ 1] 315 push #0xb9 + 0001C6 89 [ 2] 316 pushw x + 0001C7 90 89 [ 2] 317 pushw y + 0001C9 8Ds00r00r00 [ 5] 318 callf ___fsadd + 0001CD 5B 08 [ 2] 319 addw sp, #8 + 0001CF 1F 0B [ 2] 320 ldw (0x0b, sp), x + 0001D1 1E 07 [ 2] 321 ldw x, (0x07, sp) + 0001D3 89 [ 2] 322 pushw x + 0001D4 1E 07 [ 2] 323 ldw x, (0x07, sp) + 0001D6 89 [ 2] 324 pushw x + 0001D7 1E 0F [ 2] 325 ldw x, (0x0f, sp) + 0001D9 89 [ 2] 326 pushw x + 0001DA 90 89 [ 2] 327 pushw y + 0001DC 8Ds00r00r00 [ 5] 328 callf ___fsmul + 0001E0 5B 08 [ 2] 329 addw sp, #8 + 0001E2 4B 3E [ 1] 330 push #0x3e + 0001E4 4B 87 [ 1] 331 push #0x87 + 0001E6 4B 08 [ 1] 332 push #0x08 + 0001E8 4B 3C [ 1] 333 push #0x3c + 0001EA 89 [ 2] 334 pushw x + 0001EB 90 89 [ 2] 335 pushw y + 0001ED 8Ds00r00r00 [ 5] 336 callf ___fsadd + 0001F1 5B 08 [ 2] 337 addw sp, #8 + 0001F3 1F 0B [ 2] 338 ldw (0x0b, sp), x + 0001F5 1E 07 [ 2] 339 ldw x, (0x07, sp) + 0001F7 89 [ 2] 340 pushw x + 0001F8 1E 07 [ 2] 341 ldw x, (0x07, sp) + 0001FA 89 [ 2] 342 pushw x + 0001FB 1E 0F [ 2] 343 ldw x, (0x0f, sp) + 0001FD 89 [ 2] 344 pushw x + 0001FE 90 89 [ 2] 345 pushw y + 000200 8Ds00r00r00 [ 5] 346 callf ___fsmul + 000204 5B 08 [ 2] 347 addw sp, #8 + 000206 4B A4 [ 1] 348 push #0xa4 + 000208 4B AA [ 1] 349 push #0xaa + 00020A 4B 2A [ 1] 350 push #0x2a + 00020C 4B BE [ 1] 351 push #0xbe + 00020E 89 [ 2] 352 pushw x + 00020F 90 89 [ 2] 353 pushw y + 000211 8Ds00r00r00 [ 5] 354 callf ___fsadd + 000215 5B 08 [ 2] 355 addw sp, #8 + 000217 1F 0B [ 2] 356 ldw (0x0b, sp), x + 000219 1E 07 [ 2] 357 ldw x, (0x07, sp) + 00021B 89 [ 2] 358 pushw x + 00021C 1E 07 [ 2] 359 ldw x, (0x07, sp) + 00021E 89 [ 2] 360 pushw x + 00021F 1E 0F [ 2] 361 ldw x, (0x0f, sp) + 000221 89 [ 2] 362 pushw x + 000222 90 89 [ 2] 363 pushw y + 000224 8Ds00r00r00 [ 5] 364 callf ___fsmul + 000228 5B 08 [ 2] 365 addw sp, #8 + 366 ; ../sincosf.c: 94: f+=f*r; + 00022A 89 [ 2] 367 pushw x + 00022B 90 89 [ 2] 368 pushw y + 00022D 1E 07 [ 2] 369 ldw x, (0x07, sp) + 00022F 89 [ 2] 370 pushw x + 000230 1E 07 [ 2] 371 ldw x, (0x07, sp) + 000232 89 [ 2] 372 pushw x + 000233 8Ds00r00r00 [ 5] 373 callf ___fsmul + 000237 5B 08 [ 2] 374 addw sp, #8 + 000239 89 [ 2] 375 pushw x + 00023A 90 89 [ 2] 376 pushw y + 00023C 1E 07 [ 2] 377 ldw x, (0x07, sp) + 00023E 89 [ 2] 378 pushw x + 00023F 1E 07 [ 2] 379 ldw x, (0x07, sp) + 000241 89 [ 2] 380 pushw x + 000242 8Ds00r00r00 [ 5] 381 callf ___fsadd + 000246 5B 08 [ 2] 382 addw sp, #8 + 000248 1F 03 [ 2] 383 ldw (0x03, sp), x + 00024A 17 01 [ 2] 384 ldw (0x01, sp), y + 00024C 385 00114$: + 386 ; ../sincosf.c: 96: return (sign?-f:f); + 00024C 0D 0D [ 1] 387 tnz (0x0d, sp) + 00024E 27 0D [ 1] 388 jreq 00117$ + 000250 16 03 [ 2] 389 ldw y, (0x03, sp) + 000252 1E 01 [ 2] 390 ldw x, (0x01, sp) + 000254 58 [ 2] 391 sllw x + 000255 8C [ 1] 392 ccf + 000256 56 [ 2] 393 rrcw x + 000257 17 0C [ 2] 394 ldw (0x0c, sp), y + 000259 1F 0A [ 2] 395 ldw (0x0a, sp), x + 00025B 20 08 [ 2] 396 jra 00118$ + 00025D 397 00117$: + 00025D 16 03 [ 2] 398 ldw y, (0x03, sp) + 00025F 17 0C [ 2] 399 ldw (0x0c, sp), y + 000261 16 01 [ 2] 400 ldw y, (0x01, sp) + 000263 17 0A [ 2] 401 ldw (0x0a, sp), y + 000265 402 00118$: + 000265 1E 0C [ 2] 403 ldw x, (0x0c, sp) + 000267 16 0A [ 2] 404 ldw y, (0x0a, sp) + 000269 405 00115$: + 406 ; ../sincosf.c: 97: } + 000269 5B 0D [ 2] 407 addw sp, #13 + 00026B 87 [ 5] 408 retf + 409 .area CODE + 410 .area CONST + 411 .area INITIALIZER + 412 .area CABS (ABS) diff --git a/device/lib/stm8-large/sincosf.rel b/device/lib/stm8-large/sincosf.rel new file mode 100644 index 0000000..59041bb --- /dev/null +++ b/device/lib/stm8-large/sincosf.rel @@ -0,0 +1,161 @@ +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 26C 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 15 27 25 1E 13 89 1E 13 89 8D +R 00 00 00 09 +T 00 00 0D 00 00 00 5B 04 4B DB 4B 0F 4B C9 4B 3F +R 00 00 00 09 82 03 00 06 +T 00 00 1A 89 90 89 8D 00 00 00 5B 08 1F 0A 17 08 +R 00 00 00 09 82 07 00 05 +T 00 00 27 0F 0D 20 2E +R 00 00 00 09 +T 00 00 2B +R 00 00 00 09 +T 00 00 2B 5F 89 5F 89 1E 17 89 1E 17 89 8D +R 00 00 00 09 +T 00 00 36 00 00 00 5B 08 4D 27 11 16 13 1E 11 58 +R 00 00 00 09 82 03 00 03 +T 00 00 43 8C 56 17 0A 1F 08 A6 01 6B 0D 20 0A +R 00 00 00 09 +T 00 00 4F +R 00 00 00 09 +T 00 00 4F 16 13 17 0A 16 11 17 08 0F 0D +R 00 00 00 09 +T 00 00 59 +R 00 00 00 09 +T 00 00 59 1E 0A 89 1E 0A 89 4B 00 4B 0C 4B 49 4B +R 00 00 00 09 +T 00 00 66 46 8D 00 00 00 5B 08 6B 0C 27 0D AE +R 00 00 00 09 82 05 00 03 +T 00 00 72 00 22 CF 00 00 5F 90 5F AC +R 00 00 00 09 12 06 00 02 +T 00 00 7B 00 02 69 +R 00 00 00 09 80 03 00 09 +T 00 00 7E +R 00 00 00 09 +T 00 00 7E 1E 0A 89 1E 0A 89 4B 83 4B F9 4B A2 4B +R 00 00 00 09 +T 00 00 8B 3E 8D 00 00 00 5B 08 4B 00 4B 00 4B 00 +R 00 00 00 09 82 05 00 01 +T 00 00 98 4B 3F 89 90 89 8D 00 00 00 5B 08 89 90 +R 00 00 00 09 82 09 00 05 +T 00 00 A5 89 8D 00 00 00 5B 04 9F 44 24 08 7B 0D +R 00 00 00 09 82 05 00 08 +T 00 00 B2 A0 01 4F 49 6B 0D +R 00 00 00 09 +T 00 00 B8 +R 00 00 00 09 +T 00 00 B8 89 8D 00 00 00 5B 02 1F 03 17 01 0D 15 +R 00 00 00 09 82 05 00 07 +T 00 00 C5 27 16 5F 89 4B 00 4B 3F 1E 07 89 1E 07 +R 00 00 00 09 +T 00 00 D2 89 8D 00 00 00 5B 08 1F 03 17 01 +R 00 00 00 09 82 05 00 00 +T 00 00 DD +R 00 00 00 09 +T 00 00 DD 1E 13 89 1E 13 89 8D 00 00 00 5B 04 1F +R 00 00 00 09 82 0A 00 06 +T 00 00 EA 07 17 05 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 F4 00 00 00 5B 04 89 8D 00 00 00 5B 02 1F +R 00 00 00 09 82 03 00 08 82 0A 00 07 +T 00 01 01 0B 17 09 1E 0B 89 1E 0B 89 1E 0B 89 1E +R 00 00 00 09 +T 00 01 0E 0B 89 8D 00 00 00 5B 08 1F 07 17 05 1E +R 00 00 00 09 82 06 00 00 +T 00 01 1B 03 89 1E 03 89 5F 89 4B 49 4B 40 8D +R 00 00 00 09 +T 00 01 27 00 00 00 5B 08 89 90 89 1E 0F 89 1E 0F +R 00 00 00 09 82 03 00 01 +T 00 01 34 89 8D 00 00 00 5B 08 1F 0B 1E 07 89 1E +R 00 00 00 09 82 05 00 00 +T 00 01 41 07 89 1E 0F 89 90 89 8D +R 00 00 00 09 +T 00 01 49 00 00 00 5B 08 1F 0B 17 09 1E 03 89 1E +R 00 00 00 09 82 03 00 05 +T 00 01 56 03 89 4B 22 4B AA 4B 7D 4B 3A 8D +R 00 00 00 09 +T 00 01 61 00 00 00 5B 08 89 90 89 1E 0F 89 1E 0F +R 00 00 00 09 82 03 00 01 +T 00 01 6E 89 8D 00 00 00 5B 08 1F 03 17 01 1E 03 +R 00 00 00 09 82 05 00 00 +T 00 01 7B 89 1E 03 89 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 01 86 00 00 00 5B 08 1F 07 17 05 1E 07 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 93 07 89 4B F3 4B FF 4B 7F 4B 33 8D +R 00 00 00 09 +T 00 01 9E 00 00 00 5B 08 4D 26 04 AC +R 00 00 00 09 82 03 00 03 +T 00 01 A7 00 02 4C +R 00 00 00 09 80 03 00 09 +T 00 01 AA +R 00 00 00 09 +T 00 01 AA 1E 07 89 1E 07 89 4B 5B 4B 9C 4B 2E 4B +R 00 00 00 09 +T 00 01 B7 36 8D 00 00 00 5B 08 4B 22 4B B2 4B 4F +R 00 00 00 09 82 05 00 01 +T 00 01 C4 4B B9 89 90 89 8D 00 00 00 5B 08 1F 0B +R 00 00 00 09 82 09 00 05 +T 00 01 D1 1E 07 89 1E 07 89 1E 0F 89 90 89 8D +R 00 00 00 09 +T 00 01 DD 00 00 00 5B 08 4B 3E 4B 87 4B 08 4B 3C +R 00 00 00 09 82 03 00 01 +T 00 01 EA 89 90 89 8D 00 00 00 5B 08 1F 0B 1E 07 +R 00 00 00 09 82 07 00 05 +T 00 01 F7 89 1E 07 89 1E 0F 89 90 89 8D +R 00 00 00 09 +T 00 02 01 00 00 00 5B 08 4B A4 4B AA 4B 2A 4B BE +R 00 00 00 09 82 03 00 01 +T 00 02 0E 89 90 89 8D 00 00 00 5B 08 1F 0B 1E 07 +R 00 00 00 09 82 07 00 05 +T 00 02 1B 89 1E 07 89 1E 0F 89 90 89 8D +R 00 00 00 09 +T 00 02 25 00 00 00 5B 08 89 90 89 1E 07 89 1E 07 +R 00 00 00 09 82 03 00 01 +T 00 02 32 89 8D 00 00 00 5B 08 89 90 89 1E 07 89 +R 00 00 00 09 82 05 00 01 +T 00 02 3F 1E 07 89 8D 00 00 00 5B 08 1F 03 17 01 +R 00 00 00 09 82 07 00 05 +T 00 02 4C +R 00 00 00 09 +T 00 02 4C 0D 0D 27 0D 16 03 1E 01 58 8C 56 17 0C +R 00 00 00 09 +T 00 02 59 1F 0A 20 08 +R 00 00 00 09 +T 00 02 5D +R 00 00 00 09 +T 00 02 5D 16 03 17 0C 16 01 17 0A +R 00 00 00 09 +T 00 02 65 +R 00 00 00 09 +T 00 02 65 1E 0C 16 0A +R 00 00 00 09 +T 00 02 69 +R 00 00 00 09 +T 00 02 69 5B 0D 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/sincosf.sym b/device/lib/stm8-large/sincosf.sym new file mode 100644 index 0000000..efa904e --- /dev/null +++ b/device/lib/stm8-large/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 26C flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/sincoshf.asm b/device/lib/stm8-large/sincoshf.asm new file mode 100644 index 0000000..35c798a --- /dev/null +++ b/device/lib/stm8-large/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, (0x10, sp) + ldw (0x03, sp), y + ldw y, (0x0e, 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, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf ___fslt + addw sp, #8 + ld (0x0a, sp), a + jreq 00102$ + ldw y, (0x10, sp) + ldw x, (0x0e, 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 + callf ___fslt + addw sp, #8 + ld (0x0a, sp), a + jrne 00117$ + tnz (0x12, sp) + jrne 00160$ + jpf 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 + callf ___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 + callf ___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 + callf ___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 + jpf 00111$ +00105$: +; ../sincoshf.c: 76: z=expf(w); + pushw x + pushw y + callf _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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + callf ___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 + callf _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 + callf ___fsdiv + addw sp, #8 + exgw x, y + ldw (0x07, sp), y +; ../sincoshf.c: 84: if(!iscosh) w=-w; + tnz (0x12, 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 + callf ___fsadd + addw sp, #8 + pushw x + pushw y + clrw x + pushw x + push #0x00 + push #0x3f + callf ___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$ + jpf 00119$ +00164$: + ldw y, (0x07, sp) + ldw x, (0x05, sp) + sllw x + ccf + rrcw x + ldw (0x07, sp), y + ldw (0x05, sp), x + jpf 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 + callf ___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 + jpf 00119$ +00115$: +; ../sincoshf.c: 95: z=x*x; + ldw x, (0x10, sp) + pushw x + ldw x, (0x10, sp) + pushw x + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf ___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, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf ___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 + callf ___fsmul + addw sp, #8 + push #0xf0 + push #0x69 + push #0xe4 + push #0xc0 + pushw x + pushw y + callf ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + callf ___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 + callf ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/sincoshf.lst b/device/lib/stm8-large/sincoshf.lst new file mode 100644 index 0000000..d8cb8c4 --- /dev/null +++ b/device/lib/stm8-large/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 10 [ 2] 57 ldw y, (0x10, sp) + 000004 17 03 [ 2] 58 ldw (0x03, sp), y + 000006 16 0E [ 2] 59 ldw y, (0x0e, 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 14 [ 2] 66 ldw x, (0x14, sp) + 000010 89 [ 2] 67 pushw x + 000011 1E 14 [ 2] 68 ldw x, (0x14, sp) + 000013 89 [ 2] 69 pushw x + 000014 8Ds00r00r00 [ 5] 70 callf ___fslt + 000018 5B 08 [ 2] 71 addw sp, #8 + 00001A 6B 0A [ 1] 72 ld (0x0a, sp), a + 00001C 27 11 [ 1] 73 jreq 00102$ + 00001E 16 10 [ 2] 74 ldw y, (0x10, sp) + 000020 1E 0E [ 2] 75 ldw x, (0x0e, sp) + 000022 58 [ 2] 76 sllw x + 000023 8C [ 1] 77 ccf + 000024 56 [ 2] 78 rrcw x + 000025 17 07 [ 2] 79 ldw (0x07, sp), y + 000027 1F 05 [ 2] 80 ldw (0x05, sp), x + 000029 A6 01 [ 1] 81 ld a, #0x01 + 00002B 6B 09 [ 1] 82 ld (0x09, sp), a + 00002D 20 0A [ 2] 83 jra 00103$ + 00002F 84 00102$: + 85 ; ../sincoshf.c: 62: else { y=x; sign=0; } + 00002F 16 03 [ 2] 86 ldw y, (0x03, sp) + 000031 17 07 [ 2] 87 ldw (0x07, sp), y + 000033 16 01 [ 2] 88 ldw y, (0x01, sp) + 000035 17 05 [ 2] 89 ldw (0x05, sp), y + 000037 0F 09 [ 1] 90 clr (0x09, sp) + 000039 91 00103$: + 92 ; ../sincoshf.c: 64: if ((y>1.0) || iscosh) + 000039 1E 07 [ 2] 93 ldw x, (0x07, sp) + 00003B 89 [ 2] 94 pushw x + 00003C 1E 07 [ 2] 95 ldw x, (0x07, sp) + 00003E 89 [ 2] 96 pushw x + 00003F 5F [ 1] 97 clrw x + 000040 89 [ 2] 98 pushw x + 000041 4B 80 [ 1] 99 push #0x80 + 000043 4B 3F [ 1] 100 push #0x3f + 000045 8Ds00r00r00 [ 5] 101 callf ___fslt + 000049 5B 08 [ 2] 102 addw sp, #8 + 00004B 6B 0A [ 1] 103 ld (0x0a, sp), a + 00004D 26 08 [ 1] 104 jrne 00117$ + 00004F 0D 12 [ 1] 105 tnz (0x12, sp) + 000051 26 04 [ 1] 106 jrne 00160$ + 000053 ACs00r01r50 [ 2] 107 jpf 00118$ + 000057 108 00160$: + 000057 109 00117$: + 110 ; ../sincoshf.c: 66: if(y>YBAR) + 000057 1E 07 [ 2] 111 ldw x, (0x07, sp) + 000059 89 [ 2] 112 pushw x + 00005A 1E 07 [ 2] 113 ldw x, (0x07, sp) + 00005C 89 [ 2] 114 pushw x + 00005D 5F [ 1] 115 clrw x + 00005E 89 [ 2] 116 pushw x + 00005F 4B 10 [ 1] 117 push #0x10 + 000061 4B 41 [ 1] 118 push #0x41 + 000063 8Ds00r00r00 [ 5] 119 callf ___fslt + 000067 5B 08 [ 2] 120 addw sp, #8 + 000069 6B 0A [ 1] 121 ld (0x0a, sp), a + 00006B 27 78 [ 1] 122 jreq 00110$ + 123 ; ../sincoshf.c: 68: w=y-K1; + 00006D 4B 00 [ 1] 124 push #0x00 + 00006F 4B 73 [ 1] 125 push #0x73 + 000071 4B 31 [ 1] 126 push #0x31 + 000073 4B 3F [ 1] 127 push #0x3f + 000075 1E 0B [ 2] 128 ldw x, (0x0b, sp) + 000077 89 [ 2] 129 pushw x + 000078 1E 0B [ 2] 130 ldw x, (0x0b, sp) + 00007A 89 [ 2] 131 pushw x + 00007B 8Ds00r00r00 [ 5] 132 callf ___fssub + 00007F 5B 08 [ 2] 133 addw sp, #8 + 134 ; ../sincoshf.c: 69: if (w>WMAX) + 000081 89 [ 2] 135 pushw x + 000082 90 89 [ 2] 136 pushw y + 000084 89 [ 2] 137 pushw x + 000085 90 89 [ 2] 138 pushw y + 000087 4B CF [ 1] 139 push #0xcf + 000089 4B BD [ 1] 140 push #0xbd + 00008B 4B 33 [ 1] 141 push #0x33 + 00008D 4B 42 [ 1] 142 push #0x42 + 00008F 8Ds00r00r00 [ 5] 143 callf ___fslt + 000093 5B 08 [ 2] 144 addw sp, #8 + 000095 90 85 [ 2] 145 popw y + 000097 85 [ 2] 146 popw x + 000098 4D [ 1] 147 tnz a + 000099 27 14 [ 1] 148 jreq 00105$ + 149 ; ../sincoshf.c: 71: errno=ERANGE; + 00009B AE 00 22 [ 2] 150 ldw x, #0x0022 + 00009E CFu00u00 [ 2] 151 ldw _errno+0, x + 152 ; ../sincoshf.c: 72: z=HUGE_VALF; + 0000A1 AE FF FF [ 2] 153 ldw x, #0xffff + 0000A4 1F 07 [ 2] 154 ldw (0x07, sp), x + 0000A6 AE 7F 7F [ 2] 155 ldw x, #0x7f7f + 0000A9 1F 05 [ 2] 156 ldw (0x05, sp), x + 0000AB ACs00r01r39 [ 2] 157 jpf 00111$ + 0000AF 158 00105$: + 159 ; ../sincoshf.c: 76: z=expf(w); + 0000AF 89 [ 2] 160 pushw x + 0000B0 90 89 [ 2] 161 pushw y + 0000B2 8Ds00r00r00 [ 5] 162 callf _expf + 0000B6 5B 04 [ 2] 163 addw sp, #4 + 0000B8 1F 07 [ 2] 164 ldw (0x07, sp), x + 0000BA 17 05 [ 2] 165 ldw (0x05, sp), y + 166 ; ../sincoshf.c: 77: z+=K3*z; + 0000BC 1E 07 [ 2] 167 ldw x, (0x07, sp) + 0000BE 89 [ 2] 168 pushw x + 0000BF 1E 07 [ 2] 169 ldw x, (0x07, sp) + 0000C1 89 [ 2] 170 pushw x + 0000C2 4B 97 [ 1] 171 push #0x97 + 0000C4 4B 08 [ 1] 172 push #0x08 + 0000C6 4B 68 [ 1] 173 push #0x68 + 0000C8 4B 37 [ 1] 174 push #0x37 + 0000CA 8Ds00r00r00 [ 5] 175 callf ___fsmul + 0000CE 5B 08 [ 2] 176 addw sp, #8 + 0000D0 89 [ 2] 177 pushw x + 0000D1 90 89 [ 2] 178 pushw y + 0000D3 1E 0B [ 2] 179 ldw x, (0x0b, sp) + 0000D5 89 [ 2] 180 pushw x + 0000D6 1E 0B [ 2] 181 ldw x, (0x0b, sp) + 0000D8 89 [ 2] 182 pushw x + 0000D9 8Ds00r00r00 [ 5] 183 callf ___fsadd + 0000DD 5B 08 [ 2] 184 addw sp, #8 + 0000DF 1F 07 [ 2] 185 ldw (0x07, sp), x + 0000E1 17 05 [ 2] 186 ldw (0x05, sp), y + 0000E3 20 54 [ 2] 187 jra 00111$ + 0000E5 188 00110$: + 189 ; ../sincoshf.c: 82: z=expf(y); + 0000E5 1E 07 [ 2] 190 ldw x, (0x07, sp) + 0000E7 89 [ 2] 191 pushw x + 0000E8 1E 07 [ 2] 192 ldw x, (0x07, sp) + 0000EA 89 [ 2] 193 pushw x + 0000EB 8Ds00r00r00 [ 5] 194 callf _expf + 0000EF 5B 04 [ 2] 195 addw sp, #4 + 0000F1 1F 03 [ 2] 196 ldw (0x03, sp), x + 0000F3 17 01 [ 2] 197 ldw (0x01, sp), y + 198 ; ../sincoshf.c: 83: w=1.0/z; + 0000F5 1E 03 [ 2] 199 ldw x, (0x03, sp) + 0000F7 89 [ 2] 200 pushw x + 0000F8 1E 03 [ 2] 201 ldw x, (0x03, sp) + 0000FA 89 [ 2] 202 pushw x + 0000FB 5F [ 1] 203 clrw x + 0000FC 89 [ 2] 204 pushw x + 0000FD 4B 80 [ 1] 205 push #0x80 + 0000FF 4B 3F [ 1] 206 push #0x3f + 000101 8Ds00r00r00 [ 5] 207 callf ___fsdiv + 000105 5B 08 [ 2] 208 addw sp, #8 + 000107 51 [ 1] 209 exgw x, y + 000108 17 07 [ 2] 210 ldw (0x07, sp), y + 211 ; ../sincoshf.c: 84: if(!iscosh) w=-w; + 00010A 0D 12 [ 1] 212 tnz (0x12, sp) + 00010C 26 07 [ 1] 213 jrne 00108$ + 00010E 16 07 [ 2] 214 ldw y, (0x07, sp) + 000110 58 [ 2] 215 sllw x + 000111 8C [ 1] 216 ccf + 000112 56 [ 2] 217 rrcw x + 000113 17 07 [ 2] 218 ldw (0x07, sp), y + 000115 219 00108$: + 220 ; ../sincoshf.c: 85: z=(z+w)*0.5; + 000115 16 07 [ 2] 221 ldw y, (0x07, sp) + 000117 90 89 [ 2] 222 pushw y + 000119 89 [ 2] 223 pushw x + 00011A 1E 07 [ 2] 224 ldw x, (0x07, sp) + 00011C 89 [ 2] 225 pushw x + 00011D 1E 07 [ 2] 226 ldw x, (0x07, sp) + 00011F 89 [ 2] 227 pushw x + 000120 8Ds00r00r00 [ 5] 228 callf ___fsadd + 000124 5B 08 [ 2] 229 addw sp, #8 + 000126 89 [ 2] 230 pushw x + 000127 90 89 [ 2] 231 pushw y + 000129 5F [ 1] 232 clrw x + 00012A 89 [ 2] 233 pushw x + 00012B 4B 00 [ 1] 234 push #0x00 + 00012D 4B 3F [ 1] 235 push #0x3f + 00012F 8Ds00r00r00 [ 5] 236 callf ___fsmul + 000133 5B 08 [ 2] 237 addw sp, #8 + 000135 1F 07 [ 2] 238 ldw (0x07, sp), x + 000137 17 05 [ 2] 239 ldw (0x05, sp), y + 000139 240 00111$: + 241 ; ../sincoshf.c: 87: if(sign) z=-z; + 000139 0D 09 [ 1] 242 tnz (0x09, sp) + 00013B 26 04 [ 1] 243 jrne 00164$ + 00013D ACs00r02r0B [ 2] 244 jpf 00119$ + 000141 245 00164$: + 000141 16 07 [ 2] 246 ldw y, (0x07, sp) + 000143 1E 05 [ 2] 247 ldw x, (0x05, sp) + 000145 58 [ 2] 248 sllw x + 000146 8C [ 1] 249 ccf + 000147 56 [ 2] 250 rrcw x + 000148 17 07 [ 2] 251 ldw (0x07, sp), y + 00014A 1F 05 [ 2] 252 ldw (0x05, sp), x + 00014C ACs00r02r0B [ 2] 253 jpf 00119$ + 000150 254 00118$: + 255 ; ../sincoshf.c: 91: if (y<EPS) + 000150 5F [ 1] 256 clrw x + 000151 89 [ 2] 257 pushw x + 000152 4B 80 [ 1] 258 push #0x80 + 000154 4B 39 [ 1] 259 push #0x39 + 000156 1E 0B [ 2] 260 ldw x, (0x0b, sp) + 000158 89 [ 2] 261 pushw x + 000159 1E 0B [ 2] 262 ldw x, (0x0b, sp) + 00015B 89 [ 2] 263 pushw x + 00015C 8Ds00r00r00 [ 5] 264 callf ___fslt + 000160 5B 08 [ 2] 265 addw sp, #8 + 000162 4D [ 1] 266 tnz a + 000163 27 0C [ 1] 267 jreq 00115$ + 268 ; ../sincoshf.c: 92: z=x; + 000165 16 03 [ 2] 269 ldw y, (0x03, sp) + 000167 17 07 [ 2] 270 ldw (0x07, sp), y + 000169 16 01 [ 2] 271 ldw y, (0x01, sp) + 00016B 17 05 [ 2] 272 ldw (0x05, sp), y + 00016D ACs00r02r0B [ 2] 273 jpf 00119$ + 000171 274 00115$: + 275 ; ../sincoshf.c: 95: z=x*x; + 000171 1E 10 [ 2] 276 ldw x, (0x10, sp) + 000173 89 [ 2] 277 pushw x + 000174 1E 10 [ 2] 278 ldw x, (0x10, sp) + 000176 89 [ 2] 279 pushw x + 000177 1E 14 [ 2] 280 ldw x, (0x14, sp) + 000179 89 [ 2] 281 pushw x + 00017A 1E 14 [ 2] 282 ldw x, (0x14, sp) + 00017C 89 [ 2] 283 pushw x + 00017D 8Ds00r00r00 [ 5] 284 callf ___fsmul + 000181 5B 08 [ 2] 285 addw sp, #8 + 000183 1F 05 [ 2] 286 ldw (0x05, sp), x + 000185 17 03 [ 2] 287 ldw (0x03, sp), y + 288 ; ../sincoshf.c: 96: z=x+x*z*P(z)/Q(z); + 000187 1E 05 [ 2] 289 ldw x, (0x05, sp) + 000189 89 [ 2] 290 pushw x + 00018A 1E 05 [ 2] 291 ldw x, (0x05, sp) + 00018C 89 [ 2] 292 pushw x + 00018D 1E 14 [ 2] 293 ldw x, (0x14, sp) + 00018F 89 [ 2] 294 pushw x + 000190 1E 14 [ 2] 295 ldw x, (0x14, sp) + 000192 89 [ 2] 296 pushw x + 000193 8Ds00r00r00 [ 5] 297 callf ___fsmul + 000197 5B 08 [ 2] 298 addw sp, #8 + 000199 1F 09 [ 2] 299 ldw (0x09, sp), x + 00019B 17 07 [ 2] 300 ldw (0x07, sp), y + 00019D 1E 05 [ 2] 301 ldw x, (0x05, sp) + 00019F 89 [ 2] 302 pushw x + 0001A0 1E 05 [ 2] 303 ldw x, (0x05, sp) + 0001A2 89 [ 2] 304 pushw x + 0001A3 4B EA [ 1] 305 push #0xea + 0001A5 4B E6 [ 1] 306 push #0xe6 + 0001A7 4B 42 [ 1] 307 push #0x42 + 0001A9 4B BE [ 1] 308 push #0xbe + 0001AB 8Ds00r00r00 [ 5] 309 callf ___fsmul + 0001AF 5B 08 [ 2] 310 addw sp, #8 + 0001B1 4B F0 [ 1] 311 push #0xf0 + 0001B3 4B 69 [ 1] 312 push #0x69 + 0001B5 4B E4 [ 1] 313 push #0xe4 + 0001B7 4B C0 [ 1] 314 push #0xc0 + 0001B9 89 [ 2] 315 pushw x + 0001BA 90 89 [ 2] 316 pushw y + 0001BC 8Ds00r00r00 [ 5] 317 callf ___fsadd + 0001C0 5B 08 [ 2] 318 addw sp, #8 + 0001C2 89 [ 2] 319 pushw x + 0001C3 90 89 [ 2] 320 pushw y + 0001C5 1E 0D [ 2] 321 ldw x, (0x0d, sp) + 0001C7 89 [ 2] 322 pushw x + 0001C8 1E 0D [ 2] 323 ldw x, (0x0d, sp) + 0001CA 89 [ 2] 324 pushw x + 0001CB 8Ds00r00r00 [ 5] 325 callf ___fsmul + 0001CF 5B 08 [ 2] 326 addw sp, #8 + 0001D1 1F 09 [ 2] 327 ldw (0x09, sp), x + 0001D3 17 07 [ 2] 328 ldw (0x07, sp), y + 0001D5 4B 93 [ 1] 329 push #0x93 + 0001D7 4B 4F [ 1] 330 push #0x4f + 0001D9 4B 2B [ 1] 331 push #0x2b + 0001DB 4B C2 [ 1] 332 push #0xc2 + 0001DD 1E 09 [ 2] 333 ldw x, (0x09, sp) + 0001DF 89 [ 2] 334 pushw x + 0001E0 1E 09 [ 2] 335 ldw x, (0x09, sp) + 0001E2 89 [ 2] 336 pushw x + 0001E3 8Ds00r00r00 [ 5] 337 callf ___fsadd + 0001E7 5B 08 [ 2] 338 addw sp, #8 + 0001E9 89 [ 2] 339 pushw x + 0001EA 90 89 [ 2] 340 pushw y + 0001EC 1E 0D [ 2] 341 ldw x, (0x0d, sp) + 0001EE 89 [ 2] 342 pushw x + 0001EF 1E 0D [ 2] 343 ldw x, (0x0d, sp) + 0001F1 89 [ 2] 344 pushw x + 0001F2 8Ds00r00r00 [ 5] 345 callf ___fsdiv + 0001F6 5B 08 [ 2] 346 addw sp, #8 + 0001F8 89 [ 2] 347 pushw x + 0001F9 90 89 [ 2] 348 pushw y + 0001FB 1E 14 [ 2] 349 ldw x, (0x14, sp) + 0001FD 89 [ 2] 350 pushw x + 0001FE 1E 14 [ 2] 351 ldw x, (0x14, sp) + 000200 89 [ 2] 352 pushw x + 000201 8Ds00r00r00 [ 5] 353 callf ___fsadd + 000205 5B 08 [ 2] 354 addw sp, #8 + 000207 1F 07 [ 2] 355 ldw (0x07, sp), x + 000209 17 05 [ 2] 356 ldw (0x05, sp), y + 00020B 357 00119$: + 358 ; ../sincoshf.c: 99: return z; + 00020B 1E 07 [ 2] 359 ldw x, (0x07, sp) + 00020D 16 05 [ 2] 360 ldw y, (0x05, sp) + 361 ; ../sincoshf.c: 100: } + 00020F 5B 0A [ 2] 362 addw sp, #10 + 000211 87 [ 5] 363 retf + 364 .area CODE + 365 .area CONST + 366 .area INITIALIZER + 367 .area CABS (ABS) diff --git a/device/lib/stm8-large/sincoshf.rel b/device/lib/stm8-large/sincoshf.rel new file mode 100644 index 0000000..687f3b2 --- /dev/null +++ b/device/lib/stm8-large/sincoshf.rel @@ -0,0 +1,146 @@ +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 212 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 10 17 03 16 0E 17 01 5F 89 5F +R 00 00 00 09 +T 00 00 0D 89 1E 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 00 15 00 00 00 5B 08 6B 0A 27 11 16 10 1E 0E +R 00 00 00 09 82 03 00 04 +T 00 00 22 58 8C 56 17 07 1F 05 A6 01 6B 09 20 0A +R 00 00 00 09 +T 00 00 2F +R 00 00 00 09 +T 00 00 2F 16 03 17 07 16 01 17 05 0F 09 +R 00 00 00 09 +T 00 00 39 +R 00 00 00 09 +T 00 00 39 1E 07 89 1E 07 89 5F 89 4B 80 4B 3F 8D +R 00 00 00 09 +T 00 00 46 00 00 00 5B 08 6B 0A 26 08 0D 12 26 04 +R 00 00 00 09 82 03 00 04 +T 00 00 53 AC 00 01 50 +R 00 00 00 09 80 04 00 09 +T 00 00 57 +R 00 00 00 09 +T 00 00 57 +R 00 00 00 09 +T 00 00 57 1E 07 89 1E 07 89 5F 89 4B 10 4B 41 8D +R 00 00 00 09 +T 00 00 64 00 00 00 5B 08 6B 0A 27 78 4B 00 4B 73 +R 00 00 00 09 82 03 00 04 +T 00 00 71 4B 31 4B 3F 1E 0B 89 1E 0B 89 8D +R 00 00 00 09 +T 00 00 7C 00 00 00 5B 08 89 90 89 89 90 89 4B CF +R 00 00 00 09 82 03 00 00 +T 00 00 89 4B BD 4B 33 4B 42 8D 00 00 00 5B 08 90 +R 00 00 00 09 82 0A 00 04 +T 00 00 96 85 85 4D 27 14 AE 00 22 CF 00 00 AE +R 00 00 00 09 12 0C 00 02 +T 00 00 A2 FF FF 1F 07 AE 7F 7F 1F 05 AC +R 00 00 00 09 +T 00 00 AC 00 01 39 +R 00 00 00 09 80 03 00 09 +T 00 00 AF +R 00 00 00 09 +T 00 00 AF 89 90 89 8D 00 00 00 5B 04 1F 07 17 05 +R 00 00 00 09 82 07 00 03 +T 00 00 BC 1E 07 89 1E 07 89 4B 97 4B 08 4B 68 4B +R 00 00 00 09 +T 00 00 C9 37 8D 00 00 00 5B 08 89 90 89 1E 0B 89 +R 00 00 00 09 82 05 00 01 +T 00 00 D6 1E 0B 89 8D 00 00 00 5B 08 1F 07 17 05 +R 00 00 00 09 82 07 00 06 +T 00 00 E3 20 54 +R 00 00 00 09 +T 00 00 E5 +R 00 00 00 09 +T 00 00 E5 1E 07 89 1E 07 89 8D 00 00 00 5B 04 1F +R 00 00 00 09 82 0A 00 03 +T 00 00 F2 03 17 01 1E 03 89 1E 03 89 5F 89 4B 80 +R 00 00 00 09 +T 00 00 FF 4B 3F 8D 00 00 00 5B 08 51 17 07 0D 12 +R 00 00 00 09 82 06 00 07 +T 00 01 0C 26 07 16 07 58 8C 56 17 07 +R 00 00 00 09 +T 00 01 15 +R 00 00 00 09 +T 00 01 15 16 07 90 89 89 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 01 21 00 00 00 5B 08 89 90 89 5F 89 4B 00 4B +R 00 00 00 09 82 03 00 06 +T 00 01 2E 3F 8D 00 00 00 5B 08 1F 07 17 05 +R 00 00 00 09 82 05 00 01 +T 00 01 39 +R 00 00 00 09 +T 00 01 39 0D 09 26 04 AC 00 02 0B +R 00 00 00 09 80 08 00 09 +T 00 01 41 +R 00 00 00 09 +T 00 01 41 16 07 1E 05 58 8C 56 17 07 1F 05 AC +R 00 00 00 09 +T 00 01 4D 00 02 0B +R 00 00 00 09 80 03 00 09 +T 00 01 50 +R 00 00 00 09 +T 00 01 50 5F 89 4B 80 4B 39 1E 0B 89 1E 0B 89 8D +R 00 00 00 09 +T 00 01 5D 00 00 00 5B 08 4D 27 0C 16 03 17 07 16 +R 00 00 00 09 82 03 00 04 +T 00 01 6A 01 17 05 AC 00 02 0B +R 00 00 00 09 80 07 00 09 +T 00 01 71 +R 00 00 00 09 +T 00 01 71 1E 10 89 1E 10 89 1E 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 01 7E 00 00 00 5B 08 1F 05 17 03 1E 05 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 8B 05 89 1E 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 01 94 00 00 00 5B 08 1F 09 17 07 1E 05 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 A1 05 89 4B EA 4B E6 4B 42 4B BE 8D +R 00 00 00 09 +T 00 01 AC 00 00 00 5B 08 4B F0 4B 69 4B E4 4B C0 +R 00 00 00 09 82 03 00 01 +T 00 01 B9 89 90 89 8D 00 00 00 5B 08 89 90 89 1E +R 00 00 00 09 82 07 00 06 +T 00 01 C6 0D 89 1E 0D 89 8D 00 00 00 5B 08 1F 09 +R 00 00 00 09 82 09 00 01 +T 00 01 D3 17 07 4B 93 4B 4F 4B 2B 4B C2 1E 09 89 +R 00 00 00 09 +T 00 01 E0 1E 09 89 8D 00 00 00 5B 08 89 90 89 1E +R 00 00 00 09 82 07 00 06 +T 00 01 ED 0D 89 1E 0D 89 8D 00 00 00 5B 08 89 90 +R 00 00 00 09 82 09 00 07 +T 00 01 FA 89 1E 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 02 02 00 00 00 5B 08 1F 07 17 05 +R 00 00 00 09 82 03 00 06 +T 00 02 0B +R 00 00 00 09 +T 00 02 0B 1E 07 16 05 5B 0A 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/sincoshf.sym b/device/lib/stm8-large/sincoshf.sym new file mode 100644 index 0000000..f73efcc --- /dev/null +++ b/device/lib/stm8-large/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 212 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/sinf.asm b/device/lib/stm8-large/sinf.asm new file mode 100644 index 0000000..4dd92df --- /dev/null +++ b/device/lib/stm8-large/sinf.asm @@ -0,0 +1,79 @@ +;-------------------------------------------------------- +; 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, (0x06, sp) + jrne 00102$ + ldw x, (0x04, sp) + sllw x + jrne 00102$ + clrw x + clrw y + jra 00103$ +00102$: +; ../sinf.c: 39: return sincosf(x, 0); + push #0x00 + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf _sincosf + addw sp, #5 +00103$: +; ../sinf.c: 40: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/sinf.lst b/device/lib/stm8-large/sinf.lst new file mode 100644 index 0000000..547c0e7 --- /dev/null +++ b/device/lib/stm8-large/sinf.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 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 06 [ 2] 56 ldw x, (0x06, sp) + 000002 26 0A [ 1] 57 jrne 00102$ + 000004 1E 04 [ 2] 58 ldw x, (0x04, sp) + 000006 58 [ 2] 59 sllw x + 000007 26 05 [ 1] 60 jrne 00102$ + 000009 5F [ 1] 61 clrw x + 00000A 90 5F [ 1] 62 clrw y + 00000C 20 0E [ 2] 63 jra 00103$ + 00000E 64 00102$: + 65 ; ../sinf.c: 39: return sincosf(x, 0); + 00000E 4B 00 [ 1] 66 push #0x00 + 000010 1E 07 [ 2] 67 ldw x, (0x07, sp) + 000012 89 [ 2] 68 pushw x + 000013 1E 07 [ 2] 69 ldw x, (0x07, sp) + 000015 89 [ 2] 70 pushw x + 000016 8Ds00r00r00 [ 5] 71 callf _sincosf + 00001A 5B 05 [ 2] 72 addw sp, #5 + 00001C 73 00103$: + 74 ; ../sinf.c: 40: } + 00001C 87 [ 5] 75 retf + 76 .area CODE + 77 .area CONST + 78 .area INITIALIZER + 79 .area CABS (ABS) diff --git a/device/lib/stm8-large/sinf.rel b/device/lib/stm8-large/sinf.rel new file mode 100644 index 0000000..b08a621 --- /dev/null +++ b/device/lib/stm8-large/sinf.rel @@ -0,0 +1,34 @@ +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 1D 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 06 26 0A 1E 04 58 26 05 5F 90 5F 20 +R 00 00 00 09 +T 00 00 0D 0E +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 4B 00 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 17 00 00 00 5B 05 +R 00 00 00 09 82 03 00 00 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/sinf.sym b/device/lib/stm8-large/sinf.sym new file mode 100644 index 0000000..8d0b330 --- /dev/null +++ b/device/lib/stm8-large/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 1D flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/sinhf.asm b/device/lib/stm8-large/sinhf.asm new file mode 100644 index 0000000..5724c65 --- /dev/null +++ b/device/lib/stm8-large/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, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf _sincoshf + addw sp, #5 +; ../sinhf.c: 39: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/sinhf.lst b/device/lib/stm8-large/sinhf.lst new file mode 100644 index 0000000..5795311 --- /dev/null +++ b/device/lib/stm8-large/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 07 [ 2] 57 ldw x, (0x07, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 07 [ 2] 59 ldw x, (0x07, sp) + 000007 89 [ 2] 60 pushw x + 000008 8Ds00r00r00 [ 5] 61 callf _sincoshf + 00000C 5B 05 [ 2] 62 addw sp, #5 + 63 ; ../sinhf.c: 39: } + 00000E 87 [ 5] 64 retf + 65 .area CODE + 66 .area CONST + 67 .area INITIALIZER + 68 .area CABS (ABS) diff --git a/device/lib/stm8-large/sinhf.rel b/device/lib/stm8-large/sinhf.rel new file mode 100644 index 0000000..5d917ac --- /dev/null +++ b/device/lib/stm8-large/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 F 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 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 05 87 +R 00 00 00 09 82 03 00 01 diff --git a/device/lib/stm8-large/sinhf.sym b/device/lib/stm8-large/sinhf.sym new file mode 100644 index 0000000..cd6e543 --- /dev/null +++ b/device/lib/stm8-large/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 F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/sprintf.asm b/device/lib/stm8-large/sprintf.asm new file mode 100644 index 0000000..342a5fb --- /dev/null +++ b/device/lib/stm8-large/sprintf.asm @@ -0,0 +1,127 @@ +;-------------------------------------------------------- +; 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, (0x07, 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, (0x06, sp) + ld (x), a +; ../sprintf.c: 38: } + addw sp, #2 + retf +; ../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, #4 + ldw y, (0x08, sp) + pushw y + ldw y, (0x08, sp) + pushw y + pushw x + push #<(_put_char_to_string + 0) + push #((_put_char_to_string + 0) >> 8) + push #((_put_char_to_string + 0) >> 16) + callf __print_format + addw sp, #9 +; ../sprintf.c: 45: *buf = 0; + ldw y, (0x04, sp) + clr (y) +; ../sprintf.c: 46: return i; +; ../sprintf.c: 47: } + retf +; ../sprintf.c: 50: sprintf (char *buf, const char *format, ...) +; ----------------------------------------- +; function sprintf +; ----------------------------------------- +_sprintf: +; ../sprintf.c: 55: va_start (arg, format); + ldw x, sp + addw x, #6 + 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, #4 + pushw y + ldw y, (0x08, sp) + pushw y + pushw x + push #<(_put_char_to_string + 0) + push #((_put_char_to_string + 0) >> 8) + push #((_put_char_to_string + 0) >> 16) + callf __print_format + addw sp, #9 +; ../sprintf.c: 57: *buf = 0; + ldw y, (0x04, sp) + clr (y) +; ../sprintf.c: 60: return i; +; ../sprintf.c: 61: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/sprintf.lst b/device/lib/stm8-large/sprintf.lst new file mode 100644 index 0000000..4c52c01 --- /dev/null +++ b/device/lib/stm8-large/sprintf.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 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 07 [ 2] 58 ldw y, (0x07, 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 06 [ 1] 66 ld a, (0x06, sp) + 00000F F7 [ 1] 67 ld (x), a + 68 ; ../sprintf.c: 38: } + 000010 5B 02 [ 2] 69 addw sp, #2 + 000012 87 [ 5] 70 retf + 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 04 [ 2] 78 addw x, #4 + 000017 16 08 [ 2] 79 ldw y, (0x08, sp) + 000019 90 89 [ 2] 80 pushw y + 00001B 16 08 [ 2] 81 ldw y, (0x08, 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 4Bs00 [ 1] 86 push #((_put_char_to_string + 0) >> 16) + 000026 8Ds00r00r00 [ 5] 87 callf __print_format + 00002A 5B 09 [ 2] 88 addw sp, #9 + 89 ; ../sprintf.c: 45: *buf = 0; + 00002C 16 04 [ 2] 90 ldw y, (0x04, sp) + 00002E 90 7F [ 1] 91 clr (y) + 92 ; ../sprintf.c: 46: return i; + 93 ; ../sprintf.c: 47: } + 000030 87 [ 5] 94 retf + 95 ; ../sprintf.c: 50: sprintf (char *buf, const char *format, ...) + 96 ; ----------------------------------------- + 97 ; function sprintf + 98 ; ----------------------------------------- + 000031 99 _sprintf: + 100 ; ../sprintf.c: 55: va_start (arg, format); + 000031 96 [ 1] 101 ldw x, sp + 000032 1C 00 06 [ 2] 102 addw x, #6 + 000035 5C [ 1] 103 incw x + 000036 5C [ 1] 104 incw x + 000037 51 [ 1] 105 exgw x, y + 106 ; ../sprintf.c: 56: i = _print_format (put_char_to_string, &buf, format, arg); + 000038 96 [ 1] 107 ldw x, sp + 000039 1C 00 04 [ 2] 108 addw x, #4 + 00003C 90 89 [ 2] 109 pushw y + 00003E 16 08 [ 2] 110 ldw y, (0x08, sp) + 000040 90 89 [ 2] 111 pushw y + 000042 89 [ 2] 112 pushw x + 000043 4Br00 [ 1] 113 push #<(_put_char_to_string + 0) + 000045 4Bs00 [ 1] 114 push #((_put_char_to_string + 0) >> 8) + 000047 4Bs00 [ 1] 115 push #((_put_char_to_string + 0) >> 16) + 000049 8Ds00r00r00 [ 5] 116 callf __print_format + 00004D 5B 09 [ 2] 117 addw sp, #9 + 118 ; ../sprintf.c: 57: *buf = 0; + 00004F 16 04 [ 2] 119 ldw y, (0x04, sp) + 000051 90 7F [ 1] 120 clr (y) + 121 ; ../sprintf.c: 60: return i; + 122 ; ../sprintf.c: 61: } + 000053 87 [ 5] 123 retf + 124 .area CODE + 125 .area CONST + 126 .area INITIALIZER + 127 .area CABS (ABS) diff --git a/device/lib/stm8-large/sprintf.rel b/device/lib/stm8-large/sprintf.rel new file mode 100644 index 0000000..b36c719 --- /dev/null +++ b/device/lib/stm8-large/sprintf.rel @@ -0,0 +1,45 @@ +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 54 flags 0 addr 0 +S _vsprintf Def000013 +S _sprintf Def000031 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 52 02 16 07 93 FE 1F 01 5C 90 FF 1E 01 +R 00 00 00 09 +T 00 00 0D 7B 06 F7 5B 02 87 +R 00 00 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 96 1C 00 04 16 08 90 89 16 08 90 89 89 +R 00 00 00 09 +T 00 00 20 4B 00 00 00 4B 00 00 00 4B +R 00 00 00 09 F1 09 04 00 09 F1 81 08 00 09 +T 00 00 25 00 00 00 8D 00 00 00 5B 09 16 04 90 7F +R 00 00 00 09 F3 01 03 00 09 82 07 00 00 +T 00 00 30 87 +R 00 00 00 09 +T 00 00 31 +R 00 00 00 09 +T 00 00 31 96 1C 00 06 5C 5C 51 96 1C 00 04 90 89 +R 00 00 00 09 +T 00 00 3E 16 08 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 47 4B 00 00 00 8D 00 00 00 5B 09 16 04 90 +R 00 00 00 09 F3 01 04 00 09 82 08 00 00 +T 00 00 52 7F 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/sprintf.sym b/device/lib/stm8-large/sprintf.sym new file mode 100644 index 0000000..44e387e --- /dev/null +++ b/device/lib/stm8-large/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 000031 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 54 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/sqrtf.asm b/device/lib/stm8-large/sqrtf.asm new file mode 100644 index 0000000..fe3b2cd --- /dev/null +++ b/device/lib/stm8-large/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, (0x10, sp) + jrne 00107$ + ldw x, (0x0e, sp) + sllw x + jrne 00107$ + ldw x, (0x10, sp) + ldw y, (0x0e, sp) + jpf 00111$ +00107$: +; ../sqrtf.c: 43: else if (x==1.0) return 1.0; + clrw x + pushw x + push #0x80 + push #0x3f + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf ___fseq + addw sp, #8 + tnz a + jreq 00104$ + clrw x + ldw y, #0x3f80 + jpf 00111$ +00104$: +; ../sqrtf.c: 44: else if (x<0.0) + clrw x + pushw x + clrw x + pushw x + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf ___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 + jpf 00111$ +00108$: +; ../sqrtf.c: 49: f=frexpf(x, &n); + ldw x, sp + incw x + pushw x + ldw x, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + callf _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 + callf ___fsmul + addw sp, #8 + push #0xa8 + push #0xa9 + push #0xd5 + push #0x3e + pushw x + pushw y + callf ___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 + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + callf ___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 + callf _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 + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x0d, sp) + pushw x + ldw x, (0x0d, sp) + pushw x + callf ___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 + callf ___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 + callf __divsint + addw sp, #4 + pushw x + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + callf _ldexpf + addw sp, #6 +00111$: +; ../sqrtf.c: 61: } + addw sp, #10 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/sqrtf.lst b/device/lib/stm8-large/sqrtf.lst new file mode 100644 index 0000000..8abb11d --- /dev/null +++ b/device/lib/stm8-large/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 10 [ 2] 58 ldw x, (0x10, sp) + 000004 26 0D [ 1] 59 jrne 00107$ + 000006 1E 0E [ 2] 60 ldw x, (0x0e, sp) + 000008 58 [ 2] 61 sllw x + 000009 26 08 [ 1] 62 jrne 00107$ + 00000B 1E 10 [ 2] 63 ldw x, (0x10, sp) + 00000D 16 0E [ 2] 64 ldw y, (0x0e, sp) + 00000F ACs00r01r21 [ 2] 65 jpf 00111$ + 000013 66 00107$: + 67 ; ../sqrtf.c: 43: else if (x==1.0) return 1.0; + 000013 5F [ 1] 68 clrw x + 000014 89 [ 2] 69 pushw x + 000015 4B 80 [ 1] 70 push #0x80 + 000017 4B 3F [ 1] 71 push #0x3f + 000019 1E 14 [ 2] 72 ldw x, (0x14, sp) + 00001B 89 [ 2] 73 pushw x + 00001C 1E 14 [ 2] 74 ldw x, (0x14, sp) + 00001E 89 [ 2] 75 pushw x + 00001F 8Ds00r00r00 [ 5] 76 callf ___fseq + 000023 5B 08 [ 2] 77 addw sp, #8 + 000025 4D [ 1] 78 tnz a + 000026 27 09 [ 1] 79 jreq 00104$ + 000028 5F [ 1] 80 clrw x + 000029 90 AE 3F 80 [ 2] 81 ldw y, #0x3f80 + 00002D ACs00r01r21 [ 2] 82 jpf 00111$ + 000031 83 00104$: + 84 ; ../sqrtf.c: 44: else if (x<0.0) + 000031 5F [ 1] 85 clrw x + 000032 89 [ 2] 86 pushw x + 000033 5F [ 1] 87 clrw x + 000034 89 [ 2] 88 pushw x + 000035 1E 14 [ 2] 89 ldw x, (0x14, sp) + 000037 89 [ 2] 90 pushw x + 000038 1E 14 [ 2] 91 ldw x, (0x14, sp) + 00003A 89 [ 2] 92 pushw x + 00003B 8Ds00r00r00 [ 5] 93 callf ___fslt + 00003F 5B 08 [ 2] 94 addw sp, #8 + 000041 4D [ 1] 95 tnz a + 000042 27 0D [ 1] 96 jreq 00108$ + 97 ; ../sqrtf.c: 46: errno=EDOM; + 000044 AE 00 21 [ 2] 98 ldw x, #0x0021 + 000047 CFu00u00 [ 2] 99 ldw _errno+0, x + 100 ; ../sqrtf.c: 47: return 0.0; + 00004A 5F [ 1] 101 clrw x + 00004B 90 5F [ 1] 102 clrw y + 00004D ACs00r01r21 [ 2] 103 jpf 00111$ + 000051 104 00108$: + 105 ; ../sqrtf.c: 49: f=frexpf(x, &n); + 000051 96 [ 1] 106 ldw x, sp + 000052 5C [ 1] 107 incw x + 000053 89 [ 2] 108 pushw x + 000054 1E 12 [ 2] 109 ldw x, (0x12, sp) + 000056 89 [ 2] 110 pushw x + 000057 1E 12 [ 2] 111 ldw x, (0x12, sp) + 000059 89 [ 2] 112 pushw x + 00005A 8Ds00r00r00 [ 5] 113 callf _frexpf + 00005E 5B 06 [ 2] 114 addw sp, #6 + 000060 1F 05 [ 2] 115 ldw (0x05, sp), x + 000062 17 03 [ 2] 116 ldw (0x03, sp), y + 117 ; ../sqrtf.c: 50: y=0.41731+0.59016*f; /*Educated guess*/ + 000064 1E 05 [ 2] 118 ldw x, (0x05, sp) + 000066 89 [ 2] 119 pushw x + 000067 1E 05 [ 2] 120 ldw x, (0x05, sp) + 000069 89 [ 2] 121 pushw x + 00006A 4B BA [ 1] 122 push #0xba + 00006C 4B 14 [ 1] 123 push #0x14 + 00006E 4B 17 [ 1] 124 push #0x17 + 000070 4B 3F [ 1] 125 push #0x3f + 000072 8Ds00r00r00 [ 5] 126 callf ___fsmul + 000076 5B 08 [ 2] 127 addw sp, #8 + 000078 4B A8 [ 1] 128 push #0xa8 + 00007A 4B A9 [ 1] 129 push #0xa9 + 00007C 4B D5 [ 1] 130 push #0xd5 + 00007E 4B 3E [ 1] 131 push #0x3e + 000080 89 [ 2] 132 pushw x + 000081 90 89 [ 2] 133 pushw y + 000083 8Ds00r00r00 [ 5] 134 callf ___fsadd + 000087 5B 08 [ 2] 135 addw sp, #8 + 000089 1F 09 [ 2] 136 ldw (0x09, sp), x + 00008B 17 07 [ 2] 137 ldw (0x07, sp), y + 138 ; ../sqrtf.c: 52: y+=f/y; + 00008D 1E 09 [ 2] 139 ldw x, (0x09, sp) + 00008F 89 [ 2] 140 pushw x + 000090 1E 09 [ 2] 141 ldw x, (0x09, sp) + 000092 89 [ 2] 142 pushw x + 000093 1E 09 [ 2] 143 ldw x, (0x09, sp) + 000095 89 [ 2] 144 pushw x + 000096 1E 09 [ 2] 145 ldw x, (0x09, sp) + 000098 89 [ 2] 146 pushw x + 000099 8Ds00r00r00 [ 5] 147 callf ___fsdiv + 00009D 5B 08 [ 2] 148 addw sp, #8 + 00009F 89 [ 2] 149 pushw x + 0000A0 90 89 [ 2] 150 pushw y + 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 8Ds00r00r00 [ 5] 155 callf ___fsadd + 0000AC 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*/ + 0000AE 89 [ 2] 158 pushw x + 0000AF 90 89 [ 2] 159 pushw y + 0000B1 4B FE [ 1] 160 push #0xfe + 0000B3 4B FF [ 1] 161 push #0xff + 0000B5 89 [ 2] 162 pushw x + 0000B6 90 89 [ 2] 163 pushw y + 0000B8 8Ds00r00r00 [ 5] 164 callf _ldexpf + 0000BC 5B 06 [ 2] 165 addw sp, #6 + 0000BE 1F 0D [ 2] 166 ldw (0x0d, sp), x + 0000C0 17 0B [ 2] 167 ldw (0x0b, sp), y + 0000C2 90 85 [ 2] 168 popw y + 0000C4 90 89 [ 2] 169 pushw y + 0000C6 1E 09 [ 2] 170 ldw x, (0x09, sp) + 0000C8 89 [ 2] 171 pushw x + 0000C9 1E 09 [ 2] 172 ldw x, (0x09, sp) + 0000CB 89 [ 2] 173 pushw x + 0000CC 8Ds00r00r00 [ 5] 174 callf ___fsdiv + 0000D0 5B 08 [ 2] 175 addw sp, #8 + 0000D2 89 [ 2] 176 pushw x + 0000D3 90 89 [ 2] 177 pushw y + 0000D5 1E 0D [ 2] 178 ldw x, (0x0d, sp) + 0000D7 89 [ 2] 179 pushw x + 0000D8 1E 0D [ 2] 180 ldw x, (0x0d, sp) + 0000DA 89 [ 2] 181 pushw x + 0000DB 8Ds00r00r00 [ 5] 182 callf ___fsadd + 0000DF 5B 08 [ 2] 183 addw sp, #8 + 0000E1 1F 09 [ 2] 184 ldw (0x09, sp), x + 0000E3 17 07 [ 2] 185 ldw (0x07, sp), y + 186 ; ../sqrtf.c: 55: if (n&1) + 0000E5 7B 02 [ 1] 187 ld a, (0x02, sp) + 0000E7 44 [ 1] 188 srl a + 0000E8 24 1D [ 1] 189 jrnc 00110$ + 190 ; ../sqrtf.c: 57: y*=0.7071067812; + 0000EA 1E 09 [ 2] 191 ldw x, (0x09, sp) + 0000EC 89 [ 2] 192 pushw x + 0000ED 1E 09 [ 2] 193 ldw x, (0x09, sp) + 0000EF 89 [ 2] 194 pushw x + 0000F0 4B F3 [ 1] 195 push #0xf3 + 0000F2 4B 04 [ 1] 196 push #0x04 + 0000F4 4B 35 [ 1] 197 push #0x35 + 0000F6 4B 3F [ 1] 198 push #0x3f + 0000F8 8Ds00r00r00 [ 5] 199 callf ___fsmul + 0000FC 5B 08 [ 2] 200 addw sp, #8 + 0000FE 1F 09 [ 2] 201 ldw (0x09, sp), x + 000100 17 07 [ 2] 202 ldw (0x07, sp), y + 203 ; ../sqrtf.c: 58: ++n; + 000102 1E 01 [ 2] 204 ldw x, (0x01, sp) + 000104 5C [ 1] 205 incw x + 000105 1F 01 [ 2] 206 ldw (0x01, sp), x + 000107 207 00110$: + 208 ; ../sqrtf.c: 60: return ldexpf(y, n/2); + 000107 4B 02 [ 1] 209 push #0x02 + 000109 4B 00 [ 1] 210 push #0x00 + 00010B 1E 03 [ 2] 211 ldw x, (0x03, sp) + 00010D 89 [ 2] 212 pushw x + 00010E 8Ds00r00r00 [ 5] 213 callf __divsint + 000112 5B 04 [ 2] 214 addw sp, #4 + 000114 89 [ 2] 215 pushw x + 000115 1E 0B [ 2] 216 ldw x, (0x0b, sp) + 000117 89 [ 2] 217 pushw x + 000118 1E 0B [ 2] 218 ldw x, (0x0b, sp) + 00011A 89 [ 2] 219 pushw x + 00011B 8Ds00r00r00 [ 5] 220 callf _ldexpf + 00011F 5B 06 [ 2] 221 addw sp, #6 + 000121 222 00111$: + 223 ; ../sqrtf.c: 61: } + 000121 5B 0A [ 2] 224 addw sp, #10 + 000123 87 [ 5] 225 retf + 226 .area CODE + 227 .area CONST + 228 .area INITIALIZER + 229 .area CABS (ABS) diff --git a/device/lib/stm8-large/sqrtf.rel b/device/lib/stm8-large/sqrtf.rel new file mode 100644 index 0000000..e0651cd --- /dev/null +++ b/device/lib/stm8-large/sqrtf.rel @@ -0,0 +1,92 @@ +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 124 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 10 26 0D 1E 0E 58 26 08 1E 10 +R 00 00 00 09 +T 00 00 0D 16 0E AC 00 01 21 +R 00 00 00 09 80 06 00 09 +T 00 00 13 +R 00 00 00 09 +T 00 00 13 5F 89 4B 80 4B 3F 1E 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 00 20 00 00 00 5B 08 4D 27 09 5F 90 AE 3F 80 +R 00 00 00 09 82 03 00 02 +T 00 00 2D AC 00 01 21 +R 00 00 00 09 80 04 00 09 +T 00 00 31 +R 00 00 00 09 +T 00 00 31 5F 89 5F 89 1E 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 00 3C 00 00 00 5B 08 4D 27 0D AE 00 21 CF +R 00 00 00 09 82 03 00 03 +T 00 00 48 00 00 5F 90 5F AC 00 01 21 +R 00 00 00 09 12 03 00 01 80 09 00 09 +T 00 00 51 +R 00 00 00 09 +T 00 00 51 96 5C 89 1E 12 89 1E 12 89 8D +R 00 00 00 09 +T 00 00 5B 00 00 00 5B 06 1F 05 17 03 1E 05 89 1E +R 00 00 00 09 82 03 00 07 +T 00 00 68 05 89 4B BA 4B 14 4B 17 4B 3F 8D +R 00 00 00 09 +T 00 00 73 00 00 00 5B 08 4B A8 4B A9 4B D5 4B 3E +R 00 00 00 09 82 03 00 00 +T 00 00 80 89 90 89 8D 00 00 00 5B 08 1F 09 17 07 +R 00 00 00 09 82 07 00 05 +T 00 00 8D 1E 09 89 1E 09 89 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 00 9A 00 00 00 5B 08 89 90 89 1E 0D 89 1E 0D +R 00 00 00 09 82 03 00 08 +T 00 00 A7 89 8D 00 00 00 5B 08 89 90 89 4B FE 4B +R 00 00 00 09 82 05 00 05 +T 00 00 B4 FF 89 90 89 8D 00 00 00 5B 06 1F 0D 17 +R 00 00 00 09 82 08 00 06 +T 00 00 C1 0B 90 85 90 89 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 00 CD 00 00 00 5B 08 89 90 89 1E 0D 89 1E 0D +R 00 00 00 09 82 03 00 08 +T 00 00 DA 89 8D 00 00 00 5B 08 1F 09 17 07 7B 02 +R 00 00 00 09 82 05 00 05 +T 00 00 E7 44 24 1D 1E 09 89 1E 09 89 4B F3 4B 04 +R 00 00 00 09 +T 00 00 F4 4B 35 4B 3F 8D 00 00 00 5B 08 1F 09 17 +R 00 00 00 09 82 08 00 00 +T 00 01 01 07 1E 01 5C 1F 01 +R 00 00 00 09 +T 00 01 07 +R 00 00 00 09 +T 00 01 07 4B 02 4B 00 1E 03 89 8D +R 00 00 00 09 +T 00 01 0F 00 00 00 5B 04 89 1E 0B 89 1E 0B 89 8D +R 00 00 00 09 82 03 00 09 +T 00 01 1C 00 00 00 5B 06 +R 00 00 00 09 82 03 00 06 +T 00 01 21 +R 00 00 00 09 +T 00 01 21 5B 0A 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/sqrtf.sym b/device/lib/stm8-large/sqrtf.sym new file mode 100644 index 0000000..bbce94b --- /dev/null +++ b/device/lib/stm8-large/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 124 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/strdup.asm b/device/lib/stm8-large/strdup.asm new file mode 100644 index 0000000..eb76711 --- /dev/null +++ b/device/lib/stm8-large/strdup.asm @@ -0,0 +1,84 @@ +;-------------------------------------------------------- +; 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, (0x04, sp) + pushw x + callf _strlen + addw sp, #2 + incw x + pushw x + callf _malloc + addw sp, #2 +; ../strdup.c: 36: if (r) + tnzw x + jreq 00102$ +; ../strdup.c: 37: strcpy(r, s); + pushw x + ldw y, (0x06, sp) + pushw y + pushw x + callf _strcpy + addw sp, #4 + popw x +00102$: +; ../strdup.c: 38: return (r); +; ../strdup.c: 39: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/strdup.lst b/device/lib/stm8-large/strdup.lst new file mode 100644 index 0000000..8997409 --- /dev/null +++ b/device/lib/stm8-large/strdup.lst @@ -0,0 +1,84 @@ + 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 04 [ 2] 58 ldw x, (0x04, sp) + 000002 89 [ 2] 59 pushw x + 000003 8Ds00r00r00 [ 5] 60 callf _strlen + 000007 5B 02 [ 2] 61 addw sp, #2 + 000009 5C [ 1] 62 incw x + 00000A 89 [ 2] 63 pushw x + 00000B 8Ds00r00r00 [ 5] 64 callf _malloc + 00000F 5B 02 [ 2] 65 addw sp, #2 + 66 ; ../strdup.c: 36: if (r) + 000011 5D [ 2] 67 tnzw x + 000012 27 0D [ 1] 68 jreq 00102$ + 69 ; ../strdup.c: 37: strcpy(r, s); + 000014 89 [ 2] 70 pushw x + 000015 16 06 [ 2] 71 ldw y, (0x06, sp) + 000017 90 89 [ 2] 72 pushw y + 000019 89 [ 2] 73 pushw x + 00001A 8Ds00r00r00 [ 5] 74 callf _strcpy + 00001E 5B 04 [ 2] 75 addw sp, #4 + 000020 85 [ 2] 76 popw x + 000021 77 00102$: + 78 ; ../strdup.c: 38: return (r); + 79 ; ../strdup.c: 39: } + 000021 87 [ 5] 80 retf + 81 .area CODE + 82 .area CONST + 83 .area INITIALIZER + 84 .area CABS (ABS) diff --git a/device/lib/stm8-large/strdup.rel b/device/lib/stm8-large/strdup.rel new file mode 100644 index 0000000..2cb3a0d --- /dev/null +++ b/device/lib/stm8-large/strdup.rel @@ -0,0 +1,32 @@ +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 22 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 04 89 8D 00 00 00 5B 02 5C 89 8D +R 00 00 00 09 82 07 00 03 +T 00 00 0C 00 00 00 5B 02 5D 27 0D 89 16 06 90 89 +R 00 00 00 09 82 03 00 01 +T 00 00 19 89 8D 00 00 00 5B 04 85 +R 00 00 00 09 82 05 00 00 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/strdup.sym b/device/lib/stm8-large/strdup.sym new file mode 100644 index 0000000..110011b --- /dev/null +++ b/device/lib/stm8-large/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 22 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/strndup.asm b/device/lib/stm8-large/strndup.asm new file mode 100644 index 0000000..3903cf5 --- /dev/null +++ b/device/lib/stm8-large/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, (0x08, sp) + pushw x + callf _strlen + addw sp, #2 +; ../strndup.c: 36: if (l > n) + ldw (0x01, sp), x + cpw x, (0x0a, sp) + jrule 00102$ +; ../strndup.c: 37: l = n; + ldw y, (0x0a, sp) + ldw (0x01, sp), y +00102$: +; ../strndup.c: 38: char *r = malloc (l + 1); + ldw x, (0x01, sp) + incw x + pushw x + callf _malloc + addw sp, #2 +; ../strndup.c: 39: if (r) + ldw (0x03, sp), x + jreq 00104$ +; ../strndup.c: 41: memcpy (r, s, l); + ldw y, (0x08, sp) + ldw x, (0x03, sp) + ld a, (0x02, sp) + push a + ld a, (0x02, sp) + push a + pushw y + pushw x + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/strndup.lst b/device/lib/stm8-large/strndup.lst new file mode 100644 index 0000000..1cd441d --- /dev/null +++ b/device/lib/stm8-large/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 08 [ 2] 59 ldw x, (0x08, sp) + 000004 89 [ 2] 60 pushw x + 000005 8Ds00r00r00 [ 5] 61 callf _strlen + 000009 5B 02 [ 2] 62 addw sp, #2 + 63 ; ../strndup.c: 36: if (l > n) + 00000B 1F 01 [ 2] 64 ldw (0x01, sp), x + 00000D 13 0A [ 2] 65 cpw x, (0x0a, sp) + 00000F 23 04 [ 2] 66 jrule 00102$ + 67 ; ../strndup.c: 37: l = n; + 000011 16 0A [ 2] 68 ldw y, (0x0a, sp) + 000013 17 01 [ 2] 69 ldw (0x01, sp), y + 000015 70 00102$: + 71 ; ../strndup.c: 38: char *r = malloc (l + 1); + 000015 1E 01 [ 2] 72 ldw x, (0x01, sp) + 000017 5C [ 1] 73 incw x + 000018 89 [ 2] 74 pushw x + 000019 8Ds00r00r00 [ 5] 75 callf _malloc + 00001D 5B 02 [ 2] 76 addw sp, #2 + 77 ; ../strndup.c: 39: if (r) + 00001F 1F 03 [ 2] 78 ldw (0x03, sp), x + 000021 27 19 [ 1] 79 jreq 00104$ + 80 ; ../strndup.c: 41: memcpy (r, s, l); + 000023 16 08 [ 2] 81 ldw y, (0x08, sp) + 000025 1E 03 [ 2] 82 ldw x, (0x03, sp) + 000027 7B 02 [ 1] 83 ld a, (0x02, sp) + 000029 88 [ 1] 84 push a + 00002A 7B 02 [ 1] 85 ld a, (0x02, sp) + 00002C 88 [ 1] 86 push a + 00002D 90 89 [ 2] 87 pushw y + 00002F 89 [ 2] 88 pushw x + 000030 8Ds00r00r00 [ 5] 89 callf ___memcpy + 000034 5B 06 [ 2] 90 addw sp, #6 + 91 ; ../strndup.c: 42: r[l] = 0; + 000036 1E 03 [ 2] 92 ldw x, (0x03, sp) + 000038 72 FB 01 [ 2] 93 addw x, (0x01, sp) + 00003B 7F [ 1] 94 clr (x) + 00003C 95 00104$: + 96 ; ../strndup.c: 44: return (r); + 00003C 1E 03 [ 2] 97 ldw x, (0x03, sp) + 98 ; ../strndup.c: 45: } + 00003E 5B 04 [ 2] 99 addw sp, #4 + 000040 87 [ 5] 100 retf + 101 .area CODE + 102 .area CONST + 103 .area INITIALIZER + 104 .area CABS (ABS) diff --git a/device/lib/stm8-large/strndup.rel b/device/lib/stm8-large/strndup.rel new file mode 100644 index 0000000..b73f022 --- /dev/null +++ b/device/lib/stm8-large/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 41 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 08 89 8D 00 00 00 5B 02 1F 01 +R 00 00 00 09 82 09 00 03 +T 00 00 0D 13 0A 23 04 16 0A 17 01 +R 00 00 00 09 +T 00 00 15 +R 00 00 00 09 +T 00 00 15 1E 01 5C 89 8D 00 00 00 5B 02 1F 03 27 +R 00 00 00 09 82 08 00 00 +T 00 00 22 19 16 08 1E 03 7B 02 88 7B 02 88 90 89 +R 00 00 00 09 +T 00 00 2F 89 8D 00 00 00 5B 06 1E 03 72 FB 01 7F +R 00 00 00 09 82 05 00 02 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 1E 03 5B 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/strndup.sym b/device/lib/stm8-large/strndup.sym new file mode 100644 index 0000000..6da76c0 --- /dev/null +++ b/device/lib/stm8-large/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 41 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/strtol.asm b/device/lib/stm8-large/strtol.asm new file mode 100644 index 0000000..6ddf19e --- /dev/null +++ b/device/lib/stm8-large/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, (0x0f, 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, (0x11, 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, (0x11, sp) + jreq 00108$ +; ../strtol.c: 62: *endptr = nptr; + ldw x, (0x06, sp) + ldw y, (0x0f, sp) + ldw (x), y +00108$: +; ../strtol.c: 63: return (0); + clrw x + clrw y + jpf 00129$ +00110$: +; ../strtol.c: 66: u = strtoul(ptr, &rptr, base); + ldw x, sp + incw x + ldw y, (0x13, sp) + pushw y + pushw x + ldw x, (0x07, sp) + pushw x + callf _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, (0x11, sp) + jreq 00115$ +; ../strtol.c: 72: *endptr = nptr; + ldw x, (0x06, sp) + ldw y, (0x0f, sp) + ldw (x), y +00115$: +; ../strtol.c: 73: return (0); + clrw x + clrw y + jra 00129$ +00117$: +; ../strtol.c: 76: if (endptr) + ldw x, (0x11, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/strtol.lst b/device/lib/stm8-large/strtol.lst new file mode 100644 index 0000000..7f0bef8 --- /dev/null +++ b/device/lib/stm8-large/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 0F [ 2] 57 ldw y, (0x0f, 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 11 [ 2] 93 ldw y, (0x11, 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 26 [ 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 10 [ 1] 112 jrne 00110$ + 000048 113 00109$: + 114 ; ../strtol.c: 61: if (endptr) + 000048 1E 11 [ 2] 115 ldw x, (0x11, 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 0F [ 2] 119 ldw y, (0x0f, 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 ACs00r00rDC [ 2] 125 jpf 00129$ + 000058 126 00110$: + 127 ; ../strtol.c: 66: u = strtoul(ptr, &rptr, base); + 000058 96 [ 1] 128 ldw x, sp + 000059 5C [ 1] 129 incw x + 00005A 16 13 [ 2] 130 ldw y, (0x13, sp) + 00005C 90 89 [ 2] 131 pushw y + 00005E 89 [ 2] 132 pushw x + 00005F 1E 07 [ 2] 133 ldw x, (0x07, sp) + 000061 89 [ 2] 134 pushw x + 000062 8Ds00r00r00 [ 5] 135 callf _strtoul + 000066 5B 06 [ 2] 136 addw sp, #6 + 000068 1F 0A [ 2] 137 ldw (0x0a, sp), x + 00006A 17 08 [ 2] 138 ldw (0x08, sp), y + 139 ; ../strtol.c: 69: if (rptr == ptr) + 00006C 1E 01 [ 2] 140 ldw x, (0x01, sp) + 00006E 13 03 [ 2] 141 cpw x, (0x03, sp) + 000070 26 0E [ 1] 142 jrne 00117$ + 143 ; ../strtol.c: 71: if (endptr) + 000072 1E 11 [ 2] 144 ldw x, (0x11, sp) + 000074 27 05 [ 1] 145 jreq 00115$ + 146 ; ../strtol.c: 72: *endptr = nptr; + 000076 1E 06 [ 2] 147 ldw x, (0x06, sp) + 000078 16 0F [ 2] 148 ldw y, (0x0f, sp) + 00007A FF [ 2] 149 ldw (x), y + 00007B 150 00115$: + 151 ; ../strtol.c: 73: return (0); + 00007B 5F [ 1] 152 clrw x + 00007C 90 5F [ 1] 153 clrw y + 00007E 20 5C [ 2] 154 jra 00129$ + 000080 155 00117$: + 156 ; ../strtol.c: 76: if (endptr) + 000080 1E 11 [ 2] 157 ldw x, (0x11, sp) + 000082 27 05 [ 1] 158 jreq 00119$ + 159 ; ../strtol.c: 77: *endptr = rptr; + 000084 1E 06 [ 2] 160 ldw x, (0x06, sp) + 000086 16 01 [ 2] 161 ldw y, (0x01, sp) + 000088 FF [ 2] 162 ldw (x), y + 000089 163 00119$: + 164 ; ../strtol.c: 80: if (!neg && u > LONG_MAX) + 000089 0D 05 [ 1] 165 tnz (0x05, sp) + 00008B 26 1C [ 1] 166 jrne 00124$ + 00008D 5F [ 1] 167 clrw x + 00008E 5A [ 2] 168 decw x + 00008F 13 0A [ 2] 169 cpw x, (0x0a, sp) + 000091 A6 FF [ 1] 170 ld a, #0xff + 000093 12 09 [ 1] 171 sbc a, (0x09, sp) + 000095 A6 7F [ 1] 172 ld a, #0x7f + 000097 12 08 [ 1] 173 sbc a, (0x08, sp) + 000099 24 0E [ 1] 174 jrnc 00124$ + 175 ; ../strtol.c: 82: errno = ERANGE; + 00009B AE 00 22 [ 2] 176 ldw x, #0x0022 + 00009E CFu00u00 [ 2] 177 ldw _errno+0, x + 178 ; ../strtol.c: 83: return (LONG_MAX); + 0000A1 5F [ 1] 179 clrw x + 0000A2 5A [ 2] 180 decw x + 0000A3 90 AE 7F FF [ 2] 181 ldw y, #0x7fff + 0000A7 20 33 [ 2] 182 jra 00129$ + 0000A9 183 00124$: + 184 ; ../strtol.c: 85: else if (neg && u > -LONG_MIN) + 0000A9 0D 05 [ 1] 185 tnz (0x05, sp) + 0000AB 27 19 [ 1] 186 jreq 00125$ + 0000AD 5F [ 1] 187 clrw x + 0000AE 13 0A [ 2] 188 cpw x, (0x0a, sp) + 0000B0 4F [ 1] 189 clr a + 0000B1 12 09 [ 1] 190 sbc a, (0x09, sp) + 0000B3 A6 80 [ 1] 191 ld a, #0x80 + 0000B5 12 08 [ 1] 192 sbc a, (0x08, sp) + 0000B7 24 0D [ 1] 193 jrnc 00125$ + 194 ; ../strtol.c: 87: errno = ERANGE; + 0000B9 AE 00 22 [ 2] 195 ldw x, #0x0022 + 0000BC CFu00u00 [ 2] 196 ldw _errno+0, x + 197 ; ../strtol.c: 88: return (LONG_MIN); + 0000BF 5F [ 1] 198 clrw x + 0000C0 90 AE 80 00 [ 2] 199 ldw y, #0x8000 + 0000C4 20 16 [ 2] 200 jra 00129$ + 0000C6 201 00125$: + 202 ; ../strtol.c: 91: return (neg ? -u : u); + 0000C6 0D 05 [ 1] 203 tnz (0x05, sp) + 0000C8 27 0E [ 1] 204 jreq 00137$ + 0000CA 16 0A [ 2] 205 ldw y, (0x0a, sp) + 0000CC 90 50 [ 2] 206 negw y + 0000CE 1E 08 [ 2] 207 ldw x, (0x08, sp) + 0000D0 24 01 [ 1] 208 jrnc 00258$ + 0000D2 5C [ 1] 209 incw x + 0000D3 210 00258$: + 0000D3 50 [ 2] 211 negw x + 0000D4 17 0A [ 2] 212 ldw (0x0a, sp), y + 0000D6 1F 08 [ 2] 213 ldw (0x08, sp), x + 0000D8 214 00137$: + 0000D8 1E 0A [ 2] 215 ldw x, (0x0a, sp) + 0000DA 16 08 [ 2] 216 ldw y, (0x08, sp) + 0000DC 217 00129$: + 218 ; ../strtol.c: 92: } + 0000DC 5B 0B [ 2] 219 addw sp, #11 + 0000DE 87 [ 5] 220 retf + 221 .area CODE + 222 .area CONST + 223 .area INITIALIZER + 224 .area CABS (ABS) diff --git a/device/lib/stm8-large/strtol.rel b/device/lib/stm8-large/strtol.rel new file mode 100644 index 0000000..03f3b4e --- /dev/null +++ b/device/lib/stm8-large/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 DF 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 0F +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 11 17 06 0D 05 27 26 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 10 +R 00 00 00 09 +T 00 00 48 +R 00 00 00 09 +T 00 00 48 1E 11 27 05 1E 06 16 0F FF +R 00 00 00 09 +T 00 00 51 +R 00 00 00 09 +T 00 00 51 5F 90 5F AC 00 00 DC +R 00 00 00 09 80 07 00 09 +T 00 00 58 +R 00 00 00 09 +T 00 00 58 96 5C 16 13 90 89 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 63 00 00 00 5B 06 1F 0A 17 08 1E 01 13 03 +R 00 00 00 09 82 03 00 02 +T 00 00 70 26 0E 1E 11 27 05 1E 06 16 0F FF +R 00 00 00 09 +T 00 00 7B +R 00 00 00 09 +T 00 00 7B 5F 90 5F 20 5C +R 00 00 00 09 +T 00 00 80 +R 00 00 00 09 +T 00 00 80 1E 11 27 05 1E 06 16 01 FF +R 00 00 00 09 +T 00 00 89 +R 00 00 00 09 +T 00 00 89 0D 05 26 1C 5F 5A 13 0A A6 FF 12 09 A6 +R 00 00 00 09 +T 00 00 96 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 A3 90 AE 7F FF 20 33 +R 00 00 00 09 +T 00 00 A9 +R 00 00 00 09 +T 00 00 A9 0D 05 27 19 5F 13 0A 4F 12 09 A6 80 12 +R 00 00 00 09 +T 00 00 B6 08 24 0D AE 00 22 CF 00 00 5F 90 AE +R 00 00 00 09 12 0A 00 00 +T 00 00 C2 80 00 20 16 +R 00 00 00 09 +T 00 00 C6 +R 00 00 00 09 +T 00 00 C6 0D 05 27 0E 16 0A 90 50 1E 08 24 01 5C +R 00 00 00 09 +T 00 00 D3 +R 00 00 00 09 +T 00 00 D3 50 17 0A 1F 08 +R 00 00 00 09 +T 00 00 D8 +R 00 00 00 09 +T 00 00 D8 1E 0A 16 08 +R 00 00 00 09 +T 00 00 DC +R 00 00 00 09 +T 00 00 DC 5B 0B 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/strtol.sym b/device/lib/stm8-large/strtol.sym new file mode 100644 index 0000000..bd79def --- /dev/null +++ b/device/lib/stm8-large/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 DF flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/strtoul.asm b/device/lib/stm8-large/strtoul.asm new file mode 100644 index 0000000..1b4c642 --- /dev/null +++ b/device/lib/stm8-large/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, (0x04, sp) + ld xl, a + cp a, #0x30 + jrc 00110$ + ld a, (0x04, 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, (0x04, 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, (0x04, 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 + jra 00115$ +00111$: +; ../strtoul.c: 50: if (v >= base) + cp a, (0x05, sp) + jrc 00114$ +; ../strtoul.c: 51: return (-1); + ld a, #0xff +; ../strtoul.c: 53: return (v); +00114$: +00115$: +; ../strtoul.c: 54: } + retf +; ../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, (0x18, 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, (0x1c, 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 + callf _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 + callf _strncmp + addw sp, #6 + tnzw x + jrne 00111$ +00110$: +; ../strtoul.c: 80: base = 16; + ldw x, #0x0010 + ldw (0x1c, 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 (0x1c, 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 (0x1c, sp), x + jra 00120$ +00119$: +; ../strtoul.c: 92: else if (base == 16 && (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2))) + ldw x, (0x1c, 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 + callf _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 + callf _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, (0x1d, 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 + callf __isdigit + addw sp, #2 +; ../strtoul.c: 100: *endptr = (char*)nptr; + ldw y, (0x1a, sp) + ldw (0x08, sp), y +; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0) + tnz a + jrpl 00124$ +; ../strtoul.c: 99: if (endptr) + ldw x, (0x1a, sp) + jreq 00122$ +; ../strtoul.c: 100: *endptr = (char*)nptr; + ldw x, (0x08, sp) + ldw y, (0x18, sp) + ldw (x), y +00122$: +; ../strtoul.c: 101: return (0); + clrw x + clrw y + jpf 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 + callf __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, (0x1c, 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 + callf __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, (0x1a, 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 + retf + .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-large/strtoul.lst b/device/lib/stm8-large/strtoul.lst new file mode 100644 index 0000000..0758d99 --- /dev/null +++ b/device/lib/stm8-large/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 04 [ 1] 57 ld a, (0x04, 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 04 [ 1] 61 ld a, (0x04, 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 22 [ 2] 67 jra 00111$ + 000012 68 00110$: + 69 ; ../strtoul.c: 43: else if (c >= 'a' && c <='z') + 000012 7B 04 [ 1] 70 ld a, (0x04, 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 13 [ 2] 78 jra 00111$ + 000021 79 00106$: + 80 ; ../strtoul.c: 45: else if (c >= 'A' && c <='Z') + 000021 7B 04 [ 1] 81 ld a, (0x04, 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 04 [ 2] 89 jra 00111$ + 000030 90 00102$: + 91 ; ../strtoul.c: 48: return (-1); + 000030 A6 FF [ 1] 92 ld a, #0xff + 000032 20 06 [ 2] 93 jra 00115$ + 000034 94 00111$: + 95 ; ../strtoul.c: 50: if (v >= base) + 000034 11 05 [ 1] 96 cp a, (0x05, sp) + 000036 25 02 [ 1] 97 jrc 00114$ + 98 ; ../strtoul.c: 51: return (-1); + 000038 A6 FF [ 1] 99 ld a, #0xff + 100 ; ../strtoul.c: 53: return (v); + 00003A 101 00114$: + 00003A 102 00115$: + 103 ; ../strtoul.c: 54: } + 00003A 87 [ 5] 104 retf + 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 18 [ 2] 112 ldw y, (0x18, 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 1C [ 2] 156 ldw x, (0x1c, sp) + 00006E 26 4D [ 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 8Ds00r00r00 [ 5] 165 callf _strncmp + 00007F 5B 06 [ 2] 166 addw sp, #6 + 000081 5D [ 2] 167 tnzw x + 000082 27 14 [ 1] 168 jreq 00110$ + 000084 4B 02 [ 1] 169 push #0x02 + 000086 4B 00 [ 1] 170 push #0x00 + 000088 4Br03 [ 1] 171 push #<(___str_1 + 0) + 00008A 4Bs00 [ 1] 172 push #((___str_1 + 0) >> 8) + 00008C 1E 17 [ 2] 173 ldw x, (0x17, sp) + 00008E 89 [ 2] 174 pushw x + 00008F 8Ds00r00r00 [ 5] 175 callf _strncmp + 000093 5B 06 [ 2] 176 addw sp, #6 + 000095 5D [ 2] 177 tnzw x + 000096 26 0B [ 1] 178 jrne 00111$ + 000098 179 00110$: + 180 ; ../strtoul.c: 80: base = 16; + 000098 AE 00 10 [ 2] 181 ldw x, #0x0010 + 00009B 1F 1C [ 2] 182 ldw (0x1c, sp), x + 183 ; ../strtoul.c: 81: ptr += 2; + 00009D 16 11 [ 2] 184 ldw y, (0x11, sp) + 00009F 17 13 [ 2] 185 ldw (0x13, sp), y + 0000A1 20 4D [ 2] 186 jra 00120$ + 0000A3 187 00111$: + 188 ; ../strtoul.c: 83: else if (*ptr == '0') + 0000A3 1E 13 [ 2] 189 ldw x, (0x13, sp) + 0000A5 F6 [ 1] 190 ld a, (x) + 0000A6 A1 30 [ 1] 191 cp a, #0x30 + 0000A8 26 0C [ 1] 192 jrne 00108$ + 193 ; ../strtoul.c: 85: base = 8; + 0000AA AE 00 08 [ 2] 194 ldw x, #0x0008 + 0000AD 1F 1C [ 2] 195 ldw (0x1c, sp), x + 196 ; ../strtoul.c: 86: ptr++; + 0000AF 1E 13 [ 2] 197 ldw x, (0x13, sp) + 0000B1 5C [ 1] 198 incw x + 0000B2 1F 13 [ 2] 199 ldw (0x13, sp), x + 0000B4 20 3A [ 2] 200 jra 00120$ + 0000B6 201 00108$: + 202 ; ../strtoul.c: 89: base = 10; + 0000B6 AE 00 0A [ 2] 203 ldw x, #0x000a + 0000B9 1F 1C [ 2] 204 ldw (0x1c, sp), x + 0000BB 20 33 [ 2] 205 jra 00120$ + 0000BD 206 00119$: + 207 ; ../strtoul.c: 92: else if (base == 16 && (!strncmp (ptr, "0x", 2) || !strncmp (ptr, "0X", 2))) + 0000BD 1E 1C [ 2] 208 ldw x, (0x1c, sp) + 0000BF A3 00 10 [ 2] 209 cpw x, #0x0010 + 0000C2 26 2C [ 1] 210 jrne 00120$ + 0000C4 4B 02 [ 1] 211 push #0x02 + 0000C6 4B 00 [ 1] 212 push #0x00 + 0000C8 4Br00 [ 1] 213 push #<(___str_0 + 0) + 0000CA 4Bs00 [ 1] 214 push #((___str_0 + 0) >> 8) + 0000CC 1E 17 [ 2] 215 ldw x, (0x17, sp) + 0000CE 89 [ 2] 216 pushw x + 0000CF 8Ds00r00r00 [ 5] 217 callf _strncmp + 0000D3 5B 06 [ 2] 218 addw sp, #6 + 0000D5 5D [ 2] 219 tnzw x + 0000D6 27 14 [ 1] 220 jreq 00114$ + 0000D8 4B 02 [ 1] 221 push #0x02 + 0000DA 4B 00 [ 1] 222 push #0x00 + 0000DC 4Br03 [ 1] 223 push #<(___str_1 + 0) + 0000DE 4Bs00 [ 1] 224 push #((___str_1 + 0) >> 8) + 0000E0 1E 17 [ 2] 225 ldw x, (0x17, sp) + 0000E2 89 [ 2] 226 pushw x + 0000E3 8Ds00r00r00 [ 5] 227 callf _strncmp + 0000E7 5B 06 [ 2] 228 addw sp, #6 + 0000E9 5D [ 2] 229 tnzw x + 0000EA 26 04 [ 1] 230 jrne 00120$ + 0000EC 231 00114$: + 232 ; ../strtoul.c: 93: ptr += 2; + 0000EC 16 11 [ 2] 233 ldw y, (0x11, sp) + 0000EE 17 13 [ 2] 234 ldw (0x13, sp), y + 0000F0 235 00120$: + 236 ; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0) + 0000F0 7B 1D [ 1] 237 ld a, (0x1d, sp) + 0000F2 6B 07 [ 1] 238 ld (0x07, sp), a + 0000F4 1E 13 [ 2] 239 ldw x, (0x13, sp) + 0000F6 F6 [ 1] 240 ld a, (x) + 0000F7 97 [ 1] 241 ld xl, a + 0000F8 7B 07 [ 1] 242 ld a, (0x07, sp) + 0000FA 88 [ 1] 243 push a + 0000FB 9F [ 1] 244 ld a, xl + 0000FC 88 [ 1] 245 push a + 0000FD 8Ds00r00r00 [ 5] 246 callf __isdigit + 000101 5B 02 [ 2] 247 addw sp, #2 + 248 ; ../strtoul.c: 100: *endptr = (char*)nptr; + 000103 16 1A [ 2] 249 ldw y, (0x1a, sp) + 000105 17 08 [ 2] 250 ldw (0x08, sp), y + 251 ; ../strtoul.c: 97: if (_isdigit (*ptr, base) < 0) + 000107 4D [ 1] 252 tnz a + 000108 2A 10 [ 1] 253 jrpl 00124$ + 254 ; ../strtoul.c: 99: if (endptr) + 00010A 1E 1A [ 2] 255 ldw x, (0x1a, sp) + 00010C 27 05 [ 1] 256 jreq 00122$ + 257 ; ../strtoul.c: 100: *endptr = (char*)nptr; + 00010E 1E 08 [ 2] 258 ldw x, (0x08, sp) + 000110 16 18 [ 2] 259 ldw y, (0x18, sp) + 000112 FF [ 2] 260 ldw (x), y + 000113 261 00122$: + 262 ; ../strtoul.c: 101: return (0); + 000113 5F [ 1] 263 clrw x + 000114 90 5F [ 1] 264 clrw y + 000116 ACs00r01rCC [ 2] 265 jpf 00137$ + 00011A 266 00124$: + 267 ; ../strtoul.c: 104: for (ret = 0;; ptr++) + 00011A 5F [ 1] 268 clrw x + 00011B 1F 11 [ 2] 269 ldw (0x11, sp), x + 00011D 1F 0F [ 2] 270 ldw (0x0f, sp), x + 00011F 271 00135$: + 272 ; ../strtoul.c: 107: signed char digit = _isdigit (*ptr, base); + 00011F 1E 13 [ 2] 273 ldw x, (0x13, sp) + 000121 F6 [ 1] 274 ld a, (x) + 000122 97 [ 1] 275 ld xl, a + 000123 7B 07 [ 1] 276 ld a, (0x07, sp) + 000125 88 [ 1] 277 push a + 000126 9F [ 1] 278 ld a, xl + 000127 88 [ 1] 279 push a + 000128 8Ds00r00r00 [ 5] 280 callf __isdigit + 00012C 5B 02 [ 2] 281 addw sp, #2 + 282 ; ../strtoul.c: 109: if (digit < 0) + 00012E 6B 0A [ 1] 283 ld (0x0a, sp), a + 000130 2B 61 [ 1] 284 jrmi 00129$ + 285 ; ../strtoul.c: 112: oldret = ret; + 000132 16 11 [ 2] 286 ldw y, (0x11, sp) + 000134 17 0D [ 2] 287 ldw (0x0d, sp), y + 000136 16 0F [ 2] 288 ldw y, (0x0f, sp) + 000138 17 0B [ 2] 289 ldw (0x0b, sp), y + 290 ; ../strtoul.c: 113: ret *= base; + 00013A 16 1C [ 2] 291 ldw y, (0x1c, sp) + 00013C 5F [ 1] 292 clrw x + 00013D 90 5D [ 2] 293 tnzw y + 00013F 2A 01 [ 1] 294 jrpl 00261$ + 000141 5A [ 2] 295 decw x + 000142 296 00261$: + 000142 90 89 [ 2] 297 pushw y + 000144 89 [ 2] 298 pushw x + 000145 1E 15 [ 2] 299 ldw x, (0x15, sp) + 000147 89 [ 2] 300 pushw x + 000148 1E 15 [ 2] 301 ldw x, (0x15, sp) + 00014A 89 [ 2] 302 pushw x + 00014B 8Ds00r00r00 [ 5] 303 callf __mullong + 00014F 5B 08 [ 2] 304 addw sp, #8 + 000151 1F 11 [ 2] 305 ldw (0x11, sp), x + 000153 17 0F [ 2] 306 ldw (0x0f, sp), y + 307 ; ../strtoul.c: 114: if (ret < oldret) + 000155 1E 11 [ 2] 308 ldw x, (0x11, sp) + 000157 13 0D [ 2] 309 cpw x, (0x0d, sp) + 000159 7B 10 [ 1] 310 ld a, (0x10, sp) + 00015B 12 0C [ 1] 311 sbc a, (0x0c, sp) + 00015D 7B 0F [ 1] 312 ld a, (0x0f, sp) + 00015F 12 0B [ 1] 313 sbc a, (0x0b, sp) + 000161 24 04 [ 1] 314 jrnc 00128$ + 315 ; ../strtoul.c: 115: range_error = true; + 000163 A6 01 [ 1] 316 ld a, #0x01 + 000165 6B 05 [ 1] 317 ld (0x05, sp), a + 000167 318 00128$: + 319 ; ../strtoul.c: 117: ret += (unsigned char)digit; + 000167 7B 0A [ 1] 320 ld a, (0x0a, sp) + 000169 6B 04 [ 1] 321 ld (0x04, sp), a + 00016B 0F 03 [ 1] 322 clr (0x03, sp) + 00016D 0F 02 [ 1] 323 clr (0x02, sp) + 00016F 0F 01 [ 1] 324 clr (0x01, sp) + 000171 1E 11 [ 2] 325 ldw x, (0x11, sp) + 000173 72 FB 03 [ 2] 326 addw x, (0x03, sp) + 000176 1F 0C [ 2] 327 ldw (0x0c, sp), x + 000178 7B 10 [ 1] 328 ld a, (0x10, sp) + 00017A 19 02 [ 1] 329 adc a, (0x02, sp) + 00017C 6B 0B [ 1] 330 ld (0x0b, sp), a + 00017E 7B 0F [ 1] 331 ld a, (0x0f, sp) + 000180 19 01 [ 1] 332 adc a, (0x01, sp) + 000182 6B 0A [ 1] 333 ld (0x0a, sp), a + 000184 16 0C [ 2] 334 ldw y, (0x0c, sp) + 000186 17 11 [ 2] 335 ldw (0x11, sp), y + 000188 16 0A [ 2] 336 ldw y, (0x0a, sp) + 00018A 17 0F [ 2] 337 ldw (0x0f, sp), y + 338 ; ../strtoul.c: 104: for (ret = 0;; ptr++) + 00018C 1E 13 [ 2] 339 ldw x, (0x13, sp) + 00018E 5C [ 1] 340 incw x + 00018F 1F 13 [ 2] 341 ldw (0x13, sp), x + 000191 20 8C [ 2] 342 jra 00135$ + 000193 343 00129$: + 344 ; ../strtoul.c: 120: if (endptr) + 000193 1E 1A [ 2] 345 ldw x, (0x1a, sp) + 000195 27 05 [ 1] 346 jreq 00131$ + 347 ; ../strtoul.c: 121: *endptr = (char*)ptr; + 000197 1E 08 [ 2] 348 ldw x, (0x08, sp) + 000199 16 13 [ 2] 349 ldw y, (0x13, sp) + 00019B FF [ 2] 350 ldw (x), y + 00019C 351 00131$: + 352 ; ../strtoul.c: 123: if (range_error) + 00019C 0D 05 [ 1] 353 tnz (0x05, sp) + 00019E 27 0C [ 1] 354 jreq 00133$ + 355 ; ../strtoul.c: 125: errno = ERANGE; + 0001A0 AE 00 22 [ 2] 356 ldw x, #0x0022 + 0001A3 CFu00u00 [ 2] 357 ldw _errno+0, x + 358 ; ../strtoul.c: 126: return (ULONG_MAX); + 0001A6 5F [ 1] 359 clrw x + 0001A7 5A [ 2] 360 decw x + 0001A8 90 93 [ 1] 361 ldw y, x + 0001AA 20 20 [ 2] 362 jra 00137$ + 0001AC 363 00133$: + 364 ; ../strtoul.c: 129: return (neg ? -ret : ret); + 0001AC 0D 06 [ 1] 365 tnz (0x06, sp) + 0001AE 27 10 [ 1] 366 jreq 00142$ + 0001B0 16 11 [ 2] 367 ldw y, (0x11, sp) + 0001B2 90 50 [ 2] 368 negw y + 0001B4 1E 0F [ 2] 369 ldw x, (0x0f, sp) + 0001B6 24 01 [ 1] 370 jrnc 00267$ + 0001B8 5C [ 1] 371 incw x + 0001B9 372 00267$: + 0001B9 50 [ 2] 373 negw x + 0001BA 17 0C [ 2] 374 ldw (0x0c, sp), y + 0001BC 1F 0A [ 2] 375 ldw (0x0a, sp), x + 0001BE 20 08 [ 2] 376 jra 00143$ + 0001C0 377 00142$: + 0001C0 16 11 [ 2] 378 ldw y, (0x11, sp) + 0001C2 17 0C [ 2] 379 ldw (0x0c, sp), y + 0001C4 16 0F [ 2] 380 ldw y, (0x0f, sp) + 0001C6 17 0A [ 2] 381 ldw (0x0a, sp), y + 0001C8 382 00143$: + 0001C8 1E 0C [ 2] 383 ldw x, (0x0c, sp) + 0001CA 16 0A [ 2] 384 ldw y, (0x0a, sp) + 0001CC 385 00137$: + 386 ; ../strtoul.c: 130: } + 0001CC 5B 14 [ 2] 387 addw sp, #20 + 0001CE 87 [ 5] 388 retf + 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-large/strtoul.rel b/device/lib/stm8-large/strtoul.rel new file mode 100644 index 0000000..18fa286 --- /dev/null +++ b/device/lib/stm8-large/strtoul.rel @@ -0,0 +1,198 @@ +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 1CF 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 04 97 A1 30 25 0B 7B 04 A1 39 22 05 +R 00 00 00 09 +T 00 00 0D 9F A0 30 20 22 +R 00 00 00 09 +T 00 00 12 +R 00 00 00 09 +T 00 00 12 7B 04 A1 61 25 09 A1 7A 22 05 9F AB A9 +R 00 00 00 09 +T 00 00 1F 20 13 +R 00 00 00 09 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 7B 04 A1 41 25 09 A1 5A 22 05 9F AB C9 +R 00 00 00 09 +T 00 00 2E 20 04 +R 00 00 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 A6 FF 20 06 +R 00 00 00 09 +T 00 00 34 +R 00 00 00 09 +T 00 00 34 11 05 25 02 A6 FF +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A +R 00 00 00 09 +T 00 00 3A 87 +R 00 00 00 09 +T 00 00 3B +R 00 00 00 09 +T 00 00 3B 52 14 16 18 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 1C 26 4D 4B 02 4B +R 00 00 00 09 +T 00 00 73 00 4B 00 00 00 4B 00 00 00 1E 17 89 8D +R 00 00 00 09 F1 09 05 00 07 F1 81 09 00 07 +T 00 00 7C 00 00 00 5B 06 5D 27 14 4B 02 4B 00 4B +R 00 00 00 09 82 03 00 02 +T 00 00 89 00 00 03 4B 00 00 03 1E 17 89 8D +R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07 +T 00 00 90 00 00 00 5B 06 5D 26 0B +R 00 00 00 09 82 03 00 02 +T 00 00 98 +R 00 00 00 09 +T 00 00 98 AE 00 10 1F 1C 16 11 17 13 20 4D +R 00 00 00 09 +T 00 00 A3 +R 00 00 00 09 +T 00 00 A3 1E 13 F6 A1 30 26 0C AE 00 08 1F 1C 1E +R 00 00 00 09 +T 00 00 B0 13 5C 1F 13 20 3A +R 00 00 00 09 +T 00 00 B6 +R 00 00 00 09 +T 00 00 B6 AE 00 0A 1F 1C 20 33 +R 00 00 00 09 +T 00 00 BD +R 00 00 00 09 +T 00 00 BD 1E 1C A3 00 10 26 2C 4B 02 4B 00 4B +R 00 00 00 09 +T 00 00 C9 00 00 00 4B 00 00 00 1E 17 89 8D +R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07 +T 00 00 D0 00 00 00 5B 06 5D 27 14 4B 02 4B 00 4B +R 00 00 00 09 82 03 00 02 +T 00 00 DD 00 00 03 4B 00 00 03 1E 17 89 8D +R 00 00 00 09 F1 09 03 00 07 F1 81 07 00 07 +T 00 00 E4 00 00 00 5B 06 5D 26 04 +R 00 00 00 09 82 03 00 02 +T 00 00 EC +R 00 00 00 09 +T 00 00 EC 16 11 17 13 +R 00 00 00 09 +T 00 00 F0 +R 00 00 00 09 +T 00 00 F0 7B 1D 6B 07 1E 13 F6 97 7B 07 88 9F 88 +R 00 00 00 09 +T 00 00 FD 8D 00 00 00 5B 02 16 1A 17 08 4D 2A 10 +R 00 00 00 09 80 04 00 09 +T 00 01 0A 1E 1A 27 05 1E 08 16 18 FF +R 00 00 00 09 +T 00 01 13 +R 00 00 00 09 +T 00 01 13 5F 90 5F AC 00 01 CC +R 00 00 00 09 80 07 00 09 +T 00 01 1A +R 00 00 00 09 +T 00 01 1A 5F 1F 11 1F 0F +R 00 00 00 09 +T 00 01 1F +R 00 00 00 09 +T 00 01 1F 1E 13 F6 97 7B 07 88 9F 88 8D +R 00 00 00 09 +T 00 01 29 00 00 00 5B 02 6B 0A 2B 61 16 11 17 0D +R 00 00 00 09 80 03 00 09 +T 00 01 36 16 0F 17 0B 16 1C 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 01 42 +R 00 00 00 09 +T 00 01 42 90 89 89 1E 15 89 1E 15 89 8D +R 00 00 00 09 +T 00 01 4C 00 00 00 5B 08 1F 11 17 0F 1E 11 13 0D +R 00 00 00 09 82 03 00 03 +T 00 01 59 7B 10 12 0C 7B 0F 12 0B 24 04 A6 01 6B +R 00 00 00 09 +T 00 01 66 05 +R 00 00 00 09 +T 00 01 67 +R 00 00 00 09 +T 00 01 67 7B 0A 6B 04 0F 03 0F 02 0F 01 1E 11 72 +R 00 00 00 09 +T 00 01 74 FB 03 1F 0C 7B 10 19 02 6B 0B 7B 0F 19 +R 00 00 00 09 +T 00 01 81 01 6B 0A 16 0C 17 11 16 0A 17 0F 1E 13 +R 00 00 00 09 +T 00 01 8E 5C 1F 13 20 8C +R 00 00 00 09 +T 00 01 93 +R 00 00 00 09 +T 00 01 93 1E 1A 27 05 1E 08 16 13 FF +R 00 00 00 09 +T 00 01 9C +R 00 00 00 09 +T 00 01 9C 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 A9 93 20 20 +R 00 00 00 09 +T 00 01 AC +R 00 00 00 09 +T 00 01 AC 0D 06 27 10 16 11 90 50 1E 0F 24 01 5C +R 00 00 00 09 +T 00 01 B9 +R 00 00 00 09 +T 00 01 B9 50 17 0C 1F 0A 20 08 +R 00 00 00 09 +T 00 01 C0 +R 00 00 00 09 +T 00 01 C0 16 11 17 0C 16 0F 17 0A +R 00 00 00 09 +T 00 01 C8 +R 00 00 00 09 +T 00 01 C8 1E 0C 16 0A +R 00 00 00 09 +T 00 01 CC +R 00 00 00 09 +T 00 01 CC 5B 14 87 +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-large/strtoul.sym b/device/lib/stm8-large/strtoul.sym new file mode 100644 index 0000000..43db608 --- /dev/null +++ b/device/lib/stm8-large/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 1CF flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/strxfrm.asm b/device/lib/stm8-large/strxfrm.asm new file mode 100644 index 0000000..b8c05cb --- /dev/null +++ b/device/lib/stm8-large/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, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + callf _strncpy + addw sp, #6 +; ../strxfrm.c: 34: return(strlen(src) + 1); + ldw x, (0x06, sp) + pushw x + callf _strlen + addw sp, #2 + incw x +; ../strxfrm.c: 35: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/strxfrm.lst b/device/lib/stm8-large/strxfrm.lst new file mode 100644 index 0000000..22840ed --- /dev/null +++ b/device/lib/stm8-large/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 08 [ 2] 57 ldw x, (0x08, sp) + 000002 89 [ 2] 58 pushw x + 000003 1E 08 [ 2] 59 ldw x, (0x08, sp) + 000005 89 [ 2] 60 pushw x + 000006 1E 08 [ 2] 61 ldw x, (0x08, sp) + 000008 89 [ 2] 62 pushw x + 000009 8Ds00r00r00 [ 5] 63 callf _strncpy + 00000D 5B 06 [ 2] 64 addw sp, #6 + 65 ; ../strxfrm.c: 34: return(strlen(src) + 1); + 00000F 1E 06 [ 2] 66 ldw x, (0x06, sp) + 000011 89 [ 2] 67 pushw x + 000012 8Ds00r00r00 [ 5] 68 callf _strlen + 000016 5B 02 [ 2] 69 addw sp, #2 + 000018 5C [ 1] 70 incw x + 71 ; ../strxfrm.c: 35: } + 000019 87 [ 5] 72 retf + 73 .area CODE + 74 .area CONST + 75 .area INITIALIZER + 76 .area CABS (ABS) diff --git a/device/lib/stm8-large/strxfrm.rel b/device/lib/stm8-large/strxfrm.rel new file mode 100644 index 0000000..fd6fb14 --- /dev/null +++ b/device/lib/stm8-large/strxfrm.rel @@ -0,0 +1,27 @@ +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 1A 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 08 89 1E 08 89 1E 08 89 8D +R 00 00 00 09 +T 00 00 0A 00 00 00 5B 06 1E 06 89 8D +R 00 00 00 09 82 03 00 01 +T 00 00 13 00 00 00 5B 02 5C 87 +R 00 00 00 09 82 03 00 02 diff --git a/device/lib/stm8-large/strxfrm.sym b/device/lib/stm8-large/strxfrm.sym new file mode 100644 index 0000000..247920a --- /dev/null +++ b/device/lib/stm8-large/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 1A flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/tancotf.asm b/device/lib/stm8-large/tancotf.asm new file mode 100644 index 0000000..e5d6c0b --- /dev/null +++ b/device/lib/stm8-large/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, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf _fabsf + addw sp, #4 + pushw x + pushw y + push #0x00 + push #0x08 + push #0xc9 + push #0x45 + callf ___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 + jpf 00115$ +00102$: +; ../tancotf.c: 65: n=(x*TWO_O_PI+(x>0.0?0.5:-0.5)); /*works for +-x*/ + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + push #0x83 + push #0xf9 + push #0x22 + push #0x3f + callf ___fsmul + addw sp, #8 + ldw (0x09, sp), x + ldw (0x07, sp), y + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + clrw x + pushw x + clrw x + pushw x + callf ___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 + callf ___fsadd + addw sp, #8 + pushw x + pushw y + callf ___fs2sint + addw sp, #4 +; ../tancotf.c: 66: xn=n; + ldw (0x01, sp), x + pushw x + callf ___sint2fs + addw sp, #2 + ldw (0x05, sp), x + ldw (0x03, sp), y +; ../tancotf.c: 68: xnum=(int)x; + ldw x, (0x14, sp) + pushw x + ldw x, (0x14, sp) + pushw x + callf ___fs2sint + addw sp, #4 + pushw x + callf ___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, (0x18, sp) + pushw x + ldw x, (0x18, sp) + pushw x + callf ___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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + callf ___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 + callf _fabsf + addw sp, #4 + push #0x00 + push #0x00 + push #0x80 + push #0x39 + pushw x + pushw y + callf ___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 + jpf 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 + callf ___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 + callf ___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 + callf ___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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0xaf + push #0xb7 + push #0xdb + push #0xbe + pushw x + pushw y + callf ___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 + callf ___fsmul + addw sp, #8 + push #0x00 + push #0x00 + push #0x80 + push #0x3f + pushw x + pushw y + callf ___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 (0x16, 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 + callf ___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 + callf ___fsdiv + addw sp, #8 + jra 00115$ +00113$: +; ../tancotf.c: 92: if(iscotan) return (xden/xnum); + tnz (0x16, 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 + callf ___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 + callf ___fsdiv + addw sp, #8 +00115$: +; ../tancotf.c: 95: } + addw sp, #14 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/tancotf.lst b/device/lib/stm8-large/tancotf.lst new file mode 100644 index 0000000..c903f3d --- /dev/null +++ b/device/lib/stm8-large/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 14 [ 2] 57 ldw x, (0x14, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 14 [ 2] 59 ldw x, (0x14, sp) + 000007 89 [ 2] 60 pushw x + 000008 8Ds00r00r00 [ 5] 61 callf _fabsf + 00000C 5B 04 [ 2] 62 addw sp, #4 + 00000E 89 [ 2] 63 pushw x + 00000F 90 89 [ 2] 64 pushw y + 000011 4B 00 [ 1] 65 push #0x00 + 000013 4B 08 [ 1] 66 push #0x08 + 000015 4B C9 [ 1] 67 push #0xc9 + 000017 4B 45 [ 1] 68 push #0x45 + 000019 8Ds00r00r00 [ 5] 69 callf ___fslt + 00001D 5B 08 [ 2] 70 addw sp, #8 + 00001F 6B 0E [ 1] 71 ld (0x0e, sp), a + 000021 27 0D [ 1] 72 jreq 00102$ + 73 ; ../tancotf.c: 60: errno = ERANGE; + 000023 AE 00 22 [ 2] 74 ldw x, #0x0022 + 000026 CFu00u00 [ 2] 75 ldw _errno+0, x + 76 ; ../tancotf.c: 61: return 0.0; + 000029 5F [ 1] 77 clrw x + 00002A 90 5F [ 1] 78 clrw y + 00002C ACs00r02r66 [ 2] 79 jpf 00115$ + 000030 80 00102$: + 81 ; ../tancotf.c: 65: n=(x*TWO_O_PI+(x>0.0?0.5:-0.5)); /*works for +-x*/ + 000030 1E 14 [ 2] 82 ldw x, (0x14, sp) + 000032 89 [ 2] 83 pushw x + 000033 1E 14 [ 2] 84 ldw x, (0x14, sp) + 000035 89 [ 2] 85 pushw x + 000036 4B 83 [ 1] 86 push #0x83 + 000038 4B F9 [ 1] 87 push #0xf9 + 00003A 4B 22 [ 1] 88 push #0x22 + 00003C 4B 3F [ 1] 89 push #0x3f + 00003E 8Ds00r00r00 [ 5] 90 callf ___fsmul + 000042 5B 08 [ 2] 91 addw sp, #8 + 000044 1F 09 [ 2] 92 ldw (0x09, sp), x + 000046 17 07 [ 2] 93 ldw (0x07, sp), y + 000048 1E 14 [ 2] 94 ldw x, (0x14, sp) + 00004A 89 [ 2] 95 pushw x + 00004B 1E 14 [ 2] 96 ldw x, (0x14, sp) + 00004D 89 [ 2] 97 pushw x + 00004E 5F [ 1] 98 clrw x + 00004F 89 [ 2] 99 pushw x + 000050 5F [ 1] 100 clrw x + 000051 89 [ 2] 101 pushw x + 000052 8Ds00r00r00 [ 5] 102 callf ___fslt + 000056 5B 08 [ 2] 103 addw sp, #8 + 000058 4D [ 1] 104 tnz a + 000059 27 0A [ 1] 105 jreq 00117$ + 00005B 5F [ 1] 106 clrw x + 00005C 1F 0D [ 2] 107 ldw (0x0d, sp), x + 00005E AE 3F 00 [ 2] 108 ldw x, #0x3f00 + 000061 1F 0B [ 2] 109 ldw (0x0b, sp), x + 000063 20 08 [ 2] 110 jra 00118$ + 000065 111 00117$: + 000065 5F [ 1] 112 clrw x + 000066 1F 0D [ 2] 113 ldw (0x0d, sp), x + 000068 AE BF 00 [ 2] 114 ldw x, #0xbf00 + 00006B 1F 0B [ 2] 115 ldw (0x0b, sp), x + 00006D 116 00118$: + 00006D 1E 0D [ 2] 117 ldw x, (0x0d, sp) + 00006F 89 [ 2] 118 pushw x + 000070 1E 0D [ 2] 119 ldw x, (0x0d, sp) + 000072 89 [ 2] 120 pushw x + 000073 1E 0D [ 2] 121 ldw x, (0x0d, sp) + 000075 89 [ 2] 122 pushw x + 000076 1E 0D [ 2] 123 ldw x, (0x0d, sp) + 000078 89 [ 2] 124 pushw x + 000079 8Ds00r00r00 [ 5] 125 callf ___fsadd + 00007D 5B 08 [ 2] 126 addw sp, #8 + 00007F 89 [ 2] 127 pushw x + 000080 90 89 [ 2] 128 pushw y + 000082 8Ds00r00r00 [ 5] 129 callf ___fs2sint + 000086 5B 04 [ 2] 130 addw sp, #4 + 131 ; ../tancotf.c: 66: xn=n; + 000088 1F 01 [ 2] 132 ldw (0x01, sp), x + 00008A 89 [ 2] 133 pushw x + 00008B 8Ds00r00r00 [ 5] 134 callf ___sint2fs + 00008F 5B 02 [ 2] 135 addw sp, #2 + 000091 1F 05 [ 2] 136 ldw (0x05, sp), x + 000093 17 03 [ 2] 137 ldw (0x03, sp), y + 138 ; ../tancotf.c: 68: xnum=(int)x; + 000095 1E 14 [ 2] 139 ldw x, (0x14, sp) + 000097 89 [ 2] 140 pushw x + 000098 1E 14 [ 2] 141 ldw x, (0x14, sp) + 00009A 89 [ 2] 142 pushw x + 00009B 8Ds00r00r00 [ 5] 143 callf ___fs2sint + 00009F 5B 04 [ 2] 144 addw sp, #4 + 0000A1 89 [ 2] 145 pushw x + 0000A2 8Ds00r00r00 [ 5] 146 callf ___sint2fs + 0000A6 5B 02 [ 2] 147 addw sp, #2 + 0000A8 1F 0D [ 2] 148 ldw (0x0d, sp), x + 0000AA 17 0B [ 2] 149 ldw (0x0b, sp), y + 150 ; ../tancotf.c: 69: xden=x-xnum; + 0000AC 1E 0D [ 2] 151 ldw x, (0x0d, sp) + 0000AE 89 [ 2] 152 pushw x + 0000AF 1E 0D [ 2] 153 ldw x, (0x0d, sp) + 0000B1 89 [ 2] 154 pushw x + 0000B2 1E 18 [ 2] 155 ldw x, (0x18, sp) + 0000B4 89 [ 2] 156 pushw x + 0000B5 1E 18 [ 2] 157 ldw x, (0x18, sp) + 0000B7 89 [ 2] 158 pushw x + 0000B8 8Ds00r00r00 [ 5] 159 callf ___fssub + 0000BC 5B 08 [ 2] 160 addw sp, #8 + 0000BE 1F 09 [ 2] 161 ldw (0x09, sp), x + 0000C0 17 07 [ 2] 162 ldw (0x07, sp), y + 163 ; ../tancotf.c: 70: f=((xnum-xn*C1)+xden)-xn*C2; + 0000C2 1E 05 [ 2] 164 ldw x, (0x05, sp) + 0000C4 89 [ 2] 165 pushw x + 0000C5 1E 05 [ 2] 166 ldw x, (0x05, sp) + 0000C7 89 [ 2] 167 pushw x + 0000C8 5F [ 1] 168 clrw x + 0000C9 89 [ 2] 169 pushw x + 0000CA 4B C9 [ 1] 170 push #0xc9 + 0000CC 4B 3F [ 1] 171 push #0x3f + 0000CE 8Ds00r00r00 [ 5] 172 callf ___fsmul + 0000D2 5B 08 [ 2] 173 addw sp, #8 + 0000D4 89 [ 2] 174 pushw x + 0000D5 90 89 [ 2] 175 pushw y + 0000D7 1E 11 [ 2] 176 ldw x, (0x11, sp) + 0000D9 89 [ 2] 177 pushw x + 0000DA 1E 11 [ 2] 178 ldw x, (0x11, sp) + 0000DC 89 [ 2] 179 pushw x + 0000DD 8Ds00r00r00 [ 5] 180 callf ___fssub + 0000E1 5B 08 [ 2] 181 addw sp, #8 + 0000E3 1F 0D [ 2] 182 ldw (0x0d, sp), x + 0000E5 1E 09 [ 2] 183 ldw x, (0x09, sp) + 0000E7 89 [ 2] 184 pushw x + 0000E8 1E 09 [ 2] 185 ldw x, (0x09, sp) + 0000EA 89 [ 2] 186 pushw x + 0000EB 1E 11 [ 2] 187 ldw x, (0x11, sp) + 0000ED 89 [ 2] 188 pushw x + 0000EE 90 89 [ 2] 189 pushw y + 0000F0 8Ds00r00r00 [ 5] 190 callf ___fsadd + 0000F4 5B 08 [ 2] 191 addw sp, #8 + 0000F6 1F 0D [ 2] 192 ldw (0x0d, sp), x + 0000F8 17 0B [ 2] 193 ldw (0x0b, sp), y + 0000FA 1E 05 [ 2] 194 ldw x, (0x05, sp) + 0000FC 89 [ 2] 195 pushw x + 0000FD 1E 05 [ 2] 196 ldw x, (0x05, sp) + 0000FF 89 [ 2] 197 pushw x + 000100 4B 22 [ 1] 198 push #0x22 + 000102 4B AA [ 1] 199 push #0xaa + 000104 4B FD [ 1] 200 push #0xfd + 000106 4B 39 [ 1] 201 push #0x39 + 000108 8Ds00r00r00 [ 5] 202 callf ___fsmul + 00010C 5B 08 [ 2] 203 addw sp, #8 + 00010E 89 [ 2] 204 pushw x + 00010F 90 89 [ 2] 205 pushw y + 000111 1E 11 [ 2] 206 ldw x, (0x11, sp) + 000113 89 [ 2] 207 pushw x + 000114 1E 11 [ 2] 208 ldw x, (0x11, sp) + 000116 89 [ 2] 209 pushw x + 000117 8Ds00r00r00 [ 5] 210 callf ___fssub + 00011B 5B 08 [ 2] 211 addw sp, #8 + 00011D 1F 0D [ 2] 212 ldw (0x0d, sp), x + 00011F 17 0B [ 2] 213 ldw (0x0b, sp), y + 214 ; ../tancotf.c: 72: if (fabsf(f) < EPS) + 000121 1E 0D [ 2] 215 ldw x, (0x0d, sp) + 000123 89 [ 2] 216 pushw x + 000124 1E 0D [ 2] 217 ldw x, (0x0d, sp) + 000126 89 [ 2] 218 pushw x + 000127 8Ds00r00r00 [ 5] 219 callf _fabsf + 00012B 5B 04 [ 2] 220 addw sp, #4 + 00012D 4B 00 [ 1] 221 push #0x00 + 00012F 4B 00 [ 1] 222 push #0x00 + 000131 4B 80 [ 1] 223 push #0x80 + 000133 4B 39 [ 1] 224 push #0x39 + 000135 89 [ 2] 225 pushw x + 000136 90 89 [ 2] 226 pushw y + 000138 8Ds00r00r00 [ 5] 227 callf ___fslt + 00013C 5B 08 [ 2] 228 addw sp, #8 + 00013E 6B 0A [ 1] 229 ld (0x0a, sp), a + 000140 27 14 [ 1] 230 jreq 00104$ + 231 ; ../tancotf.c: 74: xnum = f; + 000142 16 0D [ 2] 232 ldw y, (0x0d, sp) + 000144 17 05 [ 2] 233 ldw (0x05, sp), y + 000146 16 0B [ 2] 234 ldw y, (0x0b, sp) + 000148 17 03 [ 2] 235 ldw (0x03, sp), y + 236 ; ../tancotf.c: 75: xden = 1.0; + 00014A 5F [ 1] 237 clrw x + 00014B 1F 0D [ 2] 238 ldw (0x0d, sp), x + 00014D AE 3F 80 [ 2] 239 ldw x, #0x3f80 + 000150 1F 0B [ 2] 240 ldw (0x0b, sp), x + 000152 ACs00r01rF7 [ 2] 241 jpf 00105$ + 000156 242 00104$: + 243 ; ../tancotf.c: 79: g = f*f; + 000156 1E 0D [ 2] 244 ldw x, (0x0d, sp) + 000158 89 [ 2] 245 pushw x + 000159 1E 0D [ 2] 246 ldw x, (0x0d, sp) + 00015B 89 [ 2] 247 pushw x + 00015C 1E 11 [ 2] 248 ldw x, (0x11, sp) + 00015E 89 [ 2] 249 pushw x + 00015F 1E 11 [ 2] 250 ldw x, (0x11, sp) + 000161 89 [ 2] 251 pushw x + 000162 8Ds00r00r00 [ 5] 252 callf ___fsmul + 000166 5B 08 [ 2] 253 addw sp, #8 + 000168 1F 09 [ 2] 254 ldw (0x09, sp), x + 00016A 17 07 [ 2] 255 ldw (0x07, sp), y + 256 ; ../tancotf.c: 80: xnum = P(f,g); + 00016C 1E 09 [ 2] 257 ldw x, (0x09, sp) + 00016E 89 [ 2] 258 pushw x + 00016F 1E 09 [ 2] 259 ldw x, (0x09, sp) + 000171 89 [ 2] 260 pushw x + 000172 4B B8 [ 1] 261 push #0xb8 + 000174 4B 33 [ 1] 262 push #0x33 + 000176 4B C4 [ 1] 263 push #0xc4 + 000178 4B BD [ 1] 264 push #0xbd + 00017A 8Ds00r00r00 [ 5] 265 callf ___fsmul + 00017E 5B 08 [ 2] 266 addw sp, #8 + 000180 1F 05 [ 2] 267 ldw (0x05, sp), x + 000182 1E 0D [ 2] 268 ldw x, (0x0d, sp) + 000184 89 [ 2] 269 pushw x + 000185 1E 0D [ 2] 270 ldw x, (0x0d, sp) + 000187 89 [ 2] 271 pushw x + 000188 1E 09 [ 2] 272 ldw x, (0x09, sp) + 00018A 89 [ 2] 273 pushw x + 00018B 90 89 [ 2] 274 pushw y + 00018D 8Ds00r00r00 [ 5] 275 callf ___fsmul + 000191 5B 08 [ 2] 276 addw sp, #8 + 000193 1F 05 [ 2] 277 ldw (0x05, sp), x + 000195 1E 0D [ 2] 278 ldw x, (0x0d, sp) + 000197 89 [ 2] 279 pushw x + 000198 1E 0D [ 2] 280 ldw x, (0x0d, sp) + 00019A 89 [ 2] 281 pushw x + 00019B 1E 09 [ 2] 282 ldw x, (0x09, sp) + 00019D 89 [ 2] 283 pushw x + 00019E 90 89 [ 2] 284 pushw y + 0001A0 8Ds00r00r00 [ 5] 285 callf ___fsadd + 0001A4 5B 08 [ 2] 286 addw sp, #8 + 0001A6 1F 05 [ 2] 287 ldw (0x05, sp), x + 0001A8 17 03 [ 2] 288 ldw (0x03, sp), y + 289 ; ../tancotf.c: 81: xden = Q(g); + 0001AA 1E 09 [ 2] 290 ldw x, (0x09, sp) + 0001AC 89 [ 2] 291 pushw x + 0001AD 1E 09 [ 2] 292 ldw x, (0x09, sp) + 0001AF 89 [ 2] 293 pushw x + 0001B0 4B 75 [ 1] 294 push #0x75 + 0001B2 4B 33 [ 1] 295 push #0x33 + 0001B4 4B 1F [ 1] 296 push #0x1f + 0001B6 4B 3C [ 1] 297 push #0x3c + 0001B8 8Ds00r00r00 [ 5] 298 callf ___fsmul + 0001BC 5B 08 [ 2] 299 addw sp, #8 + 0001BE 4B AF [ 1] 300 push #0xaf + 0001C0 4B B7 [ 1] 301 push #0xb7 + 0001C2 4B DB [ 1] 302 push #0xdb + 0001C4 4B BE [ 1] 303 push #0xbe + 0001C6 89 [ 2] 304 pushw x + 0001C7 90 89 [ 2] 305 pushw y + 0001C9 8Ds00r00r00 [ 5] 306 callf ___fsadd + 0001CD 5B 08 [ 2] 307 addw sp, #8 + 0001CF 1F 0D [ 2] 308 ldw (0x0d, sp), x + 0001D1 1E 09 [ 2] 309 ldw x, (0x09, sp) + 0001D3 89 [ 2] 310 pushw x + 0001D4 1E 09 [ 2] 311 ldw x, (0x09, sp) + 0001D6 89 [ 2] 312 pushw x + 0001D7 1E 11 [ 2] 313 ldw x, (0x11, sp) + 0001D9 89 [ 2] 314 pushw x + 0001DA 90 89 [ 2] 315 pushw y + 0001DC 8Ds00r00r00 [ 5] 316 callf ___fsmul + 0001E0 5B 08 [ 2] 317 addw sp, #8 + 0001E2 4B 00 [ 1] 318 push #0x00 + 0001E4 4B 00 [ 1] 319 push #0x00 + 0001E6 4B 80 [ 1] 320 push #0x80 + 0001E8 4B 3F [ 1] 321 push #0x3f + 0001EA 89 [ 2] 322 pushw x + 0001EB 90 89 [ 2] 323 pushw y + 0001ED 8Ds00r00r00 [ 5] 324 callf ___fsadd + 0001F1 5B 08 [ 2] 325 addw sp, #8 + 0001F3 1F 0D [ 2] 326 ldw (0x0d, sp), x + 0001F5 17 0B [ 2] 327 ldw (0x0b, sp), y + 0001F7 328 00105$: + 329 ; ../tancotf.c: 84: if(n&1) + 0001F7 7B 02 [ 1] 330 ld a, (0x02, sp) + 0001F9 44 [ 1] 331 srl a + 0001FA 24 40 [ 1] 332 jrnc 00113$ + 333 ; ../tancotf.c: 87: if(iscotan) return (-xnum/xden); + 0001FC 0D 16 [ 1] 334 tnz (0x16, sp) + 0001FE 27 1E [ 1] 335 jreq 00107$ + 000200 16 05 [ 2] 336 ldw y, (0x05, sp) + 000202 1E 03 [ 2] 337 ldw x, (0x03, sp) + 000204 58 [ 2] 338 sllw x + 000205 8C [ 1] 339 ccf + 000206 56 [ 2] 340 rrcw x + 000207 7B 0E [ 1] 341 ld a, (0x0e, sp) + 000209 88 [ 1] 342 push a + 00020A 7B 0E [ 1] 343 ld a, (0x0e, sp) + 00020C 88 [ 1] 344 push a + 00020D 7B 0E [ 1] 345 ld a, (0x0e, sp) + 00020F 88 [ 1] 346 push a + 000210 7B 0E [ 1] 347 ld a, (0x0e, sp) + 000212 88 [ 1] 348 push a + 000213 90 89 [ 2] 349 pushw y + 000215 89 [ 2] 350 pushw x + 000216 8Ds00r00r00 [ 5] 351 callf ___fsdiv + 00021A 5B 08 [ 2] 352 addw sp, #8 + 00021C 20 48 [ 2] 353 jra 00115$ + 00021E 354 00107$: + 355 ; ../tancotf.c: 88: else return (-xden/xnum); + 00021E 16 0D [ 2] 356 ldw y, (0x0d, sp) + 000220 1E 0B [ 2] 357 ldw x, (0x0b, sp) + 000222 58 [ 2] 358 sllw x + 000223 8C [ 1] 359 ccf + 000224 56 [ 2] 360 rrcw x + 000225 7B 06 [ 1] 361 ld a, (0x06, sp) + 000227 88 [ 1] 362 push a + 000228 7B 06 [ 1] 363 ld a, (0x06, sp) + 00022A 88 [ 1] 364 push a + 00022B 7B 06 [ 1] 365 ld a, (0x06, sp) + 00022D 88 [ 1] 366 push a + 00022E 7B 06 [ 1] 367 ld a, (0x06, sp) + 000230 88 [ 1] 368 push a + 000231 90 89 [ 2] 369 pushw y + 000233 89 [ 2] 370 pushw x + 000234 8Ds00r00r00 [ 5] 371 callf ___fsdiv + 000238 5B 08 [ 2] 372 addw sp, #8 + 00023A 20 2A [ 2] 373 jra 00115$ + 00023C 374 00113$: + 375 ; ../tancotf.c: 92: if(iscotan) return (xden/xnum); + 00023C 0D 16 [ 1] 376 tnz (0x16, sp) + 00023E 27 14 [ 1] 377 jreq 00110$ + 000240 1E 05 [ 2] 378 ldw x, (0x05, sp) + 000242 89 [ 2] 379 pushw x + 000243 1E 05 [ 2] 380 ldw x, (0x05, sp) + 000245 89 [ 2] 381 pushw x + 000246 1E 11 [ 2] 382 ldw x, (0x11, sp) + 000248 89 [ 2] 383 pushw x + 000249 1E 11 [ 2] 384 ldw x, (0x11, sp) + 00024B 89 [ 2] 385 pushw x + 00024C 8Ds00r00r00 [ 5] 386 callf ___fsdiv + 000250 5B 08 [ 2] 387 addw sp, #8 + 000252 20 12 [ 2] 388 jra 00115$ + 000254 389 00110$: + 390 ; ../tancotf.c: 93: else return (xnum/xden); + 000254 1E 0D [ 2] 391 ldw x, (0x0d, sp) + 000256 89 [ 2] 392 pushw x + 000257 1E 0D [ 2] 393 ldw x, (0x0d, sp) + 000259 89 [ 2] 394 pushw x + 00025A 1E 09 [ 2] 395 ldw x, (0x09, sp) + 00025C 89 [ 2] 396 pushw x + 00025D 1E 09 [ 2] 397 ldw x, (0x09, sp) + 00025F 89 [ 2] 398 pushw x + 000260 8Ds00r00r00 [ 5] 399 callf ___fsdiv + 000264 5B 08 [ 2] 400 addw sp, #8 + 000266 401 00115$: + 402 ; ../tancotf.c: 95: } + 000266 5B 0E [ 2] 403 addw sp, #14 + 000268 87 [ 5] 404 retf + 405 .area CODE + 406 .area CONST + 407 .area INITIALIZER + 408 .area CABS (ABS) diff --git a/device/lib/stm8-large/tancotf.rel b/device/lib/stm8-large/tancotf.rel new file mode 100644 index 0000000..fa4af26 --- /dev/null +++ b/device/lib/stm8-large/tancotf.rel @@ -0,0 +1,158 @@ +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 269 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 14 89 1E 14 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 04 89 90 89 4B 00 4B 08 4B +R 00 00 00 09 82 03 00 06 +T 00 00 16 C9 4B 45 8D 00 00 00 5B 08 6B 0E 27 0D +R 00 00 00 09 82 07 00 03 +T 00 00 23 AE 00 22 CF 00 00 5F 90 5F AC +R 00 00 00 09 12 07 00 02 +T 00 00 2D 00 02 66 +R 00 00 00 09 80 03 00 09 +T 00 00 30 +R 00 00 00 09 +T 00 00 30 1E 14 89 1E 14 89 4B 83 4B F9 4B 22 4B +R 00 00 00 09 +T 00 00 3D 3F 8D 00 00 00 5B 08 1F 09 17 07 1E 14 +R 00 00 00 09 82 05 00 01 +T 00 00 4A 89 1E 14 89 5F 89 5F 89 8D +R 00 00 00 09 +T 00 00 53 00 00 00 5B 08 4D 27 0A 5F 1F 0D AE +R 00 00 00 09 82 03 00 03 +T 00 00 5F 3F 00 1F 0B 20 08 +R 00 00 00 09 +T 00 00 65 +R 00 00 00 09 +T 00 00 65 5F 1F 0D AE BF 00 1F 0B +R 00 00 00 09 +T 00 00 6D +R 00 00 00 09 +T 00 00 6D 1E 0D 89 1E 0D 89 1E 0D 89 1E 0D 89 8D +R 00 00 00 09 +T 00 00 7A 00 00 00 5B 08 89 90 89 8D +R 00 00 00 09 82 03 00 05 +T 00 00 83 00 00 00 5B 04 1F 01 89 8D +R 00 00 00 09 82 03 00 08 +T 00 00 8C 00 00 00 5B 02 1F 05 17 03 1E 14 89 1E +R 00 00 00 09 82 03 00 07 +T 00 00 99 14 89 8D 00 00 00 5B 04 89 8D +R 00 00 00 09 82 06 00 08 +T 00 00 A3 00 00 00 5B 02 1F 0D 17 0B 1E 0D 89 1E +R 00 00 00 09 82 03 00 07 +T 00 00 B0 0D 89 1E 18 89 1E 18 89 8D +R 00 00 00 09 +T 00 00 B9 00 00 00 5B 08 1F 09 17 07 1E 05 89 1E +R 00 00 00 09 82 03 00 00 +T 00 00 C6 05 89 5F 89 4B C9 4B 3F 8D +R 00 00 00 09 +T 00 00 CF 00 00 00 5B 08 89 90 89 1E 11 89 1E 11 +R 00 00 00 09 82 03 00 01 +T 00 00 DC 89 8D 00 00 00 5B 08 1F 0D 1E 09 89 1E +R 00 00 00 09 82 05 00 00 +T 00 00 E9 09 89 1E 11 89 90 89 8D +R 00 00 00 09 +T 00 00 F1 00 00 00 5B 08 1F 0D 17 0B 1E 05 89 1E +R 00 00 00 09 82 03 00 05 +T 00 00 FE 05 89 4B 22 4B AA 4B FD 4B 39 8D +R 00 00 00 09 +T 00 01 09 00 00 00 5B 08 89 90 89 1E 11 89 1E 11 +R 00 00 00 09 82 03 00 01 +T 00 01 16 89 8D 00 00 00 5B 08 1F 0D 17 0B 1E 0D +R 00 00 00 09 82 05 00 00 +T 00 01 23 89 1E 0D 89 8D 00 00 00 5B 04 4B 00 4B +R 00 00 00 09 82 08 00 06 +T 00 01 30 00 4B 80 4B 39 89 90 89 8D +R 00 00 00 09 +T 00 01 39 00 00 00 5B 08 6B 0A 27 14 16 0D 17 05 +R 00 00 00 09 82 03 00 03 +T 00 01 46 16 0B 17 03 5F 1F 0D AE 3F 80 1F 0B AC +R 00 00 00 09 +T 00 01 53 00 01 F7 +R 00 00 00 09 80 03 00 09 +T 00 01 56 +R 00 00 00 09 +T 00 01 56 1E 0D 89 1E 0D 89 1E 11 89 1E 11 89 8D +R 00 00 00 09 +T 00 01 63 00 00 00 5B 08 1F 09 17 07 1E 09 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 70 09 89 4B B8 4B 33 4B C4 4B BD 8D +R 00 00 00 09 +T 00 01 7B 00 00 00 5B 08 1F 05 1E 0D 89 1E 0D 89 +R 00 00 00 09 82 03 00 01 +T 00 01 88 1E 09 89 90 89 8D 00 00 00 5B 08 1F 05 +R 00 00 00 09 82 09 00 01 +T 00 01 95 1E 0D 89 1E 0D 89 1E 09 89 90 89 8D +R 00 00 00 09 +T 00 01 A1 00 00 00 5B 08 1F 05 17 03 1E 09 89 1E +R 00 00 00 09 82 03 00 05 +T 00 01 AE 09 89 4B 75 4B 33 4B 1F 4B 3C 8D +R 00 00 00 09 +T 00 01 B9 00 00 00 5B 08 4B AF 4B B7 4B DB 4B BE +R 00 00 00 09 82 03 00 01 +T 00 01 C6 89 90 89 8D 00 00 00 5B 08 1F 0D 1E 09 +R 00 00 00 09 82 07 00 05 +T 00 01 D3 89 1E 09 89 1E 11 89 90 89 8D +R 00 00 00 09 +T 00 01 DD 00 00 00 5B 08 4B 00 4B 00 4B 80 4B 3F +R 00 00 00 09 82 03 00 01 +T 00 01 EA 89 90 89 8D 00 00 00 5B 08 1F 0D 17 0B +R 00 00 00 09 82 07 00 05 +T 00 01 F7 +R 00 00 00 09 +T 00 01 F7 7B 02 44 24 40 0D 16 27 1E 16 05 1E 03 +R 00 00 00 09 +T 00 02 04 58 8C 56 7B 0E 88 7B 0E 88 7B 0E 88 7B +R 00 00 00 09 +T 00 02 11 0E 88 90 89 89 8D 00 00 00 5B 08 20 48 +R 00 00 00 09 82 09 00 09 +T 00 02 1E +R 00 00 00 09 +T 00 02 1E 16 0D 1E 0B 58 8C 56 7B 06 88 7B 06 88 +R 00 00 00 09 +T 00 02 2B 7B 06 88 7B 06 88 90 89 89 8D +R 00 00 00 09 +T 00 02 35 00 00 00 5B 08 20 2A +R 00 00 00 09 82 03 00 09 +T 00 02 3C +R 00 00 00 09 +T 00 02 3C 0D 16 27 14 1E 05 89 1E 05 89 1E 11 89 +R 00 00 00 09 +T 00 02 49 1E 11 89 8D 00 00 00 5B 08 20 12 +R 00 00 00 09 82 07 00 09 +T 00 02 54 +R 00 00 00 09 +T 00 02 54 1E 0D 89 1E 0D 89 1E 09 89 1E 09 89 8D +R 00 00 00 09 +T 00 02 61 00 00 00 5B 08 +R 00 00 00 09 82 03 00 09 +T 00 02 66 +R 00 00 00 09 +T 00 02 66 5B 0E 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/tancotf.sym b/device/lib/stm8-large/tancotf.sym new file mode 100644 index 0000000..6d26191 --- /dev/null +++ b/device/lib/stm8-large/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 269 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/tanf.asm b/device/lib/stm8-large/tanf.asm new file mode 100644 index 0000000..71c8b45 --- /dev/null +++ b/device/lib/stm8-large/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, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf _tancotf + addw sp, #5 +; ../tanf.c: 39: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/tanf.lst b/device/lib/stm8-large/tanf.lst new file mode 100644 index 0000000..73c8525 --- /dev/null +++ b/device/lib/stm8-large/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 07 [ 2] 57 ldw x, (0x07, sp) + 000004 89 [ 2] 58 pushw x + 000005 1E 07 [ 2] 59 ldw x, (0x07, sp) + 000007 89 [ 2] 60 pushw x + 000008 8Ds00r00r00 [ 5] 61 callf _tancotf + 00000C 5B 05 [ 2] 62 addw sp, #5 + 63 ; ../tanf.c: 39: } + 00000E 87 [ 5] 64 retf + 65 .area CODE + 66 .area CONST + 67 .area INITIALIZER + 68 .area CABS (ABS) diff --git a/device/lib/stm8-large/tanf.rel b/device/lib/stm8-large/tanf.rel new file mode 100644 index 0000000..1acf668 --- /dev/null +++ b/device/lib/stm8-large/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 F 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 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 05 87 +R 00 00 00 09 82 03 00 00 diff --git a/device/lib/stm8-large/tanf.sym b/device/lib/stm8-large/tanf.sym new file mode 100644 index 0000000..68d5b97 --- /dev/null +++ b/device/lib/stm8-large/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 F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/tanhf.asm b/device/lib/stm8-large/tanhf.asm new file mode 100644 index 0000000..f1bbc31 --- /dev/null +++ b/device/lib/stm8-large/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, (0x12, sp) + pushw x + ldw x, (0x12, sp) + pushw x + callf _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 + callf ___fslt + addw sp, #8 + ld (0x0c, sp), a + jreq 00108$ + clrw x + ldw (0x0b, sp), x + ldw x, #0x3f80 + ldw (0x09, sp), x + jpf 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 + callf ___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 + callf ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y + ldw x, (0x0b, sp) + pushw x + ldw x, (0x0b, sp) + pushw x + callf _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 + callf ___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 + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + clrw x + pushw x + push #0x00 + push #0x3f + callf ___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 + callf ___fsadd + addw sp, #8 + ldw (0x0b, sp), x + ldw (0x09, sp), y + jpf 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 + callf ___fslt + addw sp, #8 + tnz a + jreq 00102$ + ldw y, (0x03, sp) + ldw (0x0b, sp), y + ldw y, (0x01, sp) + ldw (0x09, sp), y + jpf 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 + callf ___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 + callf ___fsmul + addw sp, #8 + push #0xc6 + push #0xe2 + push #0x52 + push #0xbf + pushw x + pushw y + callf ___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 + callf ___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 + callf ___fsadd + addw sp, #8 + pushw x + pushw y + ldw x, (0x0f, sp) + pushw x + ldw x, (0x0f, sp) + pushw x + callf ___fsdiv + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf ___fsmul + addw sp, #8 + pushw x + pushw y + ldw x, (0x07, sp) + pushw x + ldw x, (0x07, sp) + pushw x + callf ___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, (0x16, sp) + pushw x + ldw x, (0x16, sp) + pushw x + callf ___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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/tanhf.lst b/device/lib/stm8-large/tanhf.lst new file mode 100644 index 0000000..e9d0504 --- /dev/null +++ b/device/lib/stm8-large/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 12 [ 2] 58 ldw x, (0x12, sp) + 000004 89 [ 2] 59 pushw x + 000005 1E 12 [ 2] 60 ldw x, (0x12, sp) + 000007 89 [ 2] 61 pushw x + 000008 8Ds00r00r00 [ 5] 62 callf _fabsf + 00000C 5B 04 [ 2] 63 addw sp, #4 + 00000E 1F 03 [ 2] 64 ldw (0x03, sp), x + 000010 17 01 [ 2] 65 ldw (0x01, sp), y + 66 ; ../tanhf.c: 55: if(f>SBIG) r=1.0; + 000012 1E 03 [ 2] 67 ldw x, (0x03, sp) + 000014 89 [ 2] 68 pushw x + 000015 1E 03 [ 2] 69 ldw x, (0x03, sp) + 000017 89 [ 2] 70 pushw x + 000018 4B B0 [ 1] 71 push #0xb0 + 00001A 4B 2C [ 1] 72 push #0x2c + 00001C 4B 10 [ 1] 73 push #0x10 + 00001E 4B 41 [ 1] 74 push #0x41 + 000020 8Ds00r00r00 [ 5] 75 callf ___fslt + 000024 5B 08 [ 2] 76 addw sp, #8 + 000026 6B 0C [ 1] 77 ld (0x0c, sp), a + 000028 27 0C [ 1] 78 jreq 00108$ + 00002A 5F [ 1] 79 clrw x + 00002B 1F 0B [ 2] 80 ldw (0x0b, sp), x + 00002D AE 3F 80 [ 2] 81 ldw x, #0x3f80 + 000030 1F 09 [ 2] 82 ldw (0x09, sp), x + 000032 ACs00r01r80 [ 2] 83 jpf 00109$ + 000036 84 00108$: + 85 ; ../tanhf.c: 56: else if(f>K1) + 000036 1E 03 [ 2] 86 ldw x, (0x03, sp) + 000038 89 [ 2] 87 pushw x + 000039 1E 03 [ 2] 88 ldw x, (0x03, sp) + 00003B 89 [ 2] 89 pushw x + 00003C 4B 54 [ 1] 90 push #0x54 + 00003E 4B 9F [ 1] 91 push #0x9f + 000040 4B 0C [ 1] 92 push #0x0c + 000042 4B 3F [ 1] 93 push #0x3f + 000044 8Ds00r00r00 [ 5] 94 callf ___fslt + 000048 5B 08 [ 2] 95 addw sp, #8 + 00004A 4D [ 1] 96 tnz a + 00004B 27 7B [ 1] 97 jreq 00105$ + 98 ; ../tanhf.c: 58: r=0.5-1.0/(expf(f+f)+1.0); + 00004D 1E 03 [ 2] 99 ldw x, (0x03, sp) + 00004F 89 [ 2] 100 pushw x + 000050 1E 03 [ 2] 101 ldw x, (0x03, sp) + 000052 89 [ 2] 102 pushw x + 000053 1E 07 [ 2] 103 ldw x, (0x07, sp) + 000055 89 [ 2] 104 pushw x + 000056 1E 07 [ 2] 105 ldw x, (0x07, sp) + 000058 89 [ 2] 106 pushw x + 000059 8Ds00r00r00 [ 5] 107 callf ___fsadd + 00005D 5B 08 [ 2] 108 addw sp, #8 + 00005F 1F 0B [ 2] 109 ldw (0x0b, sp), x + 000061 17 09 [ 2] 110 ldw (0x09, sp), y + 000063 1E 0B [ 2] 111 ldw x, (0x0b, sp) + 000065 89 [ 2] 112 pushw x + 000066 1E 0B [ 2] 113 ldw x, (0x0b, sp) + 000068 89 [ 2] 114 pushw x + 000069 8Ds00r00r00 [ 5] 115 callf _expf + 00006D 5B 04 [ 2] 116 addw sp, #4 + 00006F 1F 0B [ 2] 117 ldw (0x0b, sp), x + 000071 17 09 [ 2] 118 ldw (0x09, sp), y + 000073 5F [ 1] 119 clrw x + 000074 89 [ 2] 120 pushw x + 000075 4B 80 [ 1] 121 push #0x80 + 000077 4B 3F [ 1] 122 push #0x3f + 000079 1E 0F [ 2] 123 ldw x, (0x0f, sp) + 00007B 89 [ 2] 124 pushw x + 00007C 1E 0F [ 2] 125 ldw x, (0x0f, sp) + 00007E 89 [ 2] 126 pushw x + 00007F 8Ds00r00r00 [ 5] 127 callf ___fsadd + 000083 5B 08 [ 2] 128 addw sp, #8 + 000085 1F 0B [ 2] 129 ldw (0x0b, sp), x + 000087 17 09 [ 2] 130 ldw (0x09, sp), y + 000089 1E 0B [ 2] 131 ldw x, (0x0b, sp) + 00008B 89 [ 2] 132 pushw x + 00008C 1E 0B [ 2] 133 ldw x, (0x0b, sp) + 00008E 89 [ 2] 134 pushw x + 00008F 5F [ 1] 135 clrw x + 000090 89 [ 2] 136 pushw x + 000091 4B 80 [ 1] 137 push #0x80 + 000093 4B 3F [ 1] 138 push #0x3f + 000095 8Ds00r00r00 [ 5] 139 callf ___fsdiv + 000099 5B 08 [ 2] 140 addw sp, #8 + 00009B 89 [ 2] 141 pushw x + 00009C 90 89 [ 2] 142 pushw y + 00009E 5F [ 1] 143 clrw x + 00009F 89 [ 2] 144 pushw x + 0000A0 4B 00 [ 1] 145 push #0x00 + 0000A2 4B 3F [ 1] 146 push #0x3f + 0000A4 8Ds00r00r00 [ 5] 147 callf ___fssub + 0000A8 5B 08 [ 2] 148 addw sp, #8 + 0000AA 1F 0B [ 2] 149 ldw (0x0b, sp), x + 0000AC 17 09 [ 2] 150 ldw (0x09, sp), y + 151 ; ../tanhf.c: 59: r+=r; + 0000AE 1E 0B [ 2] 152 ldw x, (0x0b, sp) + 0000B0 89 [ 2] 153 pushw x + 0000B1 1E 0B [ 2] 154 ldw x, (0x0b, sp) + 0000B3 89 [ 2] 155 pushw x + 0000B4 1E 0F [ 2] 156 ldw x, (0x0f, sp) + 0000B6 89 [ 2] 157 pushw x + 0000B7 1E 0F [ 2] 158 ldw x, (0x0f, sp) + 0000B9 89 [ 2] 159 pushw x + 0000BA 8Ds00r00r00 [ 5] 160 callf ___fsadd + 0000BE 5B 08 [ 2] 161 addw sp, #8 + 0000C0 1F 0B [ 2] 162 ldw (0x0b, sp), x + 0000C2 17 09 [ 2] 163 ldw (0x09, sp), y + 0000C4 ACs00r01r80 [ 2] 164 jpf 00109$ + 0000C8 165 00105$: + 166 ; ../tanhf.c: 61: else if(f<EPS) r=f; + 0000C8 5F [ 1] 167 clrw x + 0000C9 89 [ 2] 168 pushw x + 0000CA 4B 80 [ 1] 169 push #0x80 + 0000CC 4B 39 [ 1] 170 push #0x39 + 0000CE 1E 07 [ 2] 171 ldw x, (0x07, sp) + 0000D0 89 [ 2] 172 pushw x + 0000D1 1E 07 [ 2] 173 ldw x, (0x07, sp) + 0000D3 89 [ 2] 174 pushw x + 0000D4 8Ds00r00r00 [ 5] 175 callf ___fslt + 0000D8 5B 08 [ 2] 176 addw sp, #8 + 0000DA 4D [ 1] 177 tnz a + 0000DB 27 0C [ 1] 178 jreq 00102$ + 0000DD 16 03 [ 2] 179 ldw y, (0x03, sp) + 0000DF 17 0B [ 2] 180 ldw (0x0b, sp), y + 0000E1 16 01 [ 2] 181 ldw y, (0x01, sp) + 0000E3 17 09 [ 2] 182 ldw (0x09, sp), y + 0000E5 ACs00r01r80 [ 2] 183 jpf 00109$ + 0000E9 184 00102$: + 185 ; ../tanhf.c: 64: g=f*f; + 0000E9 1E 03 [ 2] 186 ldw x, (0x03, sp) + 0000EB 89 [ 2] 187 pushw x + 0000EC 1E 03 [ 2] 188 ldw x, (0x03, sp) + 0000EE 89 [ 2] 189 pushw x + 0000EF 1E 07 [ 2] 190 ldw x, (0x07, sp) + 0000F1 89 [ 2] 191 pushw x + 0000F2 1E 07 [ 2] 192 ldw x, (0x07, sp) + 0000F4 89 [ 2] 193 pushw x + 0000F5 8Ds00r00r00 [ 5] 194 callf ___fsmul + 0000F9 5B 08 [ 2] 195 addw sp, #8 + 0000FB 1F 07 [ 2] 196 ldw (0x07, sp), x + 0000FD 17 05 [ 2] 197 ldw (0x05, sp), y + 198 ; ../tanhf.c: 65: r=f+f*(P(g)/Q(g)); + 0000FF 1E 07 [ 2] 199 ldw x, (0x07, sp) + 000101 89 [ 2] 200 pushw x + 000102 1E 07 [ 2] 201 ldw x, (0x07, sp) + 000104 89 [ 2] 202 pushw x + 000105 4B B2 [ 1] 203 push #0xb2 + 000107 4B 11 [ 1] 204 push #0x11 + 000109 4B 7B [ 1] 205 push #0x7b + 00010B 4B BB [ 1] 206 push #0xbb + 00010D 8Ds00r00r00 [ 5] 207 callf ___fsmul + 000111 5B 08 [ 2] 208 addw sp, #8 + 000113 4B C6 [ 1] 209 push #0xc6 + 000115 4B E2 [ 1] 210 push #0xe2 + 000117 4B 52 [ 1] 211 push #0x52 + 000119 4B BF [ 1] 212 push #0xbf + 00011B 89 [ 2] 213 pushw x + 00011C 90 89 [ 2] 214 pushw y + 00011E 8Ds00r00r00 [ 5] 215 callf ___fsadd + 000122 5B 08 [ 2] 216 addw sp, #8 + 000124 1F 0B [ 2] 217 ldw (0x0b, sp), x + 000126 1E 07 [ 2] 218 ldw x, (0x07, sp) + 000128 89 [ 2] 219 pushw x + 000129 1E 07 [ 2] 220 ldw x, (0x07, sp) + 00012B 89 [ 2] 221 pushw x + 00012C 1E 0F [ 2] 222 ldw x, (0x0f, sp) + 00012E 89 [ 2] 223 pushw x + 00012F 90 89 [ 2] 224 pushw y + 000131 8Ds00r00r00 [ 5] 225 callf ___fsmul + 000135 5B 08 [ 2] 226 addw sp, #8 + 000137 1F 0B [ 2] 227 ldw (0x0b, sp), x + 000139 17 09 [ 2] 228 ldw (0x09, sp), y + 00013B 4B 1A [ 1] 229 push #0x1a + 00013D 4B 2A [ 1] 230 push #0x2a + 00013F 4B 1E [ 1] 231 push #0x1e + 000141 4B 40 [ 1] 232 push #0x40 + 000143 1E 0B [ 2] 233 ldw x, (0x0b, sp) + 000145 89 [ 2] 234 pushw x + 000146 1E 0B [ 2] 235 ldw x, (0x0b, sp) + 000148 89 [ 2] 236 pushw x + 000149 8Ds00r00r00 [ 5] 237 callf ___fsadd + 00014D 5B 08 [ 2] 238 addw sp, #8 + 00014F 89 [ 2] 239 pushw x + 000150 90 89 [ 2] 240 pushw y + 000152 1E 0F [ 2] 241 ldw x, (0x0f, sp) + 000154 89 [ 2] 242 pushw x + 000155 1E 0F [ 2] 243 ldw x, (0x0f, sp) + 000157 89 [ 2] 244 pushw x + 000158 8Ds00r00r00 [ 5] 245 callf ___fsdiv + 00015C 5B 08 [ 2] 246 addw sp, #8 + 00015E 89 [ 2] 247 pushw x + 00015F 90 89 [ 2] 248 pushw y + 000161 1E 07 [ 2] 249 ldw x, (0x07, sp) + 000163 89 [ 2] 250 pushw x + 000164 1E 07 [ 2] 251 ldw x, (0x07, sp) + 000166 89 [ 2] 252 pushw x + 000167 8Ds00r00r00 [ 5] 253 callf ___fsmul + 00016B 5B 08 [ 2] 254 addw sp, #8 + 00016D 89 [ 2] 255 pushw x + 00016E 90 89 [ 2] 256 pushw y + 000170 1E 07 [ 2] 257 ldw x, (0x07, sp) + 000172 89 [ 2] 258 pushw x + 000173 1E 07 [ 2] 259 ldw x, (0x07, sp) + 000175 89 [ 2] 260 pushw x + 000176 8Ds00r00r00 [ 5] 261 callf ___fsadd + 00017A 5B 08 [ 2] 262 addw sp, #8 + 00017C 1F 0B [ 2] 263 ldw (0x0b, sp), x + 00017E 17 09 [ 2] 264 ldw (0x09, sp), y + 000180 265 00109$: + 266 ; ../tanhf.c: 67: if(x<0.0) r=-r; + 000180 5F [ 1] 267 clrw x + 000181 89 [ 2] 268 pushw x + 000182 5F [ 1] 269 clrw x + 000183 89 [ 2] 270 pushw x + 000184 1E 16 [ 2] 271 ldw x, (0x16, sp) + 000186 89 [ 2] 272 pushw x + 000187 1E 16 [ 2] 273 ldw x, (0x16, sp) + 000189 89 [ 2] 274 pushw x + 00018A 8Ds00r00r00 [ 5] 275 callf ___fslt + 00018E 5B 08 [ 2] 276 addw sp, #8 + 000190 4D [ 1] 277 tnz a + 000191 27 0B [ 1] 278 jreq 00111$ + 000193 16 0B [ 2] 279 ldw y, (0x0b, sp) + 000195 1E 09 [ 2] 280 ldw x, (0x09, sp) + 000197 58 [ 2] 281 sllw x + 000198 8C [ 1] 282 ccf + 000199 56 [ 2] 283 rrcw x + 00019A 17 0B [ 2] 284 ldw (0x0b, sp), y + 00019C 1F 09 [ 2] 285 ldw (0x09, sp), x + 00019E 286 00111$: + 287 ; ../tanhf.c: 68: return r; + 00019E 1E 0B [ 2] 288 ldw x, (0x0b, sp) + 0001A0 16 09 [ 2] 289 ldw y, (0x09, sp) + 290 ; ../tanhf.c: 69: } + 0001A2 5B 0C [ 2] 291 addw sp, #12 + 0001A4 87 [ 5] 292 retf + 293 .area CODE + 294 .area CONST + 295 .area INITIALIZER + 296 .area CABS (ABS) diff --git a/device/lib/stm8-large/tanhf.rel b/device/lib/stm8-large/tanhf.rel new file mode 100644 index 0000000..f9b4cbd --- /dev/null +++ b/device/lib/stm8-large/tanhf.rel @@ -0,0 +1,112 @@ +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 1A5 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 12 89 1E 12 89 8D +R 00 00 00 09 +T 00 00 09 00 00 00 5B 04 1F 03 17 01 1E 03 89 1E +R 00 00 00 09 82 03 00 06 +T 00 00 16 03 89 4B B0 4B 2C 4B 10 4B 41 8D +R 00 00 00 09 +T 00 00 21 00 00 00 5B 08 6B 0C 27 0C 5F 1F 0B AE +R 00 00 00 09 82 03 00 03 +T 00 00 2E 3F 80 1F 09 AC 00 01 80 +R 00 00 00 09 80 08 00 09 +T 00 00 36 +R 00 00 00 09 +T 00 00 36 1E 03 89 1E 03 89 4B 54 4B 9F 4B 0C 4B +R 00 00 00 09 +T 00 00 43 3F 8D 00 00 00 5B 08 4D 27 7B 1E 03 89 +R 00 00 00 09 82 05 00 03 +T 00 00 50 1E 03 89 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 5A 00 00 00 5B 08 1F 0B 17 09 1E 0B 89 1E +R 00 00 00 09 82 03 00 05 +T 00 00 67 0B 89 8D 00 00 00 5B 04 1F 0B 17 09 5F +R 00 00 00 09 82 06 00 02 +T 00 00 74 89 4B 80 4B 3F 1E 0F 89 1E 0F 89 8D +R 00 00 00 09 +T 00 00 80 00 00 00 5B 08 1F 0B 17 09 1E 0B 89 1E +R 00 00 00 09 82 03 00 05 +T 00 00 8D 0B 89 5F 89 4B 80 4B 3F 8D +R 00 00 00 09 +T 00 00 96 00 00 00 5B 08 89 90 89 5F 89 4B 00 4B +R 00 00 00 09 82 03 00 07 +T 00 00 A3 3F 8D 00 00 00 5B 08 1F 0B 17 09 1E 0B +R 00 00 00 09 82 05 00 00 +T 00 00 B0 89 1E 0B 89 1E 0F 89 1E 0F 89 8D +R 00 00 00 09 +T 00 00 BB 00 00 00 5B 08 1F 0B 17 09 AC +R 00 00 00 09 82 03 00 05 +T 00 00 C5 00 01 80 +R 00 00 00 09 80 03 00 09 +T 00 00 C8 +R 00 00 00 09 +T 00 00 C8 5F 89 4B 80 4B 39 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 D5 00 00 00 5B 08 4D 27 0C 16 03 17 0B 16 +R 00 00 00 09 82 03 00 03 +T 00 00 E2 01 17 09 AC 00 01 80 +R 00 00 00 09 80 07 00 09 +T 00 00 E9 +R 00 00 00 09 +T 00 00 E9 1E 03 89 1E 03 89 1E 07 89 1E 07 89 8D +R 00 00 00 09 +T 00 00 F6 00 00 00 5B 08 1F 07 17 05 1E 07 89 1E +R 00 00 00 09 82 03 00 01 +T 00 01 03 07 89 4B B2 4B 11 4B 7B 4B BB 8D +R 00 00 00 09 +T 00 01 0E 00 00 00 5B 08 4B C6 4B E2 4B 52 4B BF +R 00 00 00 09 82 03 00 01 +T 00 01 1B 89 90 89 8D 00 00 00 5B 08 1F 0B 1E 07 +R 00 00 00 09 82 07 00 05 +T 00 01 28 89 1E 07 89 1E 0F 89 90 89 8D +R 00 00 00 09 +T 00 01 32 00 00 00 5B 08 1F 0B 17 09 4B 1A 4B 2A +R 00 00 00 09 82 03 00 01 +T 00 01 3F 4B 1E 4B 40 1E 0B 89 1E 0B 89 8D +R 00 00 00 09 +T 00 01 4A 00 00 00 5B 08 89 90 89 1E 0F 89 1E 0F +R 00 00 00 09 82 03 00 05 +T 00 01 57 89 8D 00 00 00 5B 08 89 90 89 1E 07 89 +R 00 00 00 09 82 05 00 07 +T 00 01 64 1E 07 89 8D 00 00 00 5B 08 89 90 89 1E +R 00 00 00 09 82 07 00 01 +T 00 01 71 07 89 1E 07 89 8D 00 00 00 5B 08 1F 0B +R 00 00 00 09 82 09 00 05 +T 00 01 7E 17 09 +R 00 00 00 09 +T 00 01 80 +R 00 00 00 09 +T 00 01 80 5F 89 5F 89 1E 16 89 1E 16 89 8D +R 00 00 00 09 +T 00 01 8B 00 00 00 5B 08 4D 27 0B 16 0B 1E 09 58 +R 00 00 00 09 82 03 00 03 +T 00 01 98 8C 56 17 0B 1F 09 +R 00 00 00 09 +T 00 01 9E +R 00 00 00 09 +T 00 01 9E 1E 0B 16 09 5B 0C 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/tanhf.sym b/device/lib/stm8-large/tanhf.sym new file mode 100644 index 0000000..b48e873 --- /dev/null +++ b/device/lib/stm8-large/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 1A5 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/time.asm b/device/lib/stm8-large/time.asm new file mode 100644 index 0000000..833ab96 --- /dev/null +++ b/device/lib/stm8-large/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: } + retf +; ../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 + callf _RtcRead + addw sp, #2 + popw x + tnz a + jreq 00102$ +; ../time.c: 55: t=mktime(&now); + pushw x + callf _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, (0x14, 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 + retf +; ../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, (0x04, 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) + jrpl 00118$ + ldw x, y + clr (0x1, x) + clr (x) +00118$: +; ../time.c: 92: } + retf +; ../time.c: 95: char *asctime(struct tm *timeptr) { +; ----------------------------------------- +; function asctime +; ----------------------------------------- +_asctime: + sub sp, #12 +; ../time.c: 96: CheckTime(timeptr); + ldw x, (0x10, sp) + pushw x + callf _CheckTime + addw sp, #2 +; ../time.c: 100: timeptr->tm_year+1900); + ldw y, (0x10, 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) + clr a + adc a, #((___month + 0) >> 16) + ldw x, (x) + ldw (0x0b, sp), x + ld a, (0x7, y) + clrw x + ld xl, a + sllw x + addw x, #(___day + 0) + clr a + adc a, #((___day + 0) >> 16) + 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) + callf _sprintf + addw sp, #18 +; ../time.c: 101: return ascTimeBuffer; + ldw x, #(_ascTimeBuffer + 0) +; ../time.c: 102: } + addw sp, #12 + retf +; ../time.c: 104: char *ctime(time_t *timep) { +; ----------------------------------------- +; function ctime +; ----------------------------------------- +_ctime: +; ../time.c: 105: return asctime(localtime(timep)); + ldw x, (0x04, sp) + pushw x + callf _localtime + addw sp, #2 + pushw x + callf _asctime + addw sp, #2 +; ../time.c: 106: } + retf +; ../time.c: 121: struct tm *localtime(time_t *timep) { +; ----------------------------------------- +; function localtime +; ----------------------------------------- +_localtime: +; ../time.c: 122: return gmtime(timep); + ldw x, (0x04, sp) + pushw x + callf _gmtime + addw sp, #2 +; ../time.c: 123: } + retf +; ../time.c: 125: struct tm *gmtime(time_t *timep) { +; ----------------------------------------- +; function gmtime +; ----------------------------------------- +_gmtime: + sub sp, #16 +; ../time.c: 126: unsigned long epoch=*timep; + ldw x, (0x14, sp) + ldw y, x + ldw y, (0x2, y) + ldw x, (x) + ldw (0x0f, sp), y + ldw (0x0d, sp), x +; ../time.c: 131: lastTime.tm_sec=epoch%60; + push #0x3c + clrw x + pushw x + push #0x00 + ldw x, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + callf __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, (0x13, sp) + pushw x + ldw x, (0x13, sp) + pushw x + callf __divulong + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y +; ../time.c: 133: lastTime.tm_min=epoch%60; + ldw x, #(_lastTime + 0)+1 + ldw (0x0f, sp), x + push #0x3c + clrw x + pushw x + push #0x00 + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + callf __modulong + addw sp, #8 + ld a, xl + ldw x, (0x0f, sp) + ld (x), a +; ../time.c: 134: epoch/=60; // now it is hours + push #0x3c + clrw x + pushw x + push #0x00 + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + callf __divulong + addw sp, #8 + ldw (0x0d, sp), x + ldw (0x0b, sp), y +; ../time.c: 135: lastTime.tm_hour=epoch%24; + ldw x, #(_lastTime + 0)+2 + ldw (0x0f, sp), x + push #0x18 + clrw x + pushw x + push #0x00 + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + callf __modulong + addw sp, #8 + ld a, xl + ldw x, (0x0f, sp) + ld (x), a +; ../time.c: 136: epoch/=24; // now it is days + push #0x18 + clrw x + pushw x + push #0x00 + ldw x, (0x11, sp) + pushw x + ldw x, (0x11, sp) + pushw x + callf __divulong + addw sp, #8 + ldw (0x03, sp), x + ldw (0x01, sp), y +; ../time.c: 137: lastTime.tm_wday=(epoch+4)%7; + ldw x, #(_lastTime + 0)+7 + ldw (0x0f, sp), x + ldw x, (0x03, sp) + addw x, #0x0004 + ldw y, (0x01, sp) + jrnc 00164$ + incw y +00164$: + push #0x07 + push #0x00 + push #0x00 + push #0x00 + pushw x + pushw y + callf __modulong + addw sp, #8 + ld a, xl + ldw x, (0x0f, sp) + ld (x), a +; ../time.c: 140: days=0; + clrw x + ldw (0x07, sp), x + ldw (0x05, sp), x +; ../time.c: 141: while((days += (LEAP_YEAR(year) ? 366 : 365)) <= epoch) { + ldw x, #0x07b2 + ldw (0x0f, sp), x +00101$: + ld a, (0x10, sp) + and a, #0x03 + ld (0x0a, sp), a + clr (0x09, sp) + ldw x, (0x09, sp) + jrne 00118$ + ldw x, #0x016e + ldw (0x0d, sp), x + jra 00119$ +00118$: + ldw x, #0x016d + ldw (0x0d, sp), x +00119$: + ldw y, (0x0d, sp) + clrw x + tnzw y + jrpl 00166$ + decw x +00166$: + addw y, (0x07, sp) + ldw (0x0d, sp), y + ld a, xl + adc a, (0x06, sp) + ld (0x0c, sp), a + ld a, xh + adc a, (0x05, sp) + ld (0x0b, sp), a + ldw y, (0x0d, sp) + ldw (0x07, sp), y + ldw y, (0x0b, sp) + ldw (0x05, sp), y + ldw x, (0x03, sp) + cpw x, (0x0d, sp) + ld a, (0x02, sp) + sbc a, (0x0c, sp) + ld a, (0x01, sp) + sbc a, (0x0b, sp) + jrc 00103$ +; ../time.c: 142: year++; + ldw x, (0x0f, sp) + incw x + ldw (0x0f, sp), x + jra 00101$ +00103$: +; ../time.c: 144: lastTime.tm_year=year-1900; + ldw x, #(_lastTime + 0)+5 + ldw y, (0x0f, sp) + subw y, #0x076c + ldw (x), y +; ../time.c: 146: days -= LEAP_YEAR(year) ? 366 : 365; + ldw y, (0x09, sp) + ldw (0x0f, sp), y + ldw x, (0x09, sp) + jrne 00120$ + ldw x, #0x016e + .byte 0xbc +00120$: + ldw x, #0x016d +00121$: + ldw (0x0d, sp), x + clrw x + tnz (0x0d, sp) + jrpl 00170$ + decw x +00170$: + ldw y, (0x07, sp) + subw y, (0x0d, sp) + ld a, (0x06, sp) + pushw x + sbc a, (#2, sp) + popw x + ld xl, a + ld a, (0x05, sp) + pushw x + sbc a, (#1, sp) + popw x + ldw (0x0d, sp), y +; ../time.c: 147: epoch -= days; // now it is days in this year, starting at 0 + ldw y, (0x03, sp) + subw y, (0x0d, sp) + push a + ld a, (0x03, sp) + pushw x + sbc a, (#2, sp) + popw x + ld xl, a + ld a, (0x02, sp) + sbc a, (1, sp) + ld xh, a + pop a + ldw (0x08, sp), y + ldw (0x06, sp), x +; ../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 (0x0e, sp) +00114$: +; ../time.c: 154: if (month==1) { // februari + ld a, (0x0e, sp) + dec a + jrne 00108$ +; ../time.c: 155: if (LEAP_YEAR(year)) { + ldw x, (0x0f, 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]; + clrw x + ld a, (0x0e, sp) + ld xl, a + addw x, #(_monthDays + 0) + ldw (0x0c, sp), x + clr a + adc a, #((_monthDays + 0) >> 16) + ldw x, (0x0c, sp) + ld a, (x) +00109$: +; ../time.c: 164: if (epoch>=monthLength) { + ld (0x0d, sp), a + clr (0x0c, sp) + clr (0x0b, sp) + clr (0x0a, sp) + ldw x, (0x08, sp) + cpw x, (0x0c, sp) + ld a, (0x07, sp) + sbc a, (0x0b, sp) + ld a, (0x06, sp) + sbc a, (0x0a, sp) + jrc 00113$ +; ../time.c: 165: epoch-=monthLength; + ldw y, (0x08, sp) + subw y, (0x0c, sp) + ld a, (0x07, sp) + sbc a, (0x0b, sp) + ld xl, a + ld a, (0x06, sp) + sbc a, (0x0a, sp) + ld xh, a + ldw (0x08, sp), y + ldw (0x06, sp), x +; ../time.c: 153: for (month=0; month<12; month++) { + inc (0x0e, sp) + ld a, (0x0e, sp) + cp a, #0x0c + jrc 00114$ +00113$: +; ../time.c: 170: lastTime.tm_mon=month; + ldw x, #(_lastTime + 0)+4 + ld a, (0x0e, 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, #16 + retf +; ../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, (0x16, 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 + callf _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 + callf __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 + callf __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 + callf __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) + clr a + adc a, #((_monthDays + 0) >> 16) + ld a, (x) + ld xl, a + ld (0x12, sp), a + exg a, xl + 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 + callf __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 + callf __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 + callf __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 + retf + .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-large/time.lst b/device/lib/stm8-large/time.lst new file mode 100644 index 0000000..f242328 --- /dev/null +++ b/device/lib/stm8-large/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 87 [ 5] 70 retf + 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 8Ds00r00r00 [ 5] 88 callf _RtcRead + 000019 5B 02 [ 2] 89 addw sp, #2 + 00001B 85 [ 2] 90 popw x + 00001C 4D [ 1] 91 tnz a + 00001D 27 0B [ 1] 92 jreq 00102$ + 93 ; ../time.c: 55: t=mktime(&now); + 00001F 89 [ 2] 94 pushw x + 000020 8Ds00r02rFB [ 5] 95 callf _mktime + 000024 5B 02 [ 2] 96 addw sp, #2 + 000026 1F 0F [ 2] 97 ldw (0x0f, sp), x + 000028 17 0D [ 2] 98 ldw (0x0d, sp), y + 00002A 99 00102$: + 100 ; ../time.c: 57: if (timeptr) { + 101 ; ../time.c: 58: *timeptr=t; + 00002A 1E 14 [ 2] 102 ldw x, (0x14, sp) + 00002C 27 07 [ 1] 103 jreq 00104$ + 00002E 16 0F [ 2] 104 ldw y, (0x0f, sp) + 000030 EF 02 [ 2] 105 ldw (0x2, x), y + 000032 16 0D [ 2] 106 ldw y, (0x0d, sp) + 000034 FF [ 2] 107 ldw (x), y + 000035 108 00104$: + 109 ; ../time.c: 60: return t; + 000035 1E 0F [ 2] 110 ldw x, (0x0f, sp) + 000037 16 0D [ 2] 111 ldw y, (0x0d, sp) + 112 ; ../time.c: 61: } + 000039 5B 10 [ 2] 113 addw sp, #16 + 00003B 87 [ 5] 114 retf + 115 ; ../time.c: 73: static void CheckTime(struct tm *timeptr) { + 116 ; ----------------------------------------- + 117 ; function CheckTime + 118 ; ----------------------------------------- + 00003C 119 _CheckTime: + 120 ; ../time.c: 84: if (timeptr->tm_sec>59) timeptr->tm_sec=59; + 00003C 16 04 [ 2] 121 ldw y, (0x04, sp) + 00003E 90 F6 [ 1] 122 ld a, (y) + 000040 A1 3B [ 1] 123 cp a, #0x3b + 000042 23 04 [ 2] 124 jrule 00102$ + 000044 A6 3B [ 1] 125 ld a, #0x3b + 000046 90 F7 [ 1] 126 ld (y), a + 000048 127 00102$: + 128 ; ../time.c: 85: if (timeptr->tm_min>59) timeptr->tm_min=59; + 000048 93 [ 1] 129 ldw x, y + 000049 5C [ 1] 130 incw x + 00004A F6 [ 1] 131 ld a, (x) + 00004B A1 3B [ 1] 132 cp a, #0x3b + 00004D 23 03 [ 2] 133 jrule 00104$ + 00004F A6 3B [ 1] 134 ld a, #0x3b + 000051 F7 [ 1] 135 ld (x), a + 000052 136 00104$: + 137 ; ../time.c: 86: if (timeptr->tm_hour>23) timeptr->tm_hour=23; + 000052 93 [ 1] 138 ldw x, y + 000053 5C [ 1] 139 incw x + 000054 5C [ 1] 140 incw x + 000055 F6 [ 1] 141 ld a, (x) + 000056 A1 17 [ 1] 142 cp a, #0x17 + 000058 23 03 [ 2] 143 jrule 00106$ + 00005A A6 17 [ 1] 144 ld a, #0x17 + 00005C F7 [ 1] 145 ld (x), a + 00005D 146 00106$: + 147 ; ../time.c: 87: if (timeptr->tm_wday>6) timeptr->tm_wday=6; + 00005D 93 [ 1] 148 ldw x, y + 00005E 1C 00 07 [ 2] 149 addw x, #0x0007 + 000061 F6 [ 1] 150 ld a, (x) + 000062 A1 06 [ 1] 151 cp a, #0x06 + 000064 23 03 [ 2] 152 jrule 00108$ + 000066 A6 06 [ 1] 153 ld a, #0x06 + 000068 F7 [ 1] 154 ld (x), a + 000069 155 00108$: + 156 ; ../time.c: 88: if (timeptr->tm_mday<1) timeptr->tm_mday=1; + 000069 93 [ 1] 157 ldw x, y + 00006A 1C 00 03 [ 2] 158 addw x, #0x0003 + 00006D F6 [ 1] 159 ld a, (x) + 00006E A1 01 [ 1] 160 cp a, #0x01 + 000070 24 05 [ 1] 161 jrnc 00112$ + 000072 A6 01 [ 1] 162 ld a, #0x01 + 000074 F7 [ 1] 163 ld (x), a + 000075 20 07 [ 2] 164 jra 00113$ + 000077 165 00112$: + 166 ; ../time.c: 89: else if (timeptr->tm_mday>31) timeptr->tm_mday=31; + 000077 A1 1F [ 1] 167 cp a, #0x1f + 000079 23 03 [ 2] 168 jrule 00113$ + 00007B A6 1F [ 1] 169 ld a, #0x1f + 00007D F7 [ 1] 170 ld (x), a + 00007E 171 00113$: + 172 ; ../time.c: 90: if (timeptr->tm_mon>11) timeptr->tm_mon=11; + 00007E 93 [ 1] 173 ldw x, y + 00007F 1C 00 04 [ 2] 174 addw x, #0x0004 + 000082 F6 [ 1] 175 ld a, (x) + 000083 A1 0B [ 1] 176 cp a, #0x0b + 000085 23 03 [ 2] 177 jrule 00115$ + 000087 A6 0B [ 1] 178 ld a, #0x0b + 000089 F7 [ 1] 179 ld (x), a + 00008A 180 00115$: + 181 ; ../time.c: 91: if (timeptr->tm_year<0) timeptr->tm_year=0; + 00008A 72 A9 00 05 [ 2] 182 addw y, #0x0005 + 00008E 93 [ 1] 183 ldw x, y + 00008F FE [ 2] 184 ldw x, (x) + 000090 2A 04 [ 1] 185 jrpl 00118$ + 000092 93 [ 1] 186 ldw x, y + 000093 6F 01 [ 1] 187 clr (0x1, x) + 000095 7F [ 1] 188 clr (x) + 000096 189 00118$: + 190 ; ../time.c: 92: } + 000096 87 [ 5] 191 retf + 192 ; ../time.c: 95: char *asctime(struct tm *timeptr) { + 193 ; ----------------------------------------- + 194 ; function asctime + 195 ; ----------------------------------------- + 000097 196 _asctime: + 000097 52 0C [ 2] 197 sub sp, #12 + 198 ; ../time.c: 96: CheckTime(timeptr); + 000099 1E 10 [ 2] 199 ldw x, (0x10, sp) + 00009B 89 [ 2] 200 pushw x + 00009C 8Ds00r00r3C [ 5] 201 callf _CheckTime + 0000A0 5B 02 [ 2] 202 addw sp, #2 + 203 ; ../time.c: 100: timeptr->tm_year+1900); + 0000A2 16 10 [ 2] 204 ldw y, (0x10, sp) + 0000A4 93 [ 1] 205 ldw x, y + 0000A5 EE 05 [ 2] 206 ldw x, (0x5, x) + 0000A7 1C 07 6C [ 2] 207 addw x, #0x076c + 0000AA 1F 01 [ 2] 208 ldw (0x01, sp), x + 209 ; ../time.c: 99: timeptr->tm_hour, timeptr->tm_min, timeptr->tm_sec, + 0000AC 90 F6 [ 1] 210 ld a, (y) + 0000AE 6B 04 [ 1] 211 ld (0x04, sp), a + 0000B0 0F 03 [ 1] 212 clr (0x03, sp) + 0000B2 93 [ 1] 213 ldw x, y + 0000B3 E6 01 [ 1] 214 ld a, (0x1, x) + 0000B5 6B 06 [ 1] 215 ld (0x06, sp), a + 0000B7 0F 05 [ 1] 216 clr (0x05, sp) + 0000B9 93 [ 1] 217 ldw x, y + 0000BA E6 02 [ 1] 218 ld a, (0x2, x) + 0000BC 6B 08 [ 1] 219 ld (0x08, sp), a + 0000BE 0F 07 [ 1] 220 clr (0x07, sp) + 221 ; ../time.c: 98: __day[timeptr->tm_wday], __month[timeptr->tm_mon], timeptr->tm_mday, + 0000C0 93 [ 1] 222 ldw x, y + 0000C1 E6 03 [ 1] 223 ld a, (0x3, x) + 0000C3 6B 0A [ 1] 224 ld (0x0a, sp), a + 0000C5 0F 09 [ 1] 225 clr (0x09, sp) + 0000C7 93 [ 1] 226 ldw x, y + 0000C8 E6 04 [ 1] 227 ld a, (0x4, x) + 0000CA 5F [ 1] 228 clrw x + 0000CB 97 [ 1] 229 ld xl, a + 0000CC 58 [ 2] 230 sllw x + 0000CD 1Cr00r0C [ 2] 231 addw x, #(___month + 0) + 0000D0 4F [ 1] 232 clr a + 0000D1 A9s00 [ 1] 233 adc a, #((___month + 0) >> 16) + 0000D3 FE [ 2] 234 ldw x, (x) + 0000D4 1F 0B [ 2] 235 ldw (0x0b, sp), x + 0000D6 90 E6 07 [ 1] 236 ld a, (0x7, y) + 0000D9 5F [ 1] 237 clrw x + 0000DA 97 [ 1] 238 ld xl, a + 0000DB 58 [ 2] 239 sllw x + 0000DC 1Cr00r24 [ 2] 240 addw x, #(___day + 0) + 0000DF 4F [ 1] 241 clr a + 0000E0 A9s00 [ 1] 242 adc a, #((___day + 0) >> 16) + 0000E2 FE [ 2] 243 ldw x, (x) + 0000E3 90 93 [ 1] 244 ldw y, x + 245 ; ../time.c: 97: sprintf (ascTimeBuffer, "%s %s %2d %02d:%02d:%02d %04d\n", + 0000E5 1E 01 [ 2] 246 ldw x, (0x01, sp) + 0000E7 89 [ 2] 247 pushw x + 0000E8 1E 05 [ 2] 248 ldw x, (0x05, sp) + 0000EA 89 [ 2] 249 pushw x + 0000EB 1E 09 [ 2] 250 ldw x, (0x09, sp) + 0000ED 89 [ 2] 251 pushw x + 0000EE 1E 0D [ 2] 252 ldw x, (0x0d, sp) + 0000F0 89 [ 2] 253 pushw x + 0000F1 1E 11 [ 2] 254 ldw x, (0x11, sp) + 0000F3 89 [ 2] 255 pushw x + 0000F4 1E 15 [ 2] 256 ldw x, (0x15, sp) + 0000F6 89 [ 2] 257 pushw x + 0000F7 90 89 [ 2] 258 pushw y + 0000F9 4Br32 [ 1] 259 push #<(___str_0 + 0) + 0000FB 4Bs00 [ 1] 260 push #((___str_0 + 0) >> 8) + 0000FD 4Br00 [ 1] 261 push #<(_ascTimeBuffer + 0) + 0000FF 4Bs00 [ 1] 262 push #((_ascTimeBuffer + 0) >> 8) + 000101 8Ds00r00r00 [ 5] 263 callf _sprintf + 000105 5B 12 [ 2] 264 addw sp, #18 + 265 ; ../time.c: 101: return ascTimeBuffer; + 000107 AEr00r00 [ 2] 266 ldw x, #(_ascTimeBuffer + 0) + 267 ; ../time.c: 102: } + 00010A 5B 0C [ 2] 268 addw sp, #12 + 00010C 87 [ 5] 269 retf + 270 ; ../time.c: 104: char *ctime(time_t *timep) { + 271 ; ----------------------------------------- + 272 ; function ctime + 273 ; ----------------------------------------- + 00010D 274 _ctime: + 275 ; ../time.c: 105: return asctime(localtime(timep)); + 00010D 1E 04 [ 2] 276 ldw x, (0x04, sp) + 00010F 89 [ 2] 277 pushw x + 000110 8Ds00r01r1E [ 5] 278 callf _localtime + 000114 5B 02 [ 2] 279 addw sp, #2 + 000116 89 [ 2] 280 pushw x + 000117 8Ds00r00r97 [ 5] 281 callf _asctime + 00011B 5B 02 [ 2] 282 addw sp, #2 + 283 ; ../time.c: 106: } + 00011D 87 [ 5] 284 retf + 285 ; ../time.c: 121: struct tm *localtime(time_t *timep) { + 286 ; ----------------------------------------- + 287 ; function localtime + 288 ; ----------------------------------------- + 00011E 289 _localtime: + 290 ; ../time.c: 122: return gmtime(timep); + 00011E 1E 04 [ 2] 291 ldw x, (0x04, sp) + 000120 89 [ 2] 292 pushw x + 000121 8Ds00r01r28 [ 5] 293 callf _gmtime + 000125 5B 02 [ 2] 294 addw sp, #2 + 295 ; ../time.c: 123: } + 000127 87 [ 5] 296 retf + 297 ; ../time.c: 125: struct tm *gmtime(time_t *timep) { + 298 ; ----------------------------------------- + 299 ; function gmtime + 300 ; ----------------------------------------- + 000128 301 _gmtime: + 000128 52 10 [ 2] 302 sub sp, #16 + 303 ; ../time.c: 126: unsigned long epoch=*timep; + 00012A 1E 14 [ 2] 304 ldw x, (0x14, sp) + 00012C 90 93 [ 1] 305 ldw y, x + 00012E 90 EE 02 [ 2] 306 ldw y, (0x2, y) + 000131 FE [ 2] 307 ldw x, (x) + 000132 17 0F [ 2] 308 ldw (0x0f, sp), y + 000134 1F 0D [ 2] 309 ldw (0x0d, sp), x + 310 ; ../time.c: 131: lastTime.tm_sec=epoch%60; + 000136 4B 3C [ 1] 311 push #0x3c + 000138 5F [ 1] 312 clrw x + 000139 89 [ 2] 313 pushw x + 00013A 4B 00 [ 1] 314 push #0x00 + 00013C 1E 13 [ 2] 315 ldw x, (0x13, sp) + 00013E 89 [ 2] 316 pushw x + 00013F 1E 13 [ 2] 317 ldw x, (0x13, sp) + 000141 89 [ 2] 318 pushw x + 000142 8Ds00r00r00 [ 5] 319 callf __modulong + 000146 5B 08 [ 2] 320 addw sp, #8 + 000148 9F [ 1] 321 ld a, xl + 000149 C7u00u20 [ 1] 322 ld _lastTime+0, a + 323 ; ../time.c: 132: epoch/=60; // now it is minutes + 00014C 4B 3C [ 1] 324 push #0x3c + 00014E 5F [ 1] 325 clrw x + 00014F 89 [ 2] 326 pushw x + 000150 4B 00 [ 1] 327 push #0x00 + 000152 1E 13 [ 2] 328 ldw x, (0x13, sp) + 000154 89 [ 2] 329 pushw x + 000155 1E 13 [ 2] 330 ldw x, (0x13, sp) + 000157 89 [ 2] 331 pushw x + 000158 8Ds00r00r00 [ 5] 332 callf __divulong + 00015C 5B 08 [ 2] 333 addw sp, #8 + 00015E 1F 0D [ 2] 334 ldw (0x0d, sp), x + 000160 17 0B [ 2] 335 ldw (0x0b, sp), y + 336 ; ../time.c: 133: lastTime.tm_min=epoch%60; + 000162 AEr00r21 [ 2] 337 ldw x, #(_lastTime + 0)+1 + 000165 1F 0F [ 2] 338 ldw (0x0f, sp), x + 000167 4B 3C [ 1] 339 push #0x3c + 000169 5F [ 1] 340 clrw x + 00016A 89 [ 2] 341 pushw x + 00016B 4B 00 [ 1] 342 push #0x00 + 00016D 1E 11 [ 2] 343 ldw x, (0x11, sp) + 00016F 89 [ 2] 344 pushw x + 000170 1E 11 [ 2] 345 ldw x, (0x11, sp) + 000172 89 [ 2] 346 pushw x + 000173 8Ds00r00r00 [ 5] 347 callf __modulong + 000177 5B 08 [ 2] 348 addw sp, #8 + 000179 9F [ 1] 349 ld a, xl + 00017A 1E 0F [ 2] 350 ldw x, (0x0f, sp) + 00017C F7 [ 1] 351 ld (x), a + 352 ; ../time.c: 134: epoch/=60; // now it is hours + 00017D 4B 3C [ 1] 353 push #0x3c + 00017F 5F [ 1] 354 clrw x + 000180 89 [ 2] 355 pushw x + 000181 4B 00 [ 1] 356 push #0x00 + 000183 1E 11 [ 2] 357 ldw x, (0x11, sp) + 000185 89 [ 2] 358 pushw x + 000186 1E 11 [ 2] 359 ldw x, (0x11, sp) + 000188 89 [ 2] 360 pushw x + 000189 8Ds00r00r00 [ 5] 361 callf __divulong + 00018D 5B 08 [ 2] 362 addw sp, #8 + 00018F 1F 0D [ 2] 363 ldw (0x0d, sp), x + 000191 17 0B [ 2] 364 ldw (0x0b, sp), y + 365 ; ../time.c: 135: lastTime.tm_hour=epoch%24; + 000193 AEr00r22 [ 2] 366 ldw x, #(_lastTime + 0)+2 + 000196 1F 0F [ 2] 367 ldw (0x0f, sp), x + 000198 4B 18 [ 1] 368 push #0x18 + 00019A 5F [ 1] 369 clrw x + 00019B 89 [ 2] 370 pushw x + 00019C 4B 00 [ 1] 371 push #0x00 + 00019E 1E 11 [ 2] 372 ldw x, (0x11, sp) + 0001A0 89 [ 2] 373 pushw x + 0001A1 1E 11 [ 2] 374 ldw x, (0x11, sp) + 0001A3 89 [ 2] 375 pushw x + 0001A4 8Ds00r00r00 [ 5] 376 callf __modulong + 0001A8 5B 08 [ 2] 377 addw sp, #8 + 0001AA 9F [ 1] 378 ld a, xl + 0001AB 1E 0F [ 2] 379 ldw x, (0x0f, sp) + 0001AD F7 [ 1] 380 ld (x), a + 381 ; ../time.c: 136: epoch/=24; // now it is days + 0001AE 4B 18 [ 1] 382 push #0x18 + 0001B0 5F [ 1] 383 clrw x + 0001B1 89 [ 2] 384 pushw x + 0001B2 4B 00 [ 1] 385 push #0x00 + 0001B4 1E 11 [ 2] 386 ldw x, (0x11, sp) + 0001B6 89 [ 2] 387 pushw x + 0001B7 1E 11 [ 2] 388 ldw x, (0x11, sp) + 0001B9 89 [ 2] 389 pushw x + 0001BA 8Ds00r00r00 [ 5] 390 callf __divulong + 0001BE 5B 08 [ 2] 391 addw sp, #8 + 0001C0 1F 03 [ 2] 392 ldw (0x03, sp), x + 0001C2 17 01 [ 2] 393 ldw (0x01, sp), y + 394 ; ../time.c: 137: lastTime.tm_wday=(epoch+4)%7; + 0001C4 AEr00r27 [ 2] 395 ldw x, #(_lastTime + 0)+7 + 0001C7 1F 0F [ 2] 396 ldw (0x0f, sp), x + 0001C9 1E 03 [ 2] 397 ldw x, (0x03, sp) + 0001CB 1C 00 04 [ 2] 398 addw x, #0x0004 + 0001CE 16 01 [ 2] 399 ldw y, (0x01, sp) + 0001D0 24 02 [ 1] 400 jrnc 00164$ + 0001D2 90 5C [ 1] 401 incw y + 0001D4 402 00164$: + 0001D4 4B 07 [ 1] 403 push #0x07 + 0001D6 4B 00 [ 1] 404 push #0x00 + 0001D8 4B 00 [ 1] 405 push #0x00 + 0001DA 4B 00 [ 1] 406 push #0x00 + 0001DC 89 [ 2] 407 pushw x + 0001DD 90 89 [ 2] 408 pushw y + 0001DF 8Ds00r00r00 [ 5] 409 callf __modulong + 0001E3 5B 08 [ 2] 410 addw sp, #8 + 0001E5 9F [ 1] 411 ld a, xl + 0001E6 1E 0F [ 2] 412 ldw x, (0x0f, sp) + 0001E8 F7 [ 1] 413 ld (x), a + 414 ; ../time.c: 140: days=0; + 0001E9 5F [ 1] 415 clrw x + 0001EA 1F 07 [ 2] 416 ldw (0x07, sp), x + 0001EC 1F 05 [ 2] 417 ldw (0x05, sp), x + 418 ; ../time.c: 141: while((days += (LEAP_YEAR(year) ? 366 : 365)) <= epoch) { + 0001EE AE 07 B2 [ 2] 419 ldw x, #0x07b2 + 0001F1 1F 0F [ 2] 420 ldw (0x0f, sp), x + 0001F3 421 00101$: + 0001F3 7B 10 [ 1] 422 ld a, (0x10, sp) + 0001F5 A4 03 [ 1] 423 and a, #0x03 + 0001F7 6B 0A [ 1] 424 ld (0x0a, sp), a + 0001F9 0F 09 [ 1] 425 clr (0x09, sp) + 0001FB 1E 09 [ 2] 426 ldw x, (0x09, sp) + 0001FD 26 07 [ 1] 427 jrne 00118$ + 0001FF AE 01 6E [ 2] 428 ldw x, #0x016e + 000202 1F 0D [ 2] 429 ldw (0x0d, sp), x + 000204 20 05 [ 2] 430 jra 00119$ + 000206 431 00118$: + 000206 AE 01 6D [ 2] 432 ldw x, #0x016d + 000209 1F 0D [ 2] 433 ldw (0x0d, sp), x + 00020B 434 00119$: + 00020B 16 0D [ 2] 435 ldw y, (0x0d, sp) + 00020D 5F [ 1] 436 clrw x + 00020E 90 5D [ 2] 437 tnzw y + 000210 2A 01 [ 1] 438 jrpl 00166$ + 000212 5A [ 2] 439 decw x + 000213 440 00166$: + 000213 72 F9 07 [ 2] 441 addw y, (0x07, sp) + 000216 17 0D [ 2] 442 ldw (0x0d, sp), y + 000218 9F [ 1] 443 ld a, xl + 000219 19 06 [ 1] 444 adc a, (0x06, sp) + 00021B 6B 0C [ 1] 445 ld (0x0c, sp), a + 00021D 9E [ 1] 446 ld a, xh + 00021E 19 05 [ 1] 447 adc a, (0x05, sp) + 000220 6B 0B [ 1] 448 ld (0x0b, sp), a + 000222 16 0D [ 2] 449 ldw y, (0x0d, sp) + 000224 17 07 [ 2] 450 ldw (0x07, sp), y + 000226 16 0B [ 2] 451 ldw y, (0x0b, sp) + 000228 17 05 [ 2] 452 ldw (0x05, sp), y + 00022A 1E 03 [ 2] 453 ldw x, (0x03, sp) + 00022C 13 0D [ 2] 454 cpw x, (0x0d, sp) + 00022E 7B 02 [ 1] 455 ld a, (0x02, sp) + 000230 12 0C [ 1] 456 sbc a, (0x0c, sp) + 000232 7B 01 [ 1] 457 ld a, (0x01, sp) + 000234 12 0B [ 1] 458 sbc a, (0x0b, sp) + 000236 25 07 [ 1] 459 jrc 00103$ + 460 ; ../time.c: 142: year++; + 000238 1E 0F [ 2] 461 ldw x, (0x0f, sp) + 00023A 5C [ 1] 462 incw x + 00023B 1F 0F [ 2] 463 ldw (0x0f, sp), x + 00023D 20 B4 [ 2] 464 jra 00101$ + 00023F 465 00103$: + 466 ; ../time.c: 144: lastTime.tm_year=year-1900; + 00023F AEr00r25 [ 2] 467 ldw x, #(_lastTime + 0)+5 + 000242 16 0F [ 2] 468 ldw y, (0x0f, sp) + 000244 72 A2 07 6C [ 2] 469 subw y, #0x076c + 000248 FF [ 2] 470 ldw (x), y + 471 ; ../time.c: 146: days -= LEAP_YEAR(year) ? 366 : 365; + 000249 16 09 [ 2] 472 ldw y, (0x09, sp) + 00024B 17 0F [ 2] 473 ldw (0x0f, sp), y + 00024D 1E 09 [ 2] 474 ldw x, (0x09, sp) + 00024F 26 04 [ 1] 475 jrne 00120$ + 000251 AE 01 6E [ 2] 476 ldw x, #0x016e + 000254 BC 477 .byte 0xbc + 000255 478 00120$: + 000255 AE 01 6D [ 2] 479 ldw x, #0x016d + 000258 480 00121$: + 000258 1F 0D [ 2] 481 ldw (0x0d, sp), x + 00025A 5F [ 1] 482 clrw x + 00025B 0D 0D [ 1] 483 tnz (0x0d, sp) + 00025D 2A 01 [ 1] 484 jrpl 00170$ + 00025F 5A [ 2] 485 decw x + 000260 486 00170$: + 000260 16 07 [ 2] 487 ldw y, (0x07, sp) + 000262 72 F2 0D [ 2] 488 subw y, (0x0d, sp) + 000265 7B 06 [ 1] 489 ld a, (0x06, sp) + 000267 89 [ 2] 490 pushw x + 000268 12 02 [ 1] 491 sbc a, (#2, sp) + 00026A 85 [ 2] 492 popw x + 00026B 97 [ 1] 493 ld xl, a + 00026C 7B 05 [ 1] 494 ld a, (0x05, sp) + 00026E 89 [ 2] 495 pushw x + 00026F 12 01 [ 1] 496 sbc a, (#1, sp) + 000271 85 [ 2] 497 popw x + 000272 17 0D [ 2] 498 ldw (0x0d, sp), y + 499 ; ../time.c: 147: epoch -= days; // now it is days in this year, starting at 0 + 000274 16 03 [ 2] 500 ldw y, (0x03, sp) + 000276 72 F2 0D [ 2] 501 subw y, (0x0d, sp) + 000279 88 [ 1] 502 push a + 00027A 7B 03 [ 1] 503 ld a, (0x03, sp) + 00027C 89 [ 2] 504 pushw x + 00027D 12 02 [ 1] 505 sbc a, (#2, sp) + 00027F 85 [ 2] 506 popw x + 000280 97 [ 1] 507 ld xl, a + 000281 7B 02 [ 1] 508 ld a, (0x02, sp) + 000283 12 01 [ 1] 509 sbc a, (1, sp) + 000285 95 [ 1] 510 ld xh, a + 000286 84 [ 1] 511 pop a + 000287 17 08 [ 2] 512 ldw (0x08, sp), y + 000289 1F 06 [ 2] 513 ldw (0x06, sp), x + 514 ; ../time.c: 148: lastTime.tm_yday=epoch; + 00028B AEr00r28 [ 2] 515 ldw x, #(_lastTime + 0)+8 + 00028E 16 08 [ 2] 516 ldw y, (0x08, sp) + 000290 FF [ 2] 517 ldw (x), y + 518 ; ../time.c: 153: for (month=0; month<12; month++) { + 000291 0F 0E [ 1] 519 clr (0x0e, sp) + 000293 520 00114$: + 521 ; ../time.c: 154: if (month==1) { // februari + 000293 7B 0E [ 1] 522 ld a, (0x0e, sp) + 000295 4A [ 1] 523 dec a + 000296 26 0C [ 1] 524 jrne 00108$ + 525 ; ../time.c: 155: if (LEAP_YEAR(year)) { + 000298 1E 0F [ 2] 526 ldw x, (0x0f, sp) + 00029A 26 04 [ 1] 527 jrne 00105$ + 528 ; ../time.c: 156: monthLength=29; + 00029C A6 1D [ 1] 529 ld a, #0x1d + 00029E 20 13 [ 2] 530 jra 00109$ + 0002A0 531 00105$: + 532 ; ../time.c: 158: monthLength=28; + 0002A0 A6 1C [ 1] 533 ld a, #0x1c + 0002A2 20 0F [ 2] 534 jra 00109$ + 0002A4 535 00108$: + 536 ; ../time.c: 161: monthLength = monthDays[month]; + 0002A4 5F [ 1] 537 clrw x + 0002A5 7B 0E [ 1] 538 ld a, (0x0e, sp) + 0002A7 97 [ 1] 539 ld xl, a + 0002A8 1Cr00r00 [ 2] 540 addw x, #(_monthDays + 0) + 0002AB 1F 0C [ 2] 541 ldw (0x0c, sp), x + 0002AD 4F [ 1] 542 clr a + 0002AE A9s00 [ 1] 543 adc a, #((_monthDays + 0) >> 16) + 0002B0 1E 0C [ 2] 544 ldw x, (0x0c, sp) + 0002B2 F6 [ 1] 545 ld a, (x) + 0002B3 546 00109$: + 547 ; ../time.c: 164: if (epoch>=monthLength) { + 0002B3 6B 0D [ 1] 548 ld (0x0d, sp), a + 0002B5 0F 0C [ 1] 549 clr (0x0c, sp) + 0002B7 0F 0B [ 1] 550 clr (0x0b, sp) + 0002B9 0F 0A [ 1] 551 clr (0x0a, sp) + 0002BB 1E 08 [ 2] 552 ldw x, (0x08, sp) + 0002BD 13 0C [ 2] 553 cpw x, (0x0c, sp) + 0002BF 7B 07 [ 1] 554 ld a, (0x07, sp) + 0002C1 12 0B [ 1] 555 sbc a, (0x0b, sp) + 0002C3 7B 06 [ 1] 556 ld a, (0x06, sp) + 0002C5 12 0A [ 1] 557 sbc a, (0x0a, sp) + 0002C7 25 1B [ 1] 558 jrc 00113$ + 559 ; ../time.c: 165: epoch-=monthLength; + 0002C9 16 08 [ 2] 560 ldw y, (0x08, sp) + 0002CB 72 F2 0C [ 2] 561 subw y, (0x0c, sp) + 0002CE 7B 07 [ 1] 562 ld a, (0x07, sp) + 0002D0 12 0B [ 1] 563 sbc a, (0x0b, sp) + 0002D2 97 [ 1] 564 ld xl, a + 0002D3 7B 06 [ 1] 565 ld a, (0x06, sp) + 0002D5 12 0A [ 1] 566 sbc a, (0x0a, sp) + 0002D7 95 [ 1] 567 ld xh, a + 0002D8 17 08 [ 2] 568 ldw (0x08, sp), y + 0002DA 1F 06 [ 2] 569 ldw (0x06, sp), x + 570 ; ../time.c: 153: for (month=0; month<12; month++) { + 0002DC 0C 0E [ 1] 571 inc (0x0e, sp) + 0002DE 7B 0E [ 1] 572 ld a, (0x0e, sp) + 0002E0 A1 0C [ 1] 573 cp a, #0x0c + 0002E2 25 AF [ 1] 574 jrc 00114$ + 0002E4 575 00113$: + 576 ; ../time.c: 170: lastTime.tm_mon=month; + 0002E4 AEr00r24 [ 2] 577 ldw x, #(_lastTime + 0)+4 + 0002E7 7B 0E [ 1] 578 ld a, (0x0e, sp) + 0002E9 F7 [ 1] 579 ld (x), a + 580 ; ../time.c: 171: lastTime.tm_mday=epoch+1; + 0002EA AEr00r23 [ 2] 581 ldw x, #(_lastTime + 0)+3 + 0002ED 7B 09 [ 1] 582 ld a, (0x09, sp) + 0002EF 4C [ 1] 583 inc a + 0002F0 F7 [ 1] 584 ld (x), a + 585 ; ../time.c: 173: lastTime.tm_isdst=0; + 0002F1 AEr00r2A [ 2] 586 ldw x, #(_lastTime + 0)+10 + 0002F4 7F [ 1] 587 clr (x) + 588 ; ../time.c: 175: return &lastTime; + 0002F5 AEr00r20 [ 2] 589 ldw x, #(_lastTime + 0) + 590 ; ../time.c: 176: } + 0002F8 5B 10 [ 2] 591 addw sp, #16 + 0002FA 87 [ 5] 592 retf + 593 ; ../time.c: 179: time_t mktime(struct tm *timeptr) { + 594 ; ----------------------------------------- + 595 ; function mktime + 596 ; ----------------------------------------- + 0002FB 597 _mktime: + 0002FB 52 12 [ 2] 598 sub sp, #18 + 599 ; ../time.c: 180: int year=timeptr->tm_year+1900, month=timeptr->tm_mon, i; + 0002FD 16 16 [ 2] 600 ldw y, (0x16, sp) + 0002FF 17 01 [ 2] 601 ldw (0x01, sp), y + 000301 93 [ 1] 602 ldw x, y + 000302 EE 05 [ 2] 603 ldw x, (0x5, x) + 000304 1C 07 6C [ 2] 604 addw x, #0x076c + 000307 1F 0B [ 2] 605 ldw (0x0b, sp), x + 000309 1E 01 [ 2] 606 ldw x, (0x01, sp) + 00030B E6 04 [ 1] 607 ld a, (0x4, x) + 00030D 5F [ 1] 608 clrw x + 00030E 97 [ 1] 609 ld xl, a + 00030F 1F 03 [ 2] 610 ldw (0x03, sp), x + 611 ; ../time.c: 183: CheckTime(timeptr); + 000311 1E 01 [ 2] 612 ldw x, (0x01, sp) + 000313 89 [ 2] 613 pushw x + 000314 8Ds00r00r3C [ 5] 614 callf _CheckTime + 000318 5B 02 [ 2] 615 addw sp, #2 + 616 ; ../time.c: 186: seconds= (year-1970)*(60*60*24L*365); + 00031A 1E 0B [ 2] 617 ldw x, (0x0b, sp) + 00031C 1D 07 B2 [ 2] 618 subw x, #0x07b2 + 00031F 90 5F [ 1] 619 clrw y + 000321 5D [ 2] 620 tnzw x + 000322 2A 02 [ 1] 621 jrpl 00154$ + 000324 90 5A [ 2] 622 decw y + 000326 623 00154$: + 000326 89 [ 2] 624 pushw x + 000327 90 89 [ 2] 625 pushw y + 000329 4B 80 [ 1] 626 push #0x80 + 00032B 4B 33 [ 1] 627 push #0x33 + 00032D 4B E1 [ 1] 628 push #0xe1 + 00032F 4B 01 [ 1] 629 push #0x01 + 000331 8Ds00r00r00 [ 5] 630 callf __mullong + 000335 5B 08 [ 2] 631 addw sp, #8 + 632 ; ../time.c: 189: for (i=1970; i<year; i++) { + 000337 1F 11 [ 2] 633 ldw (0x11, sp), x + 000339 17 0F [ 2] 634 ldw (0x0f, sp), y + 00033B AE 07 B2 [ 2] 635 ldw x, #0x07b2 + 00033E 1F 0D [ 2] 636 ldw (0x0d, sp), x + 000340 637 00110$: + 000340 1E 0D [ 2] 638 ldw x, (0x0d, sp) + 000342 13 0B [ 2] 639 cpw x, (0x0b, sp) + 000344 2E 2A [ 1] 640 jrsge 00124$ + 641 ; ../time.c: 190: if (LEAP_YEAR(i)) { + 000346 4B 04 [ 1] 642 push #0x04 + 000348 4B 00 [ 1] 643 push #0x00 + 00034A 1E 0F [ 2] 644 ldw x, (0x0f, sp) + 00034C 89 [ 2] 645 pushw x + 00034D 8Ds00r00r00 [ 5] 646 callf __modsint + 000351 5B 04 [ 2] 647 addw sp, #4 + 000353 5D [ 2] 648 tnzw x + 000354 26 13 [ 1] 649 jrne 00111$ + 650 ; ../time.c: 191: seconds+= 60*60*24L; + 000356 1E 11 [ 2] 651 ldw x, (0x11, sp) + 000358 1C 51 80 [ 2] 652 addw x, #0x5180 + 00035B 1F 11 [ 2] 653 ldw (0x11, sp), x + 00035D 7B 10 [ 1] 654 ld a, (0x10, sp) + 00035F A9 01 [ 1] 655 adc a, #0x01 + 000361 6B 10 [ 1] 656 ld (0x10, sp), a + 000363 7B 0F [ 1] 657 ld a, (0x0f, sp) + 000365 A9 00 [ 1] 658 adc a, #0x00 + 000367 6B 0F [ 1] 659 ld (0x0f, sp), a + 000369 660 00111$: + 661 ; ../time.c: 189: for (i=1970; i<year; i++) { + 000369 1E 0D [ 2] 662 ldw x, (0x0d, sp) + 00036B 5C [ 1] 663 incw x + 00036C 1F 0D [ 2] 664 ldw (0x0d, sp), x + 00036E 20 D0 [ 2] 665 jra 00110$ + 000370 666 00124$: + 000370 16 11 [ 2] 667 ldw y, (0x11, sp) + 000372 17 07 [ 2] 668 ldw (0x07, sp), y + 000374 16 0F [ 2] 669 ldw y, (0x0f, sp) + 000376 17 05 [ 2] 670 ldw (0x05, sp), y + 671 ; ../time.c: 196: for (i=0; i<month; i++) { + 000378 4B 04 [ 1] 672 push #0x04 + 00037A 4B 00 [ 1] 673 push #0x00 + 00037C 1E 0D [ 2] 674 ldw x, (0x0d, sp) + 00037E 89 [ 2] 675 pushw x + 00037F 8Ds00r00r00 [ 5] 676 callf __modsint + 000383 5B 04 [ 2] 677 addw sp, #4 + 000385 1F 09 [ 2] 678 ldw (0x09, sp), x + 000387 90 5F [ 1] 679 clrw y + 000389 680 00113$: + 000389 51 [ 1] 681 exgw x, y + 00038A 13 03 [ 2] 682 cpw x, (0x03, sp) + 00038C 51 [ 1] 683 exgw x, y + 00038D 2E 68 [ 1] 684 jrsge 00108$ + 685 ; ../time.c: 197: if (i==1 && LEAP_YEAR(year)) { + 00038F 90 A3 00 01 [ 2] 686 cpw y, #0x0001 + 000393 26 1B [ 1] 687 jrne 00105$ + 000395 1E 09 [ 2] 688 ldw x, (0x09, sp) + 000397 26 17 [ 1] 689 jrne 00105$ + 690 ; ../time.c: 198: seconds+= 60*60*24L*29; + 000399 1E 07 [ 2] 691 ldw x, (0x07, sp) + 00039B 1C 3B 80 [ 2] 692 addw x, #0x3b80 + 00039E 1F 11 [ 2] 693 ldw (0x11, sp), x + 0003A0 1E 05 [ 2] 694 ldw x, (0x05, sp) + 0003A2 24 01 [ 1] 695 jrnc 00163$ + 0003A4 5C [ 1] 696 incw x + 0003A5 697 00163$: + 0003A5 1C 00 26 [ 2] 698 addw x, #0x0026 + 0003A8 1F 05 [ 2] 699 ldw (0x05, sp), x + 0003AA 1E 11 [ 2] 700 ldw x, (0x11, sp) + 0003AC 1F 07 [ 2] 701 ldw (0x07, sp), x + 0003AE 20 43 [ 2] 702 jra 00114$ + 0003B0 703 00105$: + 704 ; ../time.c: 200: seconds+= 60*60*24L*monthDays[i]; + 0003B0 93 [ 1] 705 ldw x, y + 0003B1 1Cr00r00 [ 2] 706 addw x, #(_monthDays + 0) + 0003B4 4F [ 1] 707 clr a + 0003B5 A9s00 [ 1] 708 adc a, #((_monthDays + 0) >> 16) + 0003B7 F6 [ 1] 709 ld a, (x) + 0003B8 97 [ 1] 710 ld xl, a + 0003B9 6B 12 [ 1] 711 ld (0x12, sp), a + 0003BB 41 [ 1] 712 exg a, xl + 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 8Ds00r00r00 [ 5] 725 callf __mullong + 0003D6 5B 08 [ 2] 726 addw sp, #8 + 0003D8 1F 0F [ 2] 727 ldw (0x0f, sp), x + 0003DA 17 0D [ 2] 728 ldw (0x0d, sp), y + 0003DC 90 85 [ 2] 729 popw y + 0003DE 1E 07 [ 2] 730 ldw x, (0x07, sp) + 0003E0 72 FB 0D [ 2] 731 addw x, (0x0d, sp) + 0003E3 1F 11 [ 2] 732 ldw (0x11, sp), x + 0003E5 1E 05 [ 2] 733 ldw x, (0x05, sp) + 0003E7 24 01 [ 1] 734 jrnc 00164$ + 0003E9 5C [ 1] 735 incw x + 0003EA 736 00164$: + 0003EA 72 FB 0B [ 2] 737 addw x, (0x0b, sp) + 0003ED 1F 05 [ 2] 738 ldw (0x05, sp), x + 0003EF 1E 11 [ 2] 739 ldw x, (0x11, sp) + 0003F1 1F 07 [ 2] 740 ldw (0x07, sp), x + 0003F3 741 00114$: + 742 ; ../time.c: 196: for (i=0; i<month; i++) { + 0003F3 90 5C [ 1] 743 incw y + 0003F5 20 92 [ 2] 744 jra 00113$ + 0003F7 745 00108$: + 746 ; ../time.c: 204: seconds+= (timeptr->tm_mday-1)*60*60*24L; + 0003F7 1E 01 [ 2] 747 ldw x, (0x01, sp) + 0003F9 E6 03 [ 1] 748 ld a, (0x3, x) + 0003FB 5F [ 1] 749 clrw x + 0003FC 97 [ 1] 750 ld xl, a + 0003FD 5A [ 2] 751 decw x + 0003FE 90 5F [ 1] 752 clrw y + 000400 5D [ 2] 753 tnzw x + 000401 2A 02 [ 1] 754 jrpl 00165$ + 000403 90 5A [ 2] 755 decw y + 000405 756 00165$: + 000405 89 [ 2] 757 pushw x + 000406 90 89 [ 2] 758 pushw y + 000408 4B 80 [ 1] 759 push #0x80 + 00040A 4B 51 [ 1] 760 push #0x51 + 00040C 4B 01 [ 1] 761 push #0x01 + 00040E 4B 00 [ 1] 762 push #0x00 + 000410 8Ds00r00r00 [ 5] 763 callf __mullong + 000414 5B 08 [ 2] 764 addw sp, #8 + 000416 51 [ 1] 765 exgw x, y + 000417 72 F9 07 [ 2] 766 addw y, (0x07, sp) + 00041A 9F [ 1] 767 ld a, xl + 00041B 19 06 [ 1] 768 adc a, (0x06, sp) + 00041D 02 [ 1] 769 rlwa x + 00041E 19 05 [ 1] 770 adc a, (0x05, sp) + 000420 95 [ 1] 771 ld xh, a + 000421 17 11 [ 2] 772 ldw (0x11, sp), y + 000423 1F 0F [ 2] 773 ldw (0x0f, sp), x + 774 ; ../time.c: 205: seconds+= timeptr->tm_hour*60*60L; + 000425 1E 01 [ 2] 775 ldw x, (0x01, sp) + 000427 E6 02 [ 1] 776 ld a, (0x2, x) + 000429 5F [ 1] 777 clrw x + 00042A 97 [ 1] 778 ld xl, a + 00042B 90 5F [ 1] 779 clrw y + 00042D 89 [ 2] 780 pushw x + 00042E 90 89 [ 2] 781 pushw y + 000430 4B 10 [ 1] 782 push #0x10 + 000432 4B 0E [ 1] 783 push #0x0e + 000434 5F [ 1] 784 clrw x + 000435 89 [ 2] 785 pushw x + 000436 8Ds00r00r00 [ 5] 786 callf __mullong + 00043A 5B 08 [ 2] 787 addw sp, #8 + 00043C 90 9F [ 1] 788 ld a, yl + 00043E 72 FB 11 [ 2] 789 addw x, (0x11, sp) + 000441 19 10 [ 1] 790 adc a, (0x10, sp) + 000443 90 02 [ 1] 791 rlwa y + 000445 19 0F [ 1] 792 adc a, (0x0f, sp) + 000447 90 95 [ 1] 793 ld yh, a + 000449 1F 0D [ 2] 794 ldw (0x0d, sp), x + 795 ; ../time.c: 206: seconds+= timeptr->tm_min*60; + 00044B 1E 01 [ 2] 796 ldw x, (0x01, sp) + 00044D E6 01 [ 1] 797 ld a, (0x1, x) + 00044F 5F [ 1] 798 clrw x + 000450 97 [ 1] 799 ld xl, a + 000451 89 [ 2] 800 pushw x + 000452 58 [ 2] 801 sllw x + 000453 58 [ 2] 802 sllw x + 000454 58 [ 2] 803 sllw x + 000455 58 [ 2] 804 sllw x + 000456 72 F0 01 [ 2] 805 subw x, (1, sp) + 000459 58 [ 2] 806 sllw x + 00045A 58 [ 2] 807 sllw x + 00045B 5B 02 [ 2] 808 addw sp, #2 + 00045D 1F 11 [ 2] 809 ldw (0x11, sp), x + 00045F 7B 11 [ 1] 810 ld a, (0x11, sp) + 000461 49 [ 1] 811 rlc a + 000462 4F [ 1] 812 clr a + 000463 A2 00 [ 1] 813 sbc a, #0x00 + 000465 6B 10 [ 1] 814 ld (0x10, sp), a + 000467 6B 0F [ 1] 815 ld (0x0f, sp), a + 000469 1E 0D [ 2] 816 ldw x, (0x0d, sp) + 00046B 72 FB 11 [ 2] 817 addw x, (0x11, sp) + 00046E 90 9F [ 1] 818 ld a, yl + 000470 19 10 [ 1] 819 adc a, (0x10, sp) + 000472 88 [ 1] 820 push a + 000473 90 9E [ 1] 821 ld a, yh + 000475 19 10 [ 1] 822 adc a, (0x10, sp) + 000477 90 95 [ 1] 823 ld yh, a + 000479 84 [ 1] 824 pop a + 00047A 1F 11 [ 2] 825 ldw (0x11, sp), x + 00047C 6B 10 [ 1] 826 ld (0x10, sp), a + 827 ; ../time.c: 207: seconds+= timeptr->tm_sec; + 00047E 1E 01 [ 2] 828 ldw x, (0x01, sp) + 000480 F6 [ 1] 829 ld a, (x) + 000481 5F [ 1] 830 clrw x + 000482 97 [ 1] 831 ld xl, a + 000483 1F 0D [ 2] 832 ldw (0x0d, sp), x + 000485 7B 0D [ 1] 833 ld a, (0x0d, sp) + 000487 49 [ 1] 834 rlc a + 000488 4F [ 1] 835 clr a + 000489 A2 00 [ 1] 836 sbc a, #0x00 + 00048B 6B 0C [ 1] 837 ld (0x0c, sp), a + 00048D 6B 0B [ 1] 838 ld (0x0b, sp), a + 00048F 1E 11 [ 2] 839 ldw x, (0x11, sp) + 000491 72 FB 0D [ 2] 840 addw x, (0x0d, sp) + 000494 7B 10 [ 1] 841 ld a, (0x10, sp) + 000496 19 0C [ 1] 842 adc a, (0x0c, sp) + 000498 90 02 [ 1] 843 rlwa y + 00049A 19 0B [ 1] 844 adc a, (0x0b, sp) + 00049C 90 95 [ 1] 845 ld yh, a + 846 ; ../time.c: 208: return seconds; + 847 ; ../time.c: 209: } + 00049E 5B 12 [ 2] 848 addw sp, #18 + 0004A0 87 [ 5] 849 retf + 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-large/time.rel b/device/lib/stm8-large/time.rel new file mode 100644 index 0000000..1d800ba --- /dev/null +++ b/device/lib/stm8-large/time.rel @@ -0,0 +1,464 @@ +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 4A1 flags 0 addr 0 +S _RtcRead Def000000 +S _asctime Def000097 +S _time Def000002 +S _localtime Def00011E +S _gmtime Def000128 +S _mktime Def0002FB +S _ctime Def00010D +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 87 +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 8D 00 00 00 5B 02 85 +R 00 00 00 09 80 0A 00 09 +T 00 00 1C 4D 27 0B 89 8D 00 02 FB 5B 02 1F 0F 17 +R 00 00 00 09 80 08 00 09 +T 00 00 29 0D +R 00 00 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 1E 14 27 07 16 0F EF 02 16 0D FF +R 00 00 00 09 +T 00 00 35 +R 00 00 00 09 +T 00 00 35 1E 0F 16 0D 5B 10 87 +R 00 00 00 09 +T 00 00 3C +R 00 00 00 09 +T 00 00 3C 16 04 90 F6 A1 3B 23 04 A6 3B 90 F7 +R 00 00 00 09 +T 00 00 48 +R 00 00 00 09 +T 00 00 48 93 5C F6 A1 3B 23 03 A6 3B F7 +R 00 00 00 09 +T 00 00 52 +R 00 00 00 09 +T 00 00 52 93 5C 5C F6 A1 17 23 03 A6 17 F7 +R 00 00 00 09 +T 00 00 5D +R 00 00 00 09 +T 00 00 5D 93 1C 00 07 F6 A1 06 23 03 A6 06 F7 +R 00 00 00 09 +T 00 00 69 +R 00 00 00 09 +T 00 00 69 93 1C 00 03 F6 A1 01 24 05 A6 01 F7 20 +R 00 00 00 09 +T 00 00 76 07 +R 00 00 00 09 +T 00 00 77 +R 00 00 00 09 +T 00 00 77 A1 1F 23 03 A6 1F F7 +R 00 00 00 09 +T 00 00 7E +R 00 00 00 09 +T 00 00 7E 93 1C 00 04 F6 A1 0B 23 03 A6 0B F7 +R 00 00 00 09 +T 00 00 8A +R 00 00 00 09 +T 00 00 8A 72 A9 00 05 93 FE 2A 04 93 6F 01 7F +R 00 00 00 09 +T 00 00 96 +R 00 00 00 09 +T 00 00 96 87 +R 00 00 00 09 +T 00 00 97 +R 00 00 00 09 +T 00 00 97 52 0C 1E 10 89 8D 00 00 3C 5B 02 16 10 +R 00 00 00 09 80 09 00 09 +T 00 00 A4 93 EE 05 1C 07 6C 1F 01 90 F6 6B 04 0F +R 00 00 00 09 +T 00 00 B1 03 93 E6 01 6B 06 0F 05 93 E6 02 6B 08 +R 00 00 00 09 +T 00 00 BE 0F 07 93 E6 03 6B 0A 0F 09 93 E6 04 5F +R 00 00 00 09 +T 00 00 CB 97 58 1C 00 0C 4F A9 00 00 0C FE 1F 0B +R 00 00 00 09 00 06 00 07 F3 01 0A 00 07 +T 00 00 D6 90 E6 07 5F 97 58 1C 00 24 4F A9 +R 00 00 00 09 00 0A 00 07 +T 00 00 E1 00 00 24 FE 90 93 1E 01 89 1E 05 89 1E +R 00 00 00 09 F3 01 03 00 07 +T 00 00 EC 09 89 1E 0D 89 1E 11 89 1E 15 89 90 89 +R 00 00 00 09 +T 00 00 F9 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 FE 00 00 00 4B 00 00 00 8D +R 00 00 00 09 F1 09 03 00 01 F1 81 07 00 01 +T 00 01 02 00 00 00 5B 12 AE 00 00 5B 0C 87 +R 00 00 00 09 82 03 00 02 00 09 00 01 +T 00 01 0D +R 00 00 00 09 +T 00 01 0D 1E 04 89 8D 00 01 1E 5B 02 89 8D +R 00 00 00 09 80 07 00 09 +T 00 01 18 00 00 97 5B 02 87 +R 00 00 00 09 80 03 00 09 +T 00 01 1E +R 00 00 00 09 +T 00 01 1E 1E 04 89 8D 00 01 28 5B 02 87 +R 00 00 00 09 80 07 00 09 +T 00 01 28 +R 00 00 00 09 +T 00 01 28 52 10 1E 14 90 93 90 EE 02 FE 17 0F 1F +R 00 00 00 09 +T 00 01 35 0D 4B 3C 5F 89 4B 00 1E 13 89 1E 13 89 +R 00 00 00 09 +T 00 01 42 8D 00 00 00 5B 08 9F C7 00 20 4B 3C 5F +R 00 00 00 09 82 04 00 01 10 0B 00 01 +T 00 01 4F 89 4B 00 1E 13 89 1E 13 89 8D +R 00 00 00 09 +T 00 01 59 00 00 00 5B 08 1F 0D 17 0B AE 00 21 1F +R 00 00 00 09 82 03 00 03 00 0D 00 01 +T 00 01 66 0F 4B 3C 5F 89 4B 00 1E 11 89 1E 11 89 +R 00 00 00 09 +T 00 01 73 8D 00 00 00 5B 08 9F 1E 0F F7 4B 3C 5F +R 00 00 00 09 82 04 00 01 +T 00 01 80 89 4B 00 1E 11 89 1E 11 89 8D +R 00 00 00 09 +T 00 01 8A 00 00 00 5B 08 1F 0D 17 0B AE 00 22 1F +R 00 00 00 09 82 03 00 03 00 0D 00 01 +T 00 01 97 0F 4B 18 5F 89 4B 00 1E 11 89 1E 11 89 +R 00 00 00 09 +T 00 01 A4 8D 00 00 00 5B 08 9F 1E 0F F7 4B 18 5F +R 00 00 00 09 82 04 00 01 +T 00 01 B1 89 4B 00 1E 11 89 1E 11 89 8D +R 00 00 00 09 +T 00 01 BB 00 00 00 5B 08 1F 03 17 01 AE 00 27 1F +R 00 00 00 09 82 03 00 03 00 0D 00 01 +T 00 01 C8 0F 1E 03 1C 00 04 16 01 24 02 90 5C +R 00 00 00 09 +T 00 01 D4 +R 00 00 00 09 +T 00 01 D4 4B 07 4B 00 4B 00 4B 00 89 90 89 8D +R 00 00 00 09 +T 00 01 E0 00 00 00 5B 08 9F 1E 0F F7 5F 1F 07 1F +R 00 00 00 09 82 03 00 01 +T 00 01 ED 05 AE 07 B2 1F 0F +R 00 00 00 09 +T 00 01 F3 +R 00 00 00 09 +T 00 01 F3 7B 10 A4 03 6B 0A 0F 09 1E 09 26 07 AE +R 00 00 00 09 +T 00 02 00 01 6E 1F 0D 20 05 +R 00 00 00 09 +T 00 02 06 +R 00 00 00 09 +T 00 02 06 AE 01 6D 1F 0D +R 00 00 00 09 +T 00 02 0B +R 00 00 00 09 +T 00 02 0B 16 0D 5F 90 5D 2A 01 5A +R 00 00 00 09 +T 00 02 13 +R 00 00 00 09 +T 00 02 13 72 F9 07 17 0D 9F 19 06 6B 0C 9E 19 05 +R 00 00 00 09 +T 00 02 20 6B 0B 16 0D 17 07 16 0B 17 05 1E 03 13 +R 00 00 00 09 +T 00 02 2D 0D 7B 02 12 0C 7B 01 12 0B 25 07 1E 0F +R 00 00 00 09 +T 00 02 3A 5C 1F 0F 20 B4 +R 00 00 00 09 +T 00 02 3F +R 00 00 00 09 +T 00 02 3F AE 00 25 16 0F 72 A2 07 6C FF 16 09 17 +R 00 00 00 09 00 04 00 01 +T 00 02 4C 0F 1E 09 26 04 AE 01 6E BC +R 00 00 00 09 +T 00 02 55 +R 00 00 00 09 +T 00 02 55 AE 01 6D +R 00 00 00 09 +T 00 02 58 +R 00 00 00 09 +T 00 02 58 1F 0D 5F 0D 0D 2A 01 5A +R 00 00 00 09 +T 00 02 60 +R 00 00 00 09 +T 00 02 60 16 07 72 F2 0D 7B 06 89 12 02 85 97 7B +R 00 00 00 09 +T 00 02 6D 05 89 12 01 85 17 0D 16 03 72 F2 0D 88 +R 00 00 00 09 +T 00 02 7A 7B 03 89 12 02 85 97 7B 02 12 01 95 84 +R 00 00 00 09 +T 00 02 87 17 08 1F 06 AE 00 28 16 08 FF 0F 0E +R 00 00 00 09 00 08 00 01 +T 00 02 93 +R 00 00 00 09 +T 00 02 93 7B 0E 4A 26 0C 1E 0F 26 04 A6 1D 20 13 +R 00 00 00 09 +T 00 02 A0 +R 00 00 00 09 +T 00 02 A0 A6 1C 20 0F +R 00 00 00 09 +T 00 02 A4 +R 00 00 00 09 +T 00 02 A4 5F 7B 0E 97 1C 00 00 1F 0C 4F A9 +R 00 00 00 09 00 08 00 07 +T 00 02 AF 00 00 00 1E 0C F6 +R 00 00 00 09 F3 01 03 00 07 +T 00 02 B3 +R 00 00 00 09 +T 00 02 B3 6B 0D 0F 0C 0F 0B 0F 0A 1E 08 13 0C 7B +R 00 00 00 09 +T 00 02 C0 07 12 0B 7B 06 12 0A 25 1B 16 08 72 F2 +R 00 00 00 09 +T 00 02 CD 0C 7B 07 12 0B 97 7B 06 12 0A 95 17 08 +R 00 00 00 09 +T 00 02 DA 1F 06 0C 0E 7B 0E A1 0C 25 AF +R 00 00 00 09 +T 00 02 E4 +R 00 00 00 09 +T 00 02 E4 AE 00 24 7B 0E F7 AE 00 23 7B 09 4C F7 +R 00 00 00 09 00 04 00 01 00 0A 00 01 +T 00 02 F1 AE 00 2A 7F AE 00 20 5B 10 87 +R 00 00 00 09 00 04 00 01 00 08 00 01 +T 00 02 FB +R 00 00 00 09 +T 00 02 FB 52 12 16 16 17 01 93 EE 05 1C 07 6C 1F +R 00 00 00 09 +T 00 03 08 0B 1E 01 E6 04 5F 97 1F 03 1E 01 89 8D +R 00 00 00 09 +T 00 03 15 00 00 3C 5B 02 1E 0B 1D 07 B2 90 5F 5D +R 00 00 00 09 80 03 00 09 +T 00 03 22 2A 02 90 5A +R 00 00 00 09 +T 00 03 26 +R 00 00 00 09 +T 00 03 26 89 90 89 4B 80 4B 33 4B E1 4B 01 8D +R 00 00 00 09 +T 00 03 32 00 00 00 5B 08 1F 11 17 0F AE 07 B2 1F +R 00 00 00 09 82 03 00 05 +T 00 03 3F 0D +R 00 00 00 09 +T 00 03 40 +R 00 00 00 09 +T 00 03 40 1E 0D 13 0B 2E 2A 4B 04 4B 00 1E 0F 89 +R 00 00 00 09 +T 00 03 4D 8D 00 00 00 5B 04 5D 26 13 1E 11 1C +R 00 00 00 09 82 04 00 04 +T 00 03 59 51 80 1F 11 7B 10 A9 01 6B 10 7B 0F A9 +R 00 00 00 09 +T 00 03 66 00 6B 0F +R 00 00 00 09 +T 00 03 69 +R 00 00 00 09 +T 00 03 69 1E 0D 5C 1F 0D 20 D0 +R 00 00 00 09 +T 00 03 70 +R 00 00 00 09 +T 00 03 70 16 11 17 07 16 0F 17 05 4B 04 4B 00 1E +R 00 00 00 09 +T 00 03 7D 0D 89 8D 00 00 00 5B 04 1F 09 90 5F +R 00 00 00 09 82 06 00 04 +T 00 03 89 +R 00 00 00 09 +T 00 03 89 51 13 03 51 2E 68 90 A3 00 01 26 1B 1E +R 00 00 00 09 +T 00 03 96 09 26 17 1E 07 1C 3B 80 1F 11 1E 05 24 +R 00 00 00 09 +T 00 03 A3 01 5C +R 00 00 00 09 +T 00 03 A5 +R 00 00 00 09 +T 00 03 A5 1C 00 26 1F 05 1E 11 1F 07 20 43 +R 00 00 00 09 +T 00 03 B0 +R 00 00 00 09 +T 00 03 B0 93 1C 00 00 4F A9 00 00 00 F6 97 6B 12 +R 00 00 00 09 00 05 00 07 F3 01 09 00 07 +T 00 03 BB 41 0F 11 0F 10 0F 0F 90 89 1E 13 89 1E +R 00 00 00 09 +T 00 03 C8 13 89 4B 80 4B 51 4B 01 4B 00 8D +R 00 00 00 09 +T 00 03 D3 00 00 00 5B 08 1F 0F 17 0D 90 85 1E 07 +R 00 00 00 09 82 03 00 05 +T 00 03 E0 72 FB 0D 1F 11 1E 05 24 01 5C +R 00 00 00 09 +T 00 03 EA +R 00 00 00 09 +T 00 03 EA 72 FB 0B 1F 05 1E 11 1F 07 +R 00 00 00 09 +T 00 03 F3 +R 00 00 00 09 +T 00 03 F3 90 5C 20 92 +R 00 00 00 09 +T 00 03 F7 +R 00 00 00 09 +T 00 03 F7 1E 01 E6 03 5F 97 5A 90 5F 5D 2A 02 90 +R 00 00 00 09 +T 00 04 04 5A +R 00 00 00 09 +T 00 04 05 +R 00 00 00 09 +T 00 04 05 89 90 89 4B 80 4B 51 4B 01 4B 00 8D +R 00 00 00 09 +T 00 04 11 00 00 00 5B 08 51 72 F9 07 9F 19 06 02 +R 00 00 00 09 82 03 00 05 +T 00 04 1E 19 05 95 17 11 1F 0F 1E 01 E6 02 5F 97 +R 00 00 00 09 +T 00 04 2B 90 5F 89 90 89 4B 10 4B 0E 5F 89 8D +R 00 00 00 09 +T 00 04 37 00 00 00 5B 08 90 9F 72 FB 11 19 10 90 +R 00 00 00 09 82 03 00 05 +T 00 04 44 02 19 0F 90 95 1F 0D 1E 01 E6 01 5F 97 +R 00 00 00 09 +T 00 04 51 89 58 58 58 58 72 F0 01 58 58 5B 02 1F +R 00 00 00 09 +T 00 04 5E 11 7B 11 49 4F A2 00 6B 10 6B 0F 1E 0D +R 00 00 00 09 +T 00 04 6B 72 FB 11 90 9F 19 10 88 90 9E 19 10 90 +R 00 00 00 09 +T 00 04 78 95 84 1F 11 6B 10 1E 01 F6 5F 97 1F 0D +R 00 00 00 09 +T 00 04 85 7B 0D 49 4F A2 00 6B 0C 6B 0B 1E 11 72 +R 00 00 00 09 +T 00 04 92 FB 0D 7B 10 19 0C 90 02 19 0B 90 95 5B +R 00 00 00 09 +T 00 04 9F 12 87 +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-large/time.sym b/device/lib/stm8-large/time.sym new file mode 100644 index 0000000..cffbc0a --- /dev/null +++ b/device/lib/stm8-large/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 00003C 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 000097 GR + 9 _ctime 00010D GR + 9 _gmtime 000128 GR + 1 _lastTime 000020 R + 9 _localtime 00011E GR + 9 _mktime 0002FB 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 4A1 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/tolower.asm b/device/lib/stm8-large/tolower.asm new file mode 100644 index 0000000..335ead1 --- /dev/null +++ b/device/lib/stm8-large/tolower.asm @@ -0,0 +1,70 @@ +;-------------------------------------------------------- +; 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, (0x04, sp) +; ./../../include/ctype.h: 80: return ((unsigned char)c >= 'A' && (unsigned char)c <= 'Z'); + ld a, xl + cp a, #0x41 + jrc 00104$ + cp a, #0x5a + jrugt 00104$ +; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c); + addw x, #0x0020 +00104$: +; ../tolower.c: 36: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/tolower.lst b/device/lib/stm8-large/tolower.lst new file mode 100644 index 0000000..08875ae --- /dev/null +++ b/device/lib/stm8-large/tolower.lst @@ -0,0 +1,70 @@ + 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 04 [ 2] 55 ldw x, (0x04, 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 07 [ 1] 59 jrc 00104$ + 000007 A1 5A [ 1] 60 cp a, #0x5a + 000009 22 03 [ 1] 61 jrugt 00104$ + 62 ; ../tolower.c: 35: return (isupper (c) ? c + ('a' - 'A') : c); + 00000B 1C 00 20 [ 2] 63 addw x, #0x0020 + 00000E 64 00104$: + 65 ; ../tolower.c: 36: } + 00000E 87 [ 5] 66 retf + 67 .area CODE + 68 .area CONST + 69 .area INITIALIZER + 70 .area CABS (ABS) diff --git a/device/lib/stm8-large/tolower.rel b/device/lib/stm8-large/tolower.rel new file mode 100644 index 0000000..1191c9d --- /dev/null +++ b/device/lib/stm8-large/tolower.rel @@ -0,0 +1,27 @@ +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 F 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 04 9F A1 41 25 07 A1 5A 22 03 1C +R 00 00 00 09 +T 00 00 0C 00 20 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/tolower.sym b/device/lib/stm8-large/tolower.sym new file mode 100644 index 0000000..d538a62 --- /dev/null +++ b/device/lib/stm8-large/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 F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/toupper.asm b/device/lib/stm8-large/toupper.asm new file mode 100644 index 0000000..5779408 --- /dev/null +++ b/device/lib/stm8-large/toupper.asm @@ -0,0 +1,70 @@ +;-------------------------------------------------------- +; 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, (0x04, sp) +; ./../../include/ctype.h: 71: return ((unsigned char)c >= 'a' && (unsigned char)c <= 'z'); + ld a, xl + cp a, #0x61 + jrc 00104$ + cp a, #0x7a + jrugt 00104$ +; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c); + addw x, #0xffe0 +00104$: +; ../toupper.c: 36: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/toupper.lst b/device/lib/stm8-large/toupper.lst new file mode 100644 index 0000000..204d448 --- /dev/null +++ b/device/lib/stm8-large/toupper.lst @@ -0,0 +1,70 @@ + 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 04 [ 2] 55 ldw x, (0x04, 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 25 07 [ 1] 59 jrc 00104$ + 000007 A1 7A [ 1] 60 cp a, #0x7a + 000009 22 03 [ 1] 61 jrugt 00104$ + 62 ; ../toupper.c: 35: return (islower (c) ? c + ('A' - 'a') : c); + 00000B 1C FF E0 [ 2] 63 addw x, #0xffe0 + 00000E 64 00104$: + 65 ; ../toupper.c: 36: } + 00000E 87 [ 5] 66 retf + 67 .area CODE + 68 .area CONST + 69 .area INITIALIZER + 70 .area CABS (ABS) diff --git a/device/lib/stm8-large/toupper.rel b/device/lib/stm8-large/toupper.rel new file mode 100644 index 0000000..39802c0 --- /dev/null +++ b/device/lib/stm8-large/toupper.rel @@ -0,0 +1,27 @@ +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 F 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 04 9F A1 61 25 07 A1 7A 22 03 1C +R 00 00 00 09 +T 00 00 0C FF E0 +R 00 00 00 09 +T 00 00 0E +R 00 00 00 09 +T 00 00 0E 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/toupper.sym b/device/lib/stm8-large/toupper.sym new file mode 100644 index 0000000..989785f --- /dev/null +++ b/device/lib/stm8-large/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 F flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/vprintf.asm b/device/lib/stm8-large/vprintf.asm new file mode 100644 index 0000000..988fd6e --- /dev/null +++ b/device/lib/stm8-large/vprintf.asm @@ -0,0 +1,112 @@ +;-------------------------------------------------------- +; 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, (0x04, sp) + ld xl, a + pushw x + callf _putchar + addw sp, #2 +; ../vprintf.c: 38: } + retf +; ../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, (0x06, sp) + pushw x + ldw x, (0x06, sp) + pushw x + clrw x + pushw x + push #<(_put_char_to_stdout + 0) + push #((_put_char_to_stdout + 0) >> 8) + push #((_put_char_to_stdout + 0) >> 16) + callf __print_format + addw sp, #9 +; ../vprintf.c: 44: } + retf +; ../vprintf.c: 47: printf (const char *format, ...) +; ----------------------------------------- +; function printf +; ----------------------------------------- +_printf: +; ../vprintf.c: 52: va_start (arg, format); + ldw x, sp + addw x, #4 + incw x + incw x +; ../vprintf.c: 53: i = _print_format (put_char_to_stdout, NULL, format, arg); + pushw x + ldw x, (0x06, sp) + pushw x + clrw x + pushw x + push #<(_put_char_to_stdout + 0) + push #((_put_char_to_stdout + 0) >> 8) + push #((_put_char_to_stdout + 0) >> 16) + callf __print_format + addw sp, #9 +; ../vprintf.c: 56: return i; +; ../vprintf.c: 57: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/vprintf.lst b/device/lib/stm8-large/vprintf.lst new file mode 100644 index 0000000..8af1f83 --- /dev/null +++ b/device/lib/stm8-large/vprintf.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 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 04 [ 1] 59 ld a, (0x04, sp) + 000003 97 [ 1] 60 ld xl, a + 000004 89 [ 2] 61 pushw x + 000005 8Ds00r00r00 [ 5] 62 callf _putchar + 000009 5B 02 [ 2] 63 addw sp, #2 + 64 ; ../vprintf.c: 38: } + 00000B 87 [ 5] 65 retf + 66 ; ../vprintf.c: 41: vprintf (const char *format, va_list ap) + 67 ; ----------------------------------------- + 68 ; function vprintf + 69 ; ----------------------------------------- + 00000C 70 _vprintf: + 71 ; ../vprintf.c: 43: return _print_format (put_char_to_stdout, NULL, format, ap); + 00000C 1E 06 [ 2] 72 ldw x, (0x06, sp) + 00000E 89 [ 2] 73 pushw x + 00000F 1E 06 [ 2] 74 ldw x, (0x06, sp) + 000011 89 [ 2] 75 pushw x + 000012 5F [ 1] 76 clrw x + 000013 89 [ 2] 77 pushw x + 000014 4Br00 [ 1] 78 push #<(_put_char_to_stdout + 0) + 000016 4Bs00 [ 1] 79 push #((_put_char_to_stdout + 0) >> 8) + 000018 4Bs00 [ 1] 80 push #((_put_char_to_stdout + 0) >> 16) + 00001A 8Ds00r00r00 [ 5] 81 callf __print_format + 00001E 5B 09 [ 2] 82 addw sp, #9 + 83 ; ../vprintf.c: 44: } + 000020 87 [ 5] 84 retf + 85 ; ../vprintf.c: 47: printf (const char *format, ...) + 86 ; ----------------------------------------- + 87 ; function printf + 88 ; ----------------------------------------- + 000021 89 _printf: + 90 ; ../vprintf.c: 52: va_start (arg, format); + 000021 96 [ 1] 91 ldw x, sp + 000022 1C 00 04 [ 2] 92 addw x, #4 + 000025 5C [ 1] 93 incw x + 000026 5C [ 1] 94 incw x + 95 ; ../vprintf.c: 53: i = _print_format (put_char_to_stdout, NULL, format, arg); + 000027 89 [ 2] 96 pushw x + 000028 1E 06 [ 2] 97 ldw x, (0x06, sp) + 00002A 89 [ 2] 98 pushw x + 00002B 5F [ 1] 99 clrw x + 00002C 89 [ 2] 100 pushw x + 00002D 4Br00 [ 1] 101 push #<(_put_char_to_stdout + 0) + 00002F 4Bs00 [ 1] 102 push #((_put_char_to_stdout + 0) >> 8) + 000031 4Bs00 [ 1] 103 push #((_put_char_to_stdout + 0) >> 16) + 000033 8Ds00r00r00 [ 5] 104 callf __print_format + 000037 5B 09 [ 2] 105 addw sp, #9 + 106 ; ../vprintf.c: 56: return i; + 107 ; ../vprintf.c: 57: } + 000039 87 [ 5] 108 retf + 109 .area CODE + 110 .area CONST + 111 .area INITIALIZER + 112 .area CABS (ABS) diff --git a/device/lib/stm8-large/vprintf.rel b/device/lib/stm8-large/vprintf.rel new file mode 100644 index 0000000..7a06743 --- /dev/null +++ b/device/lib/stm8-large/vprintf.rel @@ -0,0 +1,40 @@ +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 3A flags 0 addr 0 +S _vprintf Def00000C +S _printf Def000021 +A CABS size 0 flags 8 addr 0 +T 00 00 00 +R 00 00 00 09 +T 00 00 00 5F 7B 04 97 89 8D 00 00 00 5B 02 87 +R 00 00 00 09 82 09 00 01 +T 00 00 0C +R 00 00 00 09 +T 00 00 0C 1E 06 89 1E 06 89 5F 89 4B 00 00 00 4B +R 00 00 00 09 F1 09 0C 00 09 +T 00 00 17 00 00 00 4B 00 00 00 8D +R 00 00 00 09 F1 81 03 00 09 F3 01 07 00 09 +T 00 00 1B 00 00 00 5B 09 87 +R 00 00 00 09 82 03 00 00 +T 00 00 21 +R 00 00 00 09 +T 00 00 21 96 1C 00 04 5C 5C 89 1E 06 89 5F 89 4B +R 00 00 00 09 +T 00 00 2E 00 00 00 4B 00 00 00 4B +R 00 00 00 09 F1 09 03 00 09 F1 81 07 00 09 +T 00 00 32 00 00 00 8D 00 00 00 5B 09 87 +R 00 00 00 09 F3 01 03 00 09 82 07 00 00 diff --git a/device/lib/stm8-large/vprintf.sym b/device/lib/stm8-large/vprintf.sym new file mode 100644 index 0000000..6aed8a7 --- /dev/null +++ b/device/lib/stm8-large/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 000021 GR + 9 _put_char_to_stdout 000000 R + _putchar ****** GX + 9 _vprintf 00000C 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-large/wcrtomb.asm b/device/lib/stm8-large/wcrtomb.asm new file mode 100644 index 0000000..9325675 --- /dev/null +++ b/device/lib/stm8-large/wcrtomb.asm @@ -0,0 +1,77 @@ +;-------------------------------------------------------- +; 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, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + ldw x, (0x08, sp) + pushw x + callf _wctomb + addw sp, #6 +; ../wcrtomb.c: 42: if(ret == (size_t)(-1)) + cpw x, #0xffff + jrne 00102$ +; ../wcrtomb.c: 43: errno = EILSEQ; + mov _errno+1, #0x54 + clr _errno+0 +00102$: +; ../wcrtomb.c: 45: return(ret); +; ../wcrtomb.c: 46: } + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/wcrtomb.lst b/device/lib/stm8-large/wcrtomb.lst new file mode 100644 index 0000000..ef20f80 --- /dev/null +++ b/device/lib/stm8-large/wcrtomb.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 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 08 [ 2] 56 ldw x, (0x08, sp) + 000002 89 [ 2] 57 pushw x + 000003 1E 08 [ 2] 58 ldw x, (0x08, sp) + 000005 89 [ 2] 59 pushw x + 000006 1E 08 [ 2] 60 ldw x, (0x08, sp) + 000008 89 [ 2] 61 pushw x + 000009 8Ds00r00r00 [ 5] 62 callf _wctomb + 00000D 5B 06 [ 2] 63 addw sp, #6 + 64 ; ../wcrtomb.c: 42: if(ret == (size_t)(-1)) + 00000F A3 FF FF [ 2] 65 cpw x, #0xffff + 000012 26 08 [ 1] 66 jrne 00102$ + 67 ; ../wcrtomb.c: 43: errno = EILSEQ; + 000014 35 54u00u01 [ 1] 68 mov _errno+1, #0x54 + 000018 72 5Fu00u00 [ 1] 69 clr _errno+0 + 00001C 70 00102$: + 71 ; ../wcrtomb.c: 45: return(ret); + 72 ; ../wcrtomb.c: 46: } + 00001C 87 [ 5] 73 retf + 74 .area CODE + 75 .area CONST + 76 .area INITIALIZER + 77 .area CABS (ABS) diff --git a/device/lib/stm8-large/wcrtomb.rel b/device/lib/stm8-large/wcrtomb.rel new file mode 100644 index 0000000..e9f82b5 --- /dev/null +++ b/device/lib/stm8-large/wcrtomb.rel @@ -0,0 +1,31 @@ +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 08 89 1E 08 89 1E 08 89 8D +R 00 00 00 09 +T 00 00 0A 00 00 00 5B 06 A3 FF FF 26 08 35 54 +R 00 00 00 09 82 03 00 02 +T 00 00 16 00 01 72 5F 00 00 +R 00 00 00 09 12 03 00 00 12 07 00 00 +T 00 00 1C +R 00 00 00 09 +T 00 00 1C 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/wcrtomb.sym b/device/lib/stm8-large/wcrtomb.sym new file mode 100644 index 0000000..857566d --- /dev/null +++ b/device/lib/stm8-large/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-large/wcscmp.asm b/device/lib/stm8-large/wcscmp.asm new file mode 100644 index 0000000..aa475f9 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0e, sp) + ldw x, (0x10, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/wcscmp.lst b/device/lib/stm8-large/wcscmp.lst new file mode 100644 index 0000000..6f09df6 --- /dev/null +++ b/device/lib/stm8-large/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 0E [ 2] 56 ldw y, (0x0e, sp) + 000004 1E 10 [ 2] 57 ldw x, (0x10, 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 87 [ 5] 123 retf + 124 .area CODE + 125 .area CONST + 126 .area INITIALIZER + 127 .area CABS (ABS) diff --git a/device/lib/stm8-large/wcscmp.rel b/device/lib/stm8-large/wcscmp.rel new file mode 100644 index 0000000..6b968bb --- /dev/null +++ b/device/lib/stm8-large/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 0E 1E 10 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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/wcscmp.sym b/device/lib/stm8-large/wcscmp.sym new file mode 100644 index 0000000..78e2207 --- /dev/null +++ b/device/lib/stm8-large/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-large/wcslen.asm b/device/lib/stm8-large/wcslen.asm new file mode 100644 index 0000000..a3d5862 --- /dev/null +++ b/device/lib/stm8-large/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, (0x0a, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/wcslen.lst b/device/lib/stm8-large/wcslen.lst new file mode 100644 index 0000000..2fe6d08 --- /dev/null +++ b/device/lib/stm8-large/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 0A [ 2] 58 ldw y, (0x0a, 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 87 [ 5] 84 retf + 85 .area CODE + 86 .area CONST + 87 .area INITIALIZER + 88 .area CABS (ABS) diff --git a/device/lib/stm8-large/wcslen.rel b/device/lib/stm8-large/wcslen.rel new file mode 100644 index 0000000..d27b35f --- /dev/null +++ b/device/lib/stm8-large/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 0A +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 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/wcslen.sym b/device/lib/stm8-large/wcslen.sym new file mode 100644 index 0000000..0a2c7d3 --- /dev/null +++ b/device/lib/stm8-large/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-large/wcstombs.asm b/device/lib/stm8-large/wcstombs.asm new file mode 100644 index 0000000..6564026 --- /dev/null +++ b/device/lib/stm8-large/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, (0x16, sp) + ldw (0x0f, sp), y +00107$: + ldw x, (0x18, 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 + callf _wctomb + addw sp, #6 + ldw (0x0d, sp), x + ldw x, (0x18, 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, (0x18, sp) + pushw x + callf _wctomb + addw sp, #6 +; ../wcstombs.c: 42: if(b == 1 && !*s) + cpw x, #0x0001 + jrne 00102$ + ldw y, (0x14, 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, (0x18, sp) + subw y, (0x0d, sp) + ldw (0x18, 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, (0x14, sp) + ldw (0x14, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/wcstombs.lst b/device/lib/stm8-large/wcstombs.lst new file mode 100644 index 0000000..aa8f124 --- /dev/null +++ b/device/lib/stm8-large/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 16 [ 2] 63 ldw y, (0x16, sp) + 00000D 17 0F [ 2] 64 ldw (0x0f, sp), y + 00000F 65 00107$: + 00000F 1E 18 [ 2] 66 ldw x, (0x18, sp) + 000011 A3 00 04 [ 2] 67 cpw x, #0x0004 + 000014 22 25 [ 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 8Ds00r00r00 [ 5] 81 callf _wctomb + 000031 5B 06 [ 2] 82 addw sp, #6 + 000033 1F 0D [ 2] 83 ldw (0x0d, sp), x + 000035 1E 18 [ 2] 84 ldw x, (0x18, sp) + 000037 13 0D [ 2] 85 cpw x, (0x0d, sp) + 000039 25 44 [ 1] 86 jrc 00109$ + 00003B 87 00108$: + 88 ; ../wcstombs.c: 40: int b = wctomb(s, *pwcs); + 00003B 1E 0F [ 2] 89 ldw x, (0x0f, sp) + 00003D 90 93 [ 1] 90 ldw y, x + 00003F 90 EE 02 [ 2] 91 ldw y, (0x2, y) + 000042 FE [ 2] 92 ldw x, (x) + 000043 90 89 [ 2] 93 pushw y + 000045 89 [ 2] 94 pushw x + 000046 1E 18 [ 2] 95 ldw x, (0x18, sp) + 000048 89 [ 2] 96 pushw x + 000049 8Ds00r00r00 [ 5] 97 callf _wctomb + 00004D 5B 06 [ 2] 98 addw sp, #6 + 99 ; ../wcstombs.c: 42: if(b == 1 && !*s) + 00004F A3 00 01 [ 2] 100 cpw x, #0x0001 + 000052 26 06 [ 1] 101 jrne 00102$ + 000054 16 14 [ 2] 102 ldw y, (0x14, sp) + 000056 90 F6 [ 1] 103 ld a, (y) + 000058 27 25 [ 1] 104 jreq 00109$ + 105 ; ../wcstombs.c: 43: break; + 00005A 106 00102$: + 107 ; ../wcstombs.c: 44: if(b < 0) + 00005A 5D [ 2] 108 tnzw x + 00005B 2A 04 [ 1] 109 jrpl 00105$ + 110 ; ../wcstombs.c: 45: return(-1); + 00005D 5F [ 1] 111 clrw x + 00005E 5A [ 2] 112 decw x + 00005F 20 20 [ 2] 113 jra 00110$ + 000061 114 00105$: + 115 ; ../wcstombs.c: 47: n -= b; + 000061 1F 0D [ 2] 116 ldw (0x0d, sp), x + 000063 16 18 [ 2] 117 ldw y, (0x18, sp) + 000065 72 F2 0D [ 2] 118 subw y, (0x0d, sp) + 000068 17 18 [ 2] 119 ldw (0x18, sp), y + 120 ; ../wcstombs.c: 48: m += b; + 00006A 16 09 [ 2] 121 ldw y, (0x09, sp) + 00006C 72 F9 0D [ 2] 122 addw y, (0x0d, sp) + 00006F 17 09 [ 2] 123 ldw (0x09, sp), y + 124 ; ../wcstombs.c: 49: s += b; + 000071 72 FB 14 [ 2] 125 addw x, (0x14, sp) + 000074 1F 14 [ 2] 126 ldw (0x14, sp), x + 127 ; ../wcstombs.c: 50: pwcs++; + 000076 1E 0F [ 2] 128 ldw x, (0x0f, sp) + 000078 1C 00 04 [ 2] 129 addw x, #0x0004 + 00007B 1F 0F [ 2] 130 ldw (0x0f, sp), x + 00007D 20 90 [ 2] 131 jra 00107$ + 00007F 132 00109$: + 133 ; ../wcstombs.c: 53: return(m); + 00007F 1E 09 [ 2] 134 ldw x, (0x09, sp) + 000081 135 00110$: + 136 ; ../wcstombs.c: 54: } + 000081 5B 10 [ 2] 137 addw sp, #16 + 000083 87 [ 5] 138 retf + 139 .area CODE + 140 .area CONST + 141 .area INITIALIZER + 142 .area CABS (ABS) diff --git a/device/lib/stm8-large/wcstombs.rel b/device/lib/stm8-large/wcstombs.rel new file mode 100644 index 0000000..a88817a --- /dev/null +++ b/device/lib/stm8-large/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 84 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 16 +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 18 A3 00 04 22 25 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 8D 00 00 00 5B 06 1F 0D 1E +R 00 00 00 09 82 08 00 01 +T 00 00 36 18 13 0D 25 44 +R 00 00 00 09 +T 00 00 3B +R 00 00 00 09 +T 00 00 3B 1E 0F 90 93 90 EE 02 FE 90 89 89 1E 18 +R 00 00 00 09 +T 00 00 48 89 8D 00 00 00 5B 06 A3 00 01 26 06 16 +R 00 00 00 09 82 05 00 01 +T 00 00 55 14 90 F6 27 25 +R 00 00 00 09 +T 00 00 5A +R 00 00 00 09 +T 00 00 5A 5D 2A 04 5F 5A 20 20 +R 00 00 00 09 +T 00 00 61 +R 00 00 00 09 +T 00 00 61 1F 0D 16 18 72 F2 0D 17 18 16 09 72 F9 +R 00 00 00 09 +T 00 00 6E 0D 17 09 72 FB 14 1F 14 1E 0F 1C 00 04 +R 00 00 00 09 +T 00 00 7B 1F 0F 20 90 +R 00 00 00 09 +T 00 00 7F +R 00 00 00 09 +T 00 00 7F 1E 09 +R 00 00 00 09 +T 00 00 81 +R 00 00 00 09 +T 00 00 81 5B 10 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/wcstombs.sym b/device/lib/stm8-large/wcstombs.sym new file mode 100644 index 0000000..1a999ba --- /dev/null +++ b/device/lib/stm8-large/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 84 flags 0 + A CABS size 0 flags 8 + diff --git a/device/lib/stm8-large/wctob.asm b/device/lib/stm8-large/wctob.asm new file mode 100644 index 0000000..53606dc --- /dev/null +++ b/device/lib/stm8-large/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, (0x0b, sp) + and a, #0x80 + ld (0x04, sp), a + ldw x, (0x08, sp) + ld a, (0x0a, 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, (0x0a, sp) +00103$: +; ../wctob.c: 40: } + addw sp, #4 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/wctob.lst b/device/lib/stm8-large/wctob.lst new file mode 100644 index 0000000..2abaa67 --- /dev/null +++ b/device/lib/stm8-large/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 0B [ 1] 56 ld a, (0x0b, sp) + 000004 A4 80 [ 1] 57 and a, #0x80 + 000006 6B 04 [ 1] 58 ld (0x04, sp), a + 000008 1E 08 [ 2] 59 ldw x, (0x08, sp) + 00000A 7B 0A [ 1] 60 ld a, (0x0a, 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 0A [ 2] 73 ldw x, (0x0a, sp) + 00001A 74 00103$: + 75 ; ../wctob.c: 40: } + 00001A 5B 04 [ 2] 76 addw sp, #4 + 00001C 87 [ 5] 77 retf + 78 .area CODE + 79 .area CONST + 80 .area INITIALIZER + 81 .area CABS (ABS) diff --git a/device/lib/stm8-large/wctob.rel b/device/lib/stm8-large/wctob.rel new file mode 100644 index 0000000..7808457 --- /dev/null +++ b/device/lib/stm8-large/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 0B A4 80 6B 04 1E 08 7B 0A 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 0A +R 00 00 00 09 +T 00 00 1A +R 00 00 00 09 +T 00 00 1A 5B 04 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/wctob.sym b/device/lib/stm8-large/wctob.sym new file mode 100644 index 0000000..13c8a43 --- /dev/null +++ b/device/lib/stm8-large/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-large/wctomb.asm b/device/lib/stm8-large/wctomb.asm new file mode 100644 index 0000000..d27056a --- /dev/null +++ b/device/lib/stm8-large/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, (0x10, sp) + jrne 00102$ + jpf 00119$ +00102$: +; ../wctomb.c: 38: s[0] = wc; + ldw y, (0x10, sp) + ldw (0x01, sp), y + ld a, (0x15, sp) +; ../wctomb.c: 36: if(wc < 0x80) + ldw x, (0x14, sp) + cpw x, #0x0080 + push a + ld a, (0x14, sp) + sbc a, #0x00 + ld a, (0x13, 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 + jpf 00119$ +00117$: +; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + ldw x, (0x14, 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, (0x14, sp) + cpw x, #0x0800 + ld a, (0x13, sp) + sbc a, #0x00 + ld a, (0x12, 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 + jpf 00119$ +00114$: +; ../wctomb.c: 47: else if(wc >= 0xd800 && wc < 0xe000) // Unpaired surrogate + ldw x, (0x14, sp) + cpw x, #0xd800 + ld a, (0x13, sp) + sbc a, #0x00 + ld a, (0x12, sp) + sbc a, #0x00 + jrc 00110$ + ldw x, (0x14, sp) + cpw x, #0xe000 + ld a, (0x13, sp) + sbc a, #0x00 + ld a, (0x12, sp) + sbc a, #0x00 + jrnc 00110$ +; ../wctomb.c: 48: return(-1); + clrw x + decw x + jpf 00119$ +00110$: +; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + ldw y, (0x12, sp) + ldw (0x09, sp), y + ldw x, (0x14, 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, (0x12, 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, (0x12, 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 + retf + .area CODE + .area CONST + .area INITIALIZER + .area CABS (ABS) diff --git a/device/lib/stm8-large/wctomb.lst b/device/lib/stm8-large/wctomb.lst new file mode 100644 index 0000000..5f6e24a --- /dev/null +++ b/device/lib/stm8-large/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 10 [ 2] 57 ldw x, (0x10, sp) + 000004 26 04 [ 1] 58 jrne 00102$ + 000006 ACs00r01r05 [ 2] 59 jpf 00119$ + 00000A 60 00102$: + 61 ; ../wctomb.c: 38: s[0] = wc; + 00000A 16 10 [ 2] 62 ldw y, (0x10, sp) + 00000C 17 01 [ 2] 63 ldw (0x01, sp), y + 00000E 7B 15 [ 1] 64 ld a, (0x15, sp) + 65 ; ../wctomb.c: 36: if(wc < 0x80) + 000010 1E 14 [ 2] 66 ldw x, (0x14, sp) + 000012 A3 00 80 [ 2] 67 cpw x, #0x0080 + 000015 88 [ 1] 68 push a + 000016 7B 14 [ 1] 69 ld a, (0x14, sp) + 000018 A2 00 [ 1] 70 sbc a, #0x00 + 00001A 7B 13 [ 1] 71 ld a, (0x13, sp) + 00001C A2 00 [ 1] 72 sbc a, #0x00 + 00001E 84 [ 1] 73 pop a + 00001F 24 09 [ 1] 74 jrnc 00117$ + 75 ; ../wctomb.c: 38: s[0] = wc; + 000021 1E 01 [ 2] 76 ldw x, (0x01, sp) + 000023 F7 [ 1] 77 ld (x), a + 78 ; ../wctomb.c: 39: return(1); + 000024 5F [ 1] 79 clrw x + 000025 5C [ 1] 80 incw x + 000026 ACs00r01r05 [ 2] 81 jpf 00119$ + 00002A 82 00117$: + 83 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + 00002A 1E 14 [ 2] 84 ldw x, (0x14, sp) + 00002C 88 [ 1] 85 push a + 00002D A6 40 [ 1] 86 ld a, #0x40 + 00002F 62 [ 2] 87 div x, a + 000030 84 [ 1] 88 pop a + 89 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + 000031 16 01 [ 2] 90 ldw y, (0x01, sp) + 000033 90 5C [ 1] 91 incw y + 000035 17 03 [ 2] 92 ldw (0x03, sp), y + 000037 A4 3F [ 1] 93 and a, #0x3f + 94 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + 000039 41 [ 1] 95 exg a, xl + 00003A 6B 08 [ 1] 96 ld (0x08, sp), a + 00003C 41 [ 1] 97 exg a, xl + 98 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + 00003D AA 80 [ 1] 99 or a, #0x80 + 00003F 6B 05 [ 1] 100 ld (0x05, sp), a + 101 ; ../wctomb.c: 41: else if(wc < 0x800) + 000041 1E 14 [ 2] 102 ldw x, (0x14, sp) + 000043 A3 08 00 [ 2] 103 cpw x, #0x0800 + 000046 7B 13 [ 1] 104 ld a, (0x13, sp) + 000048 A2 00 [ 1] 105 sbc a, #0x00 + 00004A 7B 12 [ 1] 106 ld a, (0x12, sp) + 00004C A2 00 [ 1] 107 sbc a, #0x00 + 00004E 24 15 [ 1] 108 jrnc 00114$ + 109 ; ../wctomb.c: 43: s[0] = (wc >> 6) & 0x1f | 0xc0; + 000050 7B 08 [ 1] 110 ld a, (0x08, sp) + 000052 A4 1F [ 1] 111 and a, #0x1f + 000054 AA C0 [ 1] 112 or a, #0xc0 + 000056 1E 01 [ 2] 113 ldw x, (0x01, sp) + 000058 F7 [ 1] 114 ld (x), a + 115 ; ../wctomb.c: 44: s[1] = (wc >> 0) & 0x3f | 0x80; + 000059 1E 03 [ 2] 116 ldw x, (0x03, sp) + 00005B 7B 05 [ 1] 117 ld a, (0x05, sp) + 00005D F7 [ 1] 118 ld (x), a + 119 ; ../wctomb.c: 45: return(2); + 00005E AE 00 02 [ 2] 120 ldw x, #0x0002 + 000061 ACs00r01r05 [ 2] 121 jpf 00119$ + 000065 122 00114$: + 123 ; ../wctomb.c: 47: else if(wc >= 0xd800 && wc < 0xe000) // Unpaired surrogate + 000065 1E 14 [ 2] 124 ldw x, (0x14, sp) + 000067 A3 D8 00 [ 2] 125 cpw x, #0xd800 + 00006A 7B 13 [ 1] 126 ld a, (0x13, sp) + 00006C A2 00 [ 1] 127 sbc a, #0x00 + 00006E 7B 12 [ 1] 128 ld a, (0x12, sp) + 000070 A2 00 [ 1] 129 sbc a, #0x00 + 000072 25 15 [ 1] 130 jrc 00110$ + 000074 1E 14 [ 2] 131 ldw x, (0x14, sp) + 000076 A3 E0 00 [ 2] 132 cpw x, #0xe000 + 000079 7B 13 [ 1] 133 ld a, (0x13, sp) + 00007B A2 00 [ 1] 134 sbc a, #0x00 + 00007D 7B 12 [ 1] 135 ld a, (0x12, sp) + 00007F A2 00 [ 1] 136 sbc a, #0x00 + 000081 24 06 [ 1] 137 jrnc 00110$ + 138 ; ../wctomb.c: 48: return(-1); + 000083 5F [ 1] 139 clrw x + 000084 5A [ 2] 140 decw x + 000085 ACs00r01r05 [ 2] 141 jpf 00119$ + 000089 142 00110$: + 143 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + 000089 16 12 [ 2] 144 ldw y, (0x12, sp) + 00008B 17 09 [ 2] 145 ldw (0x09, sp), y + 00008D 1E 14 [ 2] 146 ldw x, (0x14, sp) + 00008F A6 0C [ 1] 147 ld a, #0x0c + 000091 148 00161$: + 000091 04 09 [ 1] 149 srl (0x09, sp) + 000093 06 0A [ 1] 150 rrc (0x0a, sp) + 000095 56 [ 2] 151 rrcw x + 000096 4A [ 1] 152 dec a + 000097 26 F8 [ 1] 153 jrne 00161$ + 000099 1F 0B [ 2] 154 ldw (0x0b, sp), x + 155 ; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80; + 00009B 1E 01 [ 2] 156 ldw x, (0x01, sp) + 00009D 5C [ 1] 157 incw x + 00009E 5C [ 1] 158 incw x + 00009F 1F 06 [ 2] 159 ldw (0x06, sp), x + 160 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + 0000A1 7B 0C [ 1] 161 ld a, (0x0c, sp) + 0000A3 90 97 [ 1] 162 ld yl, a + 163 ; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80; + 0000A5 7B 08 [ 1] 164 ld a, (0x08, sp) + 0000A7 A4 3F [ 1] 165 and a, #0x3f + 0000A9 AA 80 [ 1] 166 or a, #0x80 + 0000AB 6B 08 [ 1] 167 ld (0x08, sp), a + 168 ; ../wctomb.c: 49: else if(wc < 0x10000) + 0000AD 1E 12 [ 2] 169 ldw x, (0x12, sp) + 0000AF A3 00 01 [ 2] 170 cpw x, #0x0001 + 0000B2 24 18 [ 1] 171 jrnc 00107$ + 172 ; ../wctomb.c: 51: s[0] = (wc >> 12) & 0x0f | 0xe0; + 0000B4 90 9F [ 1] 173 ld a, yl + 0000B6 A4 0F [ 1] 174 and a, #0x0f + 0000B8 AA E0 [ 1] 175 or a, #0xe0 + 0000BA 1E 01 [ 2] 176 ldw x, (0x01, sp) + 0000BC F7 [ 1] 177 ld (x), a + 178 ; ../wctomb.c: 52: s[1] = (wc >> 6) & 0x3f | 0x80; + 0000BD 1E 03 [ 2] 179 ldw x, (0x03, sp) + 0000BF 7B 08 [ 1] 180 ld a, (0x08, sp) + 0000C1 F7 [ 1] 181 ld (x), a + 182 ; ../wctomb.c: 53: s[2] = (wc >> 0) & 0x3f | 0x80; + 0000C2 1E 06 [ 2] 183 ldw x, (0x06, sp) + 0000C4 7B 05 [ 1] 184 ld a, (0x05, sp) + 0000C6 F7 [ 1] 185 ld (x), a + 186 ; ../wctomb.c: 54: return(3); + 0000C7 AE 00 03 [ 2] 187 ldw x, #0x0003 + 0000CA 20 39 [ 2] 188 jra 00119$ + 0000CC 189 00107$: + 190 ; ../wctomb.c: 56: else if(wc < 0x110000) + 191 ; ../wctomb.c: 58: s[0] = (wc >> 18) & 0x07 | 0xf0; + 0000CC 1E 12 [ 2] 192 ldw x, (0x12, sp) + 0000CE A3 00 11 [ 2] 193 cpw x, #0x0011 + 0000D1 24 30 [ 1] 194 jrnc 00104$ + 0000D3 1F 0B [ 2] 195 ldw (0x0b, sp), x + 0000D5 0F 0A [ 1] 196 clr (0x0a, sp) + 0000D7 0F 09 [ 1] 197 clr (0x09, sp) + 0000D9 04 0B [ 1] 198 srl (0x0b, sp) + 0000DB 06 0C [ 1] 199 rrc (0x0c, sp) + 0000DD 04 0B [ 1] 200 srl (0x0b, sp) + 0000DF 06 0C [ 1] 201 rrc (0x0c, sp) + 0000E1 7B 0C [ 1] 202 ld a, (0x0c, sp) + 0000E3 A4 07 [ 1] 203 and a, #0x07 + 0000E5 AA F0 [ 1] 204 or a, #0xf0 + 0000E7 1E 01 [ 2] 205 ldw x, (0x01, sp) + 0000E9 F7 [ 1] 206 ld (x), a + 207 ; ../wctomb.c: 59: s[1] = (wc >> 12) & 0x3f | 0x80; + 0000EA 90 9F [ 1] 208 ld a, yl + 0000EC A4 3F [ 1] 209 and a, #0x3f + 0000EE AA 80 [ 1] 210 or a, #0x80 + 0000F0 1E 03 [ 2] 211 ldw x, (0x03, sp) + 0000F2 F7 [ 1] 212 ld (x), a + 213 ; ../wctomb.c: 60: s[2] = (wc >> 6) & 0x3f | 0x80; + 0000F3 1E 06 [ 2] 214 ldw x, (0x06, sp) + 0000F5 7B 08 [ 1] 215 ld a, (0x08, sp) + 0000F7 F7 [ 1] 216 ld (x), a + 217 ; ../wctomb.c: 61: s[3] = (wc >> 0) & 0x3f | 0x80; + 0000F8 1E 01 [ 2] 218 ldw x, (0x01, sp) + 0000FA 7B 05 [ 1] 219 ld a, (0x05, sp) + 0000FC E7 03 [ 1] 220 ld (0x0003, x), a + 221 ; ../wctomb.c: 62: return(4); + 0000FE AE 00 04 [ 2] 222 ldw x, #0x0004 + 000101 20 02 [ 2] 223 jra 00119$ + 000103 224 00104$: + 225 ; ../wctomb.c: 65: return(-1); + 000103 5F [ 1] 226 clrw x + 000104 5A [ 2] 227 decw x + 000105 228 00119$: + 229 ; ../wctomb.c: 66: } + 000105 5B 0C [ 2] 230 addw sp, #12 + 000107 87 [ 5] 231 retf + 232 .area CODE + 233 .area CONST + 234 .area INITIALIZER + 235 .area CABS (ABS) diff --git a/device/lib/stm8-large/wctomb.rel b/device/lib/stm8-large/wctomb.rel new file mode 100644 index 0000000..8a14e13 --- /dev/null +++ b/device/lib/stm8-large/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 108 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 10 26 04 AC 00 01 05 +R 00 00 00 09 80 0A 00 09 +T 00 00 0A +R 00 00 00 09 +T 00 00 0A 16 10 17 01 7B 15 1E 14 A3 00 80 88 7B +R 00 00 00 09 +T 00 00 17 14 A2 00 7B 13 A2 00 84 24 09 1E 01 F7 +R 00 00 00 09 +T 00 00 24 5F 5C AC 00 01 05 +R 00 00 00 09 80 06 00 09 +T 00 00 2A +R 00 00 00 09 +T 00 00 2A 1E 14 88 A6 40 62 84 16 01 90 5C 17 03 +R 00 00 00 09 +T 00 00 37 A4 3F 41 6B 08 41 AA 80 6B 05 1E 14 A3 +R 00 00 00 09 +T 00 00 44 08 00 7B 13 A2 00 7B 12 A2 00 24 15 7B +R 00 00 00 09 +T 00 00 51 08 A4 1F AA C0 1E 01 F7 1E 03 7B 05 F7 +R 00 00 00 09 +T 00 00 5E AE 00 02 AC 00 01 05 +R 00 00 00 09 80 07 00 09 +T 00 00 65 +R 00 00 00 09 +T 00 00 65 1E 14 A3 D8 00 7B 13 A2 00 7B 12 A2 00 +R 00 00 00 09 +T 00 00 72 25 15 1E 14 A3 E0 00 7B 13 A2 00 7B 12 +R 00 00 00 09 +T 00 00 7F A2 00 24 06 5F 5A AC 00 01 05 +R 00 00 00 09 80 0A 00 09 +T 00 00 89 +R 00 00 00 09 +T 00 00 89 16 12 17 09 1E 14 A6 0C +R 00 00 00 09 +T 00 00 91 +R 00 00 00 09 +T 00 00 91 04 09 06 0A 56 4A 26 F8 1F 0B 1E 01 5C +R 00 00 00 09 +T 00 00 9E 5C 1F 06 7B 0C 90 97 7B 08 A4 3F AA 80 +R 00 00 00 09 +T 00 00 AB 6B 08 1E 12 A3 00 01 24 18 90 9F A4 0F +R 00 00 00 09 +T 00 00 B8 AA E0 1E 01 F7 1E 03 7B 08 F7 1E 06 7B +R 00 00 00 09 +T 00 00 C5 05 F7 AE 00 03 20 39 +R 00 00 00 09 +T 00 00 CC +R 00 00 00 09 +T 00 00 CC 1E 12 A3 00 11 24 30 1F 0B 0F 0A 0F 09 +R 00 00 00 09 +T 00 00 D9 04 0B 06 0C 04 0B 06 0C 7B 0C A4 07 AA +R 00 00 00 09 +T 00 00 E6 F0 1E 01 F7 90 9F A4 3F AA 80 1E 03 F7 +R 00 00 00 09 +T 00 00 F3 1E 06 7B 08 F7 1E 01 7B 05 E7 03 AE +R 00 00 00 09 +T 00 00 FF 00 04 20 02 +R 00 00 00 09 +T 00 01 03 +R 00 00 00 09 +T 00 01 03 5F 5A +R 00 00 00 09 +T 00 01 05 +R 00 00 00 09 +T 00 01 05 5B 0C 87 +R 00 00 00 09 diff --git a/device/lib/stm8-large/wctomb.sym b/device/lib/stm8-large/wctomb.sym new file mode 100644 index 0000000..0cc1fb7 --- /dev/null +++ b/device/lib/stm8-large/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 108 flags 0 + A CABS size 0 flags 8 + |
