diff --git a/programs/develop/ktcc/trunk/libc.obj/.gitignore b/programs/develop/ktcc/trunk/libc.obj/.gitignore deleted file mode 100644 index 72d3598050..0000000000 --- a/programs/develop/ktcc/trunk/libc.obj/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -*.swp -lib/libc.obj -lib/libc.obj.a -lib/crt0.o -*.o -tests/argtest -source/make.bat -/samples/*.kex diff --git a/programs/develop/ktcc/trunk/libc.obj/include/inttypes.h b/programs/develop/ktcc/trunk/libc.obj/include/inttypes.h new file mode 100644 index 0000000000..74f1fa91ff --- /dev/null +++ b/programs/develop/ktcc/trunk/libc.obj/include/inttypes.h @@ -0,0 +1,201 @@ +#ifndef _INTTYPES_H_ +#define _INTTYPES_H_ + +#include + +#define __PRI64 "ll" +#define __PRIPTR "" + +#define PRId8 "d" +#define PRId16 "d" +#define PRId32 "d" +#define PRId64 __PRI64 "d" + +#define PRIdLEAST8 "d" +#define PRIdLEAST16 "d" +#define PRIdLEAST32 "d" +#define PRIdLEAST64 __PRI64 "d" + +#define PRIdFAST8 "d" +#define PRIdFAST16 "d" +#define PRIdFAST32 "d" +#define PRIdFAST64 __PRI64 "d" + +#define PRIi8 "i" +#define PRIi16 "i" +#define PRIi32 "i" +#define PRIi64 __PRI64 "i" + +#define PRIiLEAST8 "i" +#define PRIiLEAST16 "i" +#define PRIiLEAST32 "i" +#define PRIiLEAST64 __PRI64 "i" + +#define PRIiFAST8 "i" +#define PRIiFAST16 "i" +#define PRIiFAST32 "i" +#define PRIiFAST64 __PRI64 "i" + +#define PRIo8 "o" +#define PRIo16 "o" +#define PRIo32 "o" +#define PRIo64 __PRI64 "o" + +#define PRIoLEAST8 "o" +#define PRIoLEAST16 "o" +#define PRIoLEAST32 "o" +#define PRIoLEAST64 __PRI64 "o" + +#define PRIoFAST8 "o" +#define PRIoFAST16 "o" +#define PRIoFAST32 "o" +#define PRIoFAST64 __PRI64 "o" + +#define PRIu8 "u" +#define PRIu16 "u" +#define PRIu32 "u" +#define PRIu64 __PRI64 "u" + +#define PRIuLEAST8 "u" +#define PRIuLEAST16 "u" +#define PRIuLEAST32 "u" +#define PRIuLEAST64 __PRI64 "u" + +#define PRIuFAST8 "u" +#define PRIuFAST16 "u" +#define PRIuFAST32 "u" +#define PRIuFAST64 __PRI64 "u" + +#define PRIx8 "x" +#define PRIx16 "x" +#define PRIx32 "x" +#define PRIx64 __PRI64 "x" + +#define PRIxLEAST8 "x" +#define PRIxLEAST16 "x" +#define PRIxLEAST32 "x" +#define PRIxLEAST64 __PRI64 "x" + +#define PRIxFAST8 "x" +#define PRIxFAST16 "x" +#define PRIxFAST32 "x" +#define PRIxFAST64 __PRI64 "x" + +#define PRIX8 "X" +#define PRIX16 "X" +#define PRIX32 "X" +#define PRIX64 __PRI64 "X" + +#define PRIXLEAST8 "X" +#define PRIXLEAST16 "X" +#define PRIXLEAST32 "X" +#define PRIXLEAST64 __PRI64 "X" + +#define PRIXFAST8 "X" +#define PRIXFAST16 "X" +#define PRIXFAST32 "X" +#define PRIXFAST64 __PRI64 "X" + +#define PRIdMAX __PRI64 "d" +#define PRIiMAX __PRI64 "i" +#define PRIoMAX __PRI64 "o" +#define PRIuMAX __PRI64 "u" +#define PRIxMAX __PRI64 "x" +#define PRIXMAX __PRI64 "X" + +#define PRIdPTR __PRIPTR "d" +#define PRIiPTR __PRIPTR "i" +#define PRIoPTR __PRIPTR "o" +#define PRIuPTR __PRIPTR "u" +#define PRIxPTR __PRIPTR "x" +#define PRIXPTR __PRIPTR "X" + +#define SCNd8 "hhd" +#define SCNd16 "hd" +#define SCNd32 "d" +#define SCNd64 __PRI64 "d" + +#define SCNdLEAST8 "hhd" +#define SCNdLEAST16 "hd" +#define SCNdLEAST32 "d" +#define SCNdLEAST64 __PRI64 "d" + +#define SCNdFAST8 "hhd" +#define SCNdFAST16 "d" +#define SCNdFAST32 "d" +#define SCNdFAST64 __PRI64 "d" + +#define SCNi8 "hhi" +#define SCNi16 "hi" +#define SCNi32 "i" +#define SCNi64 __PRI64 "i" + +#define SCNiLEAST8 "hhi" +#define SCNiLEAST16 "hi" +#define SCNiLEAST32 "i" +#define SCNiLEAST64 __PRI64 "i" + +#define SCNiFAST8 "hhi" +#define SCNiFAST16 "i" +#define SCNiFAST32 "i" +#define SCNiFAST64 __PRI64 "i" + +#define SCNu8 "hhu" +#define SCNu16 "hu" +#define SCNu32 "u" +#define SCNu64 __PRI64 "u" + +#define SCNuLEAST8 "hhu" +#define SCNuLEAST16 "hu" +#define SCNuLEAST32 "u" +#define SCNuLEAST64 __PRI64 "u" + +#define SCNuFAST8 "hhu" +#define SCNuFAST16 "u" +#define SCNuFAST32 "u" +#define SCNuFAST64 __PRI64 "u" + +#define SCNo8 "hho" +#define SCNo16 "ho" +#define SCNo32 "o" +#define SCNo64 __PRI64 "o" + +#define SCNoLEAST8 "hho" +#define SCNoLEAST16 "ho" +#define SCNoLEAST32 "o" +#define SCNoLEAST64 __PRI64 "o" + +#define SCNoFAST8 "hho" +#define SCNoFAST16 "o" +#define SCNoFAST32 "o" +#define SCNoFAST64 __PRI64 "o" + +#define SCNx8 "hhx" +#define SCNx16 "hx" +#define SCNx32 "x" +#define SCNx64 __PRI64 "x" + +#define SCNxLEAST8 "hhx" +#define SCNxLEAST16 "hx" +#define SCNxLEAST32 "x" +#define SCNxLEAST64 __PRI64 "x" + +#define SCNxFAST8 "hhx" +#define SCNxFAST16 "x" +#define SCNxFAST32 "x" +#define SCNxFAST64 __PRI64 "x" + +#define SCNdMAX __PRI64 "d" +#define SCNiMAX __PRI64 "i" +#define SCNoMAX __PRI64 "o" +#define SCNuMAX __PRI64 "u" +#define SCNxMAX __PRI64 "x" + +#define SCNdPTR __PRIPTR "d" +#define SCNiPTR __PRIPTR "i" +#define SCNoPTR __PRIPTR "o" +#define SCNuPTR __PRIPTR "u" +#define SCNxPTR __PRIPTR "x" + +#endif + diff --git a/programs/develop/ktcc/trunk/libc.obj/include/sys/ksys.h b/programs/develop/ktcc/trunk/libc.obj/include/sys/ksys.h index e209daa36b..6cb780a8bb 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/sys/ksys.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/sys/ksys.h @@ -783,7 +783,7 @@ enum KSYS_CURSOR_SRC { KOSAPI void* _ksys_load_cursor(void* path, uint32_t flags) // subfunction 4 - load cursor { - uint32_t val; + void* val; asm_inline( "int $0x40" : "=a"(val) @@ -794,7 +794,7 @@ KOSAPI void* _ksys_load_cursor(void* path, uint32_t flags) // subfunction 4 - lo KOSAPI void* _ksys_set_cursor(void* cursor) // subfunction 5 - set cursor { - uint32_t old; + void* old; asm_inline( "int $0x40" : "=a"(old) diff --git a/programs/develop/ktcc/trunk/libc.obj/source/Tupfile.lua b/programs/develop/ktcc/trunk/libc.obj/source/Tupfile.lua index fb1d168549..3d75b66e6e 100755 --- a/programs/develop/ktcc/trunk/libc.obj/source/Tupfile.lua +++ b/programs/develop/ktcc/trunk/libc.obj/source/Tupfile.lua @@ -1,8 +1,18 @@ +if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_GCC") ~= "" then return end HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../../../" or tup.getconfig("HELPERDIR") tup.include(HELPERDIR .. "/use_gcc.lua") -CFLAGS = " -c -nostdinc -DGNUC -D_BUILD_LIBC -Os -fno-common -fno-builtin -fno-leading-underscore -fno-pie" +CFLAGS = " -c -nostdinc -DGNUC -D_BUILD_LIBC -Os -fno-common -fno-builtin -fno-leading-underscore -fno-pie" INCLUDES = " -I../include" -tup.rule("libc.c", "kos32-gcc" .. CFLAGS .. INCLUDES .. " -o %o %f " .. tup.getconfig("KPACK_CMD"), "libc.obj") +OBJS = {"math/tan.obj", "math/sqrt.obj"} + +for _, OBJ in pairs(OBJS) do + tup.rule(string.gsub(OBJ, ".obj", ".asm"), "fasm %f %o ", OBJ) +end + +tup.rule("libc.c", "kos32-gcc" .. CFLAGS .. INCLUDES .. " -o %o %f ", "libc_tmp.obj") + +table.insert(OBJS, "libc_tmp.obj"); +tup.rule(OBJS, "clink -o %o %f" .. " && kos32-strip %o --strip-unneeded " .. tup.getconfig("KPACK_CMD"), "libc.obj"); diff --git a/programs/develop/ktcc/trunk/libc.obj/source/libc.c b/programs/develop/ktcc/trunk/libc.obj/source/libc.c index a5e5d5e099..f724d7728b 100644 --- a/programs/develop/ktcc/trunk/libc.obj/source/libc.c +++ b/programs/develop/ktcc/trunk/libc.obj/source/libc.c @@ -139,9 +139,7 @@ __asm__( ".include \"math/pow2.s\"\n\t" ".include \"math/pow10.s\"\n\t" ".include \"math/round.s\"\n\t" - ".include \"math/sqrt.s\"\n\t" - ".include \"math/sin.s\"\n\t" - ".include \"math/tan.s\"\n\t"); + ".include \"math/sin.s\"\n\t"); __asm__( ".include \"string/memmove.s\"\n\t" diff --git a/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/Makefile b/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/Makefile index 3effd1a2c6..5457ee835f 100755 --- a/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/Makefile +++ b/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/Makefile @@ -1,11 +1,10 @@ KTCC=kos32-tcc - FASM=fasm OBJ= memcpy.o memmove.o memset.o libtcc1.o all: $(OBJ) - ar -crs ../../../bin/lib/libtcc.a $(OBJ) + ar -crs ../../../bin/lib/libtcc1.a $(OBJ) rm -f *.o %.o : %.c @@ -13,4 +12,4 @@ all: $(OBJ) %.o : %.asm $(FASM) $< $@ - + diff --git a/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memcpy.asm b/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memcpy.asm index bc56bbbb06..f00c780cc3 100644 --- a/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memcpy.asm +++ b/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memcpy.asm @@ -6,19 +6,18 @@ include '../../../../../../proc32.inc' public memcpy proc memcpy c, to:dword,from:dword,count:dword - push esi - push edi - mov ecx,[count] - test ecx,ecx - jz no_copy_block - mov esi,[from] - mov edi,[to] - cld - rep movsb -no_copy_block: - - pop edi - pop esi - mov eax, [to] - ret -endp + push esi + push edi + mov ecx, [count] + test ecx, ecx + jz .no_copy_block + mov esi, [from] + mov edi, [to] + cld + rep movsb +.no_copy_block: + pop edi + pop esi + mov eax, [to] + ret +endp diff --git a/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memmove.asm b/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memmove.asm index 26c24d7faf..f9fe272d25 100644 --- a/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memmove.asm +++ b/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memmove.asm @@ -6,29 +6,27 @@ include '../../../../../../proc32.inc' public memmove proc memmove c, to:dword,from:dword,count:dword - - push esi - push edi - mov ecx,[count] - test ecx,ecx - jz no_copy_block_ - mov esi,[from] - mov edi,[to] - cmp esi, edi - je no_copy_block_ - jg copy_ - add esi, ecx - add edi, ecx - dec esi - dec edi - std -copy_: - rep movsb - cld -no_copy_block_: - - pop edi - pop esi - mov eax,[to] - ret + push esi + push edi + mov ecx,[count] + test ecx,ecx + jz .no_copy_block + mov esi,[from] + mov edi,[to] + cmp esi, edi + je .no_copy_block + jg .copy + add esi, ecx + add edi, ecx + dec esi + dec edi + std +.copy: + rep movsb + cld +.no_copy_block: + pop edi + pop esi + mov eax,[to] + ret endp diff --git a/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memset.asm b/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memset.asm index 55bcbac38d..6f2c2c4f47 100644 --- a/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memset.asm +++ b/programs/develop/ktcc/trunk/libc.obj/source/libtcc1/memset.asm @@ -3,14 +3,14 @@ section '.text' executable public memset memset: - push edi - mov edi,[esp+8] - mov eax,[esp+12] - mov ecx,[esp+16] - jecxz .no_set - cld - rep stosb + push edi + mov edi, [esp+8] + mov eax, [esp+12] + mov ecx, [esp+16] + jecxz .no_set + cld + rep stosb .no_set: - mov eax, [esp+8] - pop edi - ret + mov eax, [esp+8] + pop edi + ret diff --git a/programs/develop/ktcc/trunk/libc.obj/source/math/sqrt.asm b/programs/develop/ktcc/trunk/libc.obj/source/math/sqrt.asm new file mode 100644 index 0000000000..c537ea8486 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc.obj/source/math/sqrt.asm @@ -0,0 +1,9 @@ +format COFF +section '.text' + +public _sqrt as "sqrt" + +_sqrt: + fld qword[esp+4] + fsqrt + ret diff --git a/programs/develop/ktcc/trunk/libc.obj/source/math/sqrt.s b/programs/develop/ktcc/trunk/libc.obj/source/math/sqrt.s deleted file mode 100644 index 4011a53852..0000000000 --- a/programs/develop/ktcc/trunk/libc.obj/source/math/sqrt.s +++ /dev/null @@ -1,8 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ - -.global sqrt; - -sqrt: - fldl 4(%esp) - fsqrt - ret diff --git a/programs/develop/ktcc/trunk/libc.obj/source/math/tan.s b/programs/develop/ktcc/trunk/libc.obj/source/math/tan.s deleted file mode 100644 index 5101c4ffbf..0000000000 --- a/programs/develop/ktcc/trunk/libc.obj/source/math/tan.s +++ /dev/null @@ -1,16 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ - -tan.L0: - .quad 0xffffffffffffffff - -tan: - fldl 4(%esp) - fptan - fstsw - fstp %st(0) - sahf - jnp tan.L1 -/* fstp %st(0) - if exception, there is nothing on the stack */ - fldl tan.L0 -tan.L1: - ret