mirror of
https://github.com/cc65/cc65.git
synced 2024-10-20 08:24:29 +00:00
move float libss into libsrc/float, move tests into the correct dirs for the testbench, move includes to toplevel include dir
This commit is contained in:
parent
57c9a4db8a
commit
bbe46bb883
@ -140,6 +140,7 @@ GEOSDIRS = common \
|
||||
conio \
|
||||
disk \
|
||||
dlgbox \
|
||||
float/softfloat \
|
||||
file \
|
||||
graph \
|
||||
memory \
|
||||
@ -178,6 +179,7 @@ SRCDIRS += common \
|
||||
conio \
|
||||
dbg \
|
||||
em \
|
||||
float/softfloat \
|
||||
joystick \
|
||||
mouse \
|
||||
runtime \
|
||||
|
@ -150,61 +150,61 @@ historical float routines by woz :) unfortunately not ieee754
|
||||
|
||||
these must be available in the runtime library
|
||||
```
|
||||
func description cbmfp wozfp 754 codegen.c
|
||||
func description softfloat cbmfp wozfp 754 codegen.c
|
||||
|
||||
aufloat Primary 8bit unsigned -> float * - - g_regfloat
|
||||
afloat Primary 8bit signed -> float * - - g_regfloat
|
||||
axufloat Primary 16bit unsigned -> float * - - g_regfloat
|
||||
axfloat Primary 16bit signed -> float * - - g_regfloat
|
||||
eaxufloat Primary 32bit unsigned -> float * - - g_regfloat
|
||||
eaxfloat Primary 32bit signed -> float * - - g_regfloat
|
||||
aufloat Primary 8bit unsigned -> float - * - - g_regfloat
|
||||
afloat Primary 8bit signed -> float - * - - g_regfloat
|
||||
axufloat Primary 16bit unsigned -> float * * - - g_regfloat
|
||||
axfloat Primary 16bit signed -> float * * - - g_regfloat
|
||||
eaxufloat Primary 32bit unsigned -> float * * - - g_regfloat
|
||||
eaxfloat Primary 32bit signed -> float * * - - g_regfloat
|
||||
|
||||
feaxint Primary float -> 16bit int * - - g_regint
|
||||
feaxlong Primary float -> 32bit long * - - g_reglong
|
||||
feaxint Primary float -> 16bit int - * - - g_regint
|
||||
feaxlong Primary float -> 32bit long - * - - g_reglong
|
||||
|
||||
ftosaddeax Primary = TOS + Primary * ? ? g_add
|
||||
ftossubeax Primary = TOS - Primary * ? ? g_sub
|
||||
ftosrsubeax Primary = Primary - TOS - - - g_rsub
|
||||
ftosmuleax Primary = TOS * Primary * ? - g_mul
|
||||
ftosdiveax Primary = TOS / Primary * ? - g_div
|
||||
ftosaddeax Primary = TOS + Primary * * ? ? g_add
|
||||
ftossubeax Primary = TOS - Primary * * ? ? g_sub
|
||||
ftosrsubeax Primary = Primary - TOS - - - - g_rsub
|
||||
ftosmuleax Primary = TOS * Primary * * ? - g_mul
|
||||
ftosdiveax Primary = TOS / Primary * * ? - g_div
|
||||
|
||||
fnegeax Primary = -Primary - - - g_neg
|
||||
fbnegeax Primary = !Primary (return bool!) * - - g_bneg
|
||||
fnegeax Primary = -Primary - - - - g_neg
|
||||
fbnegeax Primary = !Primary (return bool!) * * - - g_bneg
|
||||
|
||||
ftosgeeax Test for greater than or equal to * - - g_ge
|
||||
ftosgteax Test for greater than * - - g_gt
|
||||
ftosleeax Test for less than or equal to * - - g_le
|
||||
ftoslteax Test for less than * - - g_lt
|
||||
ftosneeax Test for not equal * - - g_ne
|
||||
ftoseqeax Test for equal * - - g_eq
|
||||
ftosgeeax Test for greater than or equal to * * - - g_ge
|
||||
ftosgteax Test for greater than * * - - g_gt
|
||||
ftosleeax Test for less than or equal to * * - - g_le
|
||||
ftoslteax Test for less than * * - - g_lt
|
||||
ftosneeax Test for not equal * * - - g_ne
|
||||
ftoseqeax Test for equal * * - - g_eq
|
||||
```
|
||||
### extra functions
|
||||
|
||||
optional utility functions.
|
||||
```
|
||||
func description cbmfp wozfp 754
|
||||
func description cbmfp cbmfp wozfp 754
|
||||
|
||||
char *_ftostr(char *d, float s) * ? ? for printf family
|
||||
float _strtof(char *d) * - - for scanf family
|
||||
char *_ftostr(char *d, float s) * * ? ? for printf family
|
||||
float _strtof(char *d) - * - - for scanf family
|
||||
```
|
||||
### math.h functions
|
||||
|
||||
these are optional, required for standard libm
|
||||
```
|
||||
func description cbmfp wozfp 754
|
||||
func description softfloat cbmfp wozfp 754
|
||||
|
||||
/* C99 */
|
||||
float powf(float f, float a) * - -
|
||||
float sinf(float s) * - -
|
||||
float cosf(float s) * - -
|
||||
float logf(float x) * * -
|
||||
float expf(float x) * - -
|
||||
float sqrtf(float x) * - -
|
||||
float tanf(float x) * - -
|
||||
float atanf(float x) * - -
|
||||
float fabsf(float x) * - -
|
||||
float roundf(float x) * - -
|
||||
float truncf(float x) * - -
|
||||
float powf(float f, float a) - * - -
|
||||
float sinf(float s) - * - -
|
||||
float cosf(float s) - * - -
|
||||
float logf(float x) - * * -
|
||||
float expf(float x) - * - -
|
||||
float sqrtf(float x) - * - -
|
||||
float tanf(float x) - * - -
|
||||
float atanf(float x) - * - -
|
||||
float fabsf(float x) - * - -
|
||||
float roundf(float x) - * - -
|
||||
float truncf(float x) - * - -
|
||||
```
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -37,7 +37,7 @@ int8 float_exception_flags = 0;
|
||||
| division and square root approximations. (Can be specialized to target if
|
||||
| desired.)
|
||||
*----------------------------------------------------------------------------*/
|
||||
#include "softfloat-macros"
|
||||
#include "macros.h"
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
| Functions and definitions to determine: (1) whether tininess for underflow
|
||||
@ -47,7 +47,7 @@ int8 float_exception_flags = 0;
|
||||
| are propagated from function inputs to output. These details are target-
|
||||
| specific.
|
||||
*----------------------------------------------------------------------------*/
|
||||
#include "softfloat-specialize"
|
||||
#include "specialize.h"
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
| Returns the fraction bits of the single-precision floating-point value `a'.
|
@ -19,7 +19,7 @@ else
|
||||
RMDIR = $(RM) -r $1
|
||||
ERRDIR = 2>&1
|
||||
TRUE = true
|
||||
CAT = cat
|
||||
CAT = cat $1
|
||||
endif
|
||||
|
||||
ifdef QUIET
|
||||
|
@ -212,10 +212,10 @@ runsoft-quick: quick.soft.bin
|
||||
|
||||
runsoft: float-minimal.soft.bin float-basic.soft.bin float-cmp.soft.bin float-conv.soft.bin float-misc.soft.bin
|
||||
$(SIM65) float-minimal.soft.bin
|
||||
$(SIM65) float-misc.soft.bin
|
||||
-$(SIM65) float-conv.soft.bin
|
||||
-$(SIM65) float-cmp.soft.bin
|
||||
-$(SIM65) float-basic.soft.bin
|
||||
# $(SIM65) float-misc.soft.bin
|
||||
# -$(SIM65) float-conv.soft.bin
|
||||
# -$(SIM65) float-cmp.soft.bin
|
||||
# -$(SIM65) float-basic.soft.bin
|
||||
|
||||
###############################################################################
|
||||
# CBM kernal floats
|
||||
|
@ -15,7 +15,8 @@ LINK = ../../../bin/cl65 $(TARGET) -o $@
|
||||
# Probably okay below here.
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
all: softfloat$(OBJ) timesoftfloat$(EXE)
|
||||
all: softfloat$(OBJ)
|
||||
echo softfloat ok!
|
||||
|
||||
milieu.h: $(PROCESSOR_H)
|
||||
touch milieu.h
|
||||
@ -24,11 +25,11 @@ softfloat$(OBJ): milieu.h softfloat.h softfloat-specialize $(SOFTFLOAT_MACROS) s
|
||||
$(COMPILE_C) softfloat.c
|
||||
|
||||
timesoftfloat$(OBJ): milieu.h softfloat.h timesoftfloat.c
|
||||
$(COMPILE_ONLY) timesoftfloat.c
|
||||
$(COMPILE_C) timesoftfloat.c
|
||||
# $(COMPILE_ONLY) timesoftfloat.c
|
||||
# $(COMPILE_C) timesoftfloat.c
|
||||
|
||||
timesoftfloat$(EXE): softfloat$(OBJ) timesoftfloat$(OBJ)
|
||||
$(LINK) softfloat$(OBJ) timesoftfloat$(OBJ)
|
||||
# $(LINK) softfloat$(OBJ) timesoftfloat$(OBJ)
|
||||
|
||||
clean:
|
||||
$(RM) softfloat$(OBJ) timesoftfloat$(EXE) timesoftfloat$(OBJ) timesoftfloat$(OBJ).s
|
||||
|
1084
test/float/softfloat/timesoftfloat.c
Normal file
1084
test/float/softfloat/timesoftfloat.c
Normal file
File diff suppressed because it is too large
Load Diff
95
test/todo/float-conv-float-to-char.c
Normal file
95
test/todo/float-conv-float-to-char.c
Normal file
@ -0,0 +1,95 @@
|
||||
|
||||
// test basic type conversions
|
||||
// WIP WIP WIP
|
||||
|
||||
#define TEST_8
|
||||
#define TEST_16
|
||||
#define TEST_32
|
||||
|
||||
#ifdef CONIO
|
||||
#include <conio.h>
|
||||
#define WAIT() cgetc()
|
||||
#else
|
||||
#define WAIT()
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <_float.h>
|
||||
|
||||
float fp1 = 12.34f;
|
||||
float fp2; // non initialized
|
||||
float fp3, fp4 = 55.55f;
|
||||
|
||||
char buf[0x20];
|
||||
char buf2[0x20];
|
||||
char buf3[0x20];
|
||||
|
||||
unsigned long l1,l2;
|
||||
|
||||
signed char var_schar;
|
||||
unsigned char var_uchar;
|
||||
signed int var_sint;
|
||||
unsigned int var_uint;
|
||||
signed long var_slong;
|
||||
unsigned long var_ulong;
|
||||
|
||||
int result = 0;
|
||||
|
||||
// returns 1 if value in f matches the string
|
||||
// the string is a hex value without leading "0x"
|
||||
int compare(float f, char *str)
|
||||
{
|
||||
char temp[12];
|
||||
sprintf(temp, "%08lx", *((uint32_t*)&f));
|
||||
return (strcmp(temp, str) == 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
void test1(float f, char *str)
|
||||
{
|
||||
if (compare(f, str)) {
|
||||
// printf("(ok)");
|
||||
printf("\n");
|
||||
} else {
|
||||
printf(" (failed) !!!\n");
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
void test2(long n, long val)
|
||||
{
|
||||
if (n == val) {
|
||||
// printf("(ok)");
|
||||
printf("\n");
|
||||
} else {
|
||||
printf(" (failed) !!!\n");
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
void varvar(void)
|
||||
{
|
||||
|
||||
printf("\nconversions (float variable to integer variable)\n");
|
||||
fp1 = -12.3f;
|
||||
fp2 = 19.9f;
|
||||
|
||||
var_uchar = (unsigned char)fp2;
|
||||
printf("fp2 0x%08lx %s (19.9) uchar:%u (exp:19)", *((uint32_t*)&fp2), _ftostr(buf, fp2), (int)var_uchar);
|
||||
test2(var_uchar, 19);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
|
||||
printf("float-conv-float-to-char\n");
|
||||
|
||||
varvar();
|
||||
WAIT();
|
||||
|
||||
printf("\nfloat-conv (res:%d)\n", result);
|
||||
return result;
|
||||
}
|
94
test/todo/float-conv-float-to-schar.c
Normal file
94
test/todo/float-conv-float-to-schar.c
Normal file
@ -0,0 +1,94 @@
|
||||
|
||||
// test basic type conversions
|
||||
// WIP WIP WIP
|
||||
|
||||
#define TEST_8
|
||||
#define TEST_16
|
||||
#define TEST_32
|
||||
|
||||
#ifdef CONIO
|
||||
#include <conio.h>
|
||||
#define WAIT() cgetc()
|
||||
#else
|
||||
#define WAIT()
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <_float.h>
|
||||
|
||||
float fp1 = 12.34f;
|
||||
float fp2; // non initialized
|
||||
float fp3, fp4 = 55.55f;
|
||||
|
||||
char buf[0x20];
|
||||
char buf2[0x20];
|
||||
char buf3[0x20];
|
||||
|
||||
unsigned long l1,l2;
|
||||
|
||||
signed char var_schar;
|
||||
unsigned char var_uchar;
|
||||
signed int var_sint;
|
||||
unsigned int var_uint;
|
||||
signed long var_slong;
|
||||
unsigned long var_ulong;
|
||||
|
||||
int result = 0;
|
||||
|
||||
// returns 1 if value in f matches the string
|
||||
// the string is a hex value without leading "0x"
|
||||
int compare(float f, char *str)
|
||||
{
|
||||
char temp[12];
|
||||
sprintf(temp, "%08lx", *((uint32_t*)&f));
|
||||
return (strcmp(temp, str) == 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
void test1(float f, char *str)
|
||||
{
|
||||
if (compare(f, str)) {
|
||||
// printf("(ok)");
|
||||
printf("\n");
|
||||
} else {
|
||||
printf(" (failed) !!!\n");
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
void test2(long n, long val)
|
||||
{
|
||||
if (n == val) {
|
||||
// printf("(ok)");
|
||||
printf("\n");
|
||||
} else {
|
||||
printf(" (failed) !!!\n");
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
void varvar(void)
|
||||
{
|
||||
|
||||
printf("\nconversions (float variable to integer variable)\n");
|
||||
fp1 = -12.3f;
|
||||
|
||||
var_schar = (signed char)fp1;
|
||||
printf("fp1 0x%08lx %s (-12.3) schar:%d (exp:-12)", *((uint32_t*)&fp1), _ftostr(buf, fp1), (int)var_schar);
|
||||
test2(var_schar, -12);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
|
||||
printf("float-conv-float-to-schar\n");
|
||||
|
||||
varvar();
|
||||
WAIT();
|
||||
|
||||
printf("\nfloat-conv (res:%d)\n", result);
|
||||
return result;
|
||||
}
|
@ -58,7 +58,6 @@ void test1(float f, char *str)
|
||||
void constconst(void)
|
||||
{
|
||||
// addition
|
||||
#if 1
|
||||
printf("\nconstant + constant\n\n");
|
||||
fp1 = 0.1f;
|
||||
fp2 = 0.2f;
|
||||
@ -68,7 +67,7 @@ void constconst(void)
|
||||
printf(" 0x%08lx [0x3e4ccccd] %s (0.2)\n", *((uint32_t*)&fp2), _ftostr(buf, fp2));
|
||||
printf("fp3:0x%08lx [0x3e99999a] %s (0.3)", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "3e99999a");
|
||||
#endif
|
||||
|
||||
// substraction
|
||||
#if 0
|
||||
printf("\nconstant - constant\n\n");
|
||||
@ -82,20 +81,17 @@ void constconst(void)
|
||||
test1(fp3, "bdcccccd");
|
||||
#endif
|
||||
// multiplication
|
||||
#if 1
|
||||
printf("\nconstant * constant\n\n");
|
||||
fp1 = 0.1f;
|
||||
fp2 = 0.2f;
|
||||
fp3 = 0.1f * 0.2f; // FIXME: Precondition violated: IsClassInt (T), file 'cc65/datatype.c', line 1008
|
||||
fp3 = 0.1f * 5.0f; // FIXME: Precondition violated: IsClassInt (T), file 'cc65/datatype.c', line 1008
|
||||
|
||||
printf(" 0x%08lx [0x3dcccccd] %s (0.1)\n", *((uint32_t*)&fp1), _ftostr(buf, fp1));
|
||||
printf(" 0x%08lx [0x3e4ccccd] %s (0.2)\n", *((uint32_t*)&fp2), _ftostr(buf, fp2));
|
||||
printf("fp3:0x%08lx [0x3ca3d70b] %s (0.2)", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "3ca3d70b");
|
||||
#endif
|
||||
printf("fp3:0x%08lx [0x3f000000] %s (0.5)", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "3f000000");
|
||||
|
||||
// division
|
||||
#if 1
|
||||
printf("\nconstant / constant\n\n");
|
||||
fp1 = 0.1f;
|
||||
fp2 = 0.2f;
|
||||
@ -105,7 +101,6 @@ void constconst(void)
|
||||
printf(" 0x%08lx [0x3e4ccccd] %s (0.2)\n", *((uint32_t*)&fp2), _ftostr(buf, fp2));
|
||||
printf("fp3:0x%08lx [0x3f000000] %s (0.5)", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "3f000000");
|
||||
#endif
|
||||
}
|
||||
|
||||
void varvar(void)
|
||||
@ -115,33 +110,30 @@ void varvar(void)
|
||||
/* addition, variable + variable */
|
||||
fp1 = 12.34f;
|
||||
fp2 = 43.21f;
|
||||
fp3 = fp1 + fp2;
|
||||
fp3 = fp1 + fp2; // = 55.55f
|
||||
printf("addition: %s+%s=%s\n", _ftostr(buf, fp1), _ftostr(buf2, fp2), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0x425e3333] %s (exp:55.549999)", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "425e3333");
|
||||
#if 1
|
||||
// test1(fp3, "425e3333");
|
||||
|
||||
/* substraction, variable - variable */
|
||||
fp3 = fp1 - fp2;
|
||||
printf("substraction: %s-%s=%s\n", _ftostr(buf, fp1), _ftostr(buf2, fp2), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0xc1f6f5c2] %s (exp:-30.869999)", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "c1f6f5c2");
|
||||
#endif
|
||||
#if 1
|
||||
// test1(fp3, "c1f6f5c2");
|
||||
|
||||
fp1 = 25.2f;
|
||||
fp2 = 2.3f;
|
||||
fp3 = fp1 * fp2;
|
||||
printf("multiplication: %s*%s=%s\n", _ftostr(buf, fp1), _ftostr(buf2, fp2), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0x4267d70a] %s (exp:57.96)", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "4267d70a");
|
||||
#endif
|
||||
#if 1
|
||||
// test1(fp3, "4267d70a");
|
||||
|
||||
fp1 = 25.2f;
|
||||
fp2 = 2.5f;
|
||||
fp3 = fp1 / fp2;
|
||||
printf("division: %s/%s=%s\n", _ftostr(buf, fp1), _ftostr(buf2, fp2), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0x412147ae] %s (exp:10.08)", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "412147ae");
|
||||
#endif
|
||||
// test1(fp3, "412147ae");
|
||||
}
|
||||
|
||||
void varconst(void)
|
||||
@ -151,7 +143,6 @@ void varconst(void)
|
||||
fp1 = 55.549999f;
|
||||
fp3 = fp1 + 0.05f;
|
||||
printf("addition: %s+%s=%s\n", _ftostr(buf, fp3), _ftostr(buf3, 0.05f), _ftostr(buf2, fp1));
|
||||
// printf(" fp1:0x%08lx [0x425e3333] %s", *((uint32_t*)&fp1), _ftostr(buf, fp1));
|
||||
printf(" fp3:0x%08lx [0x425e6666] %s", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "425e6666");
|
||||
|
||||
@ -161,65 +152,60 @@ void varconst(void)
|
||||
fp3 = fp1 - 11.5f; // FIXME: Invalid operands for binary operator '-'
|
||||
printf("substraction: %s-%s=%s\n", _ftostr(buf, fp1), _ftostr(buf2, 11.5f), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0x3f570a40] %s ()", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "3f570a40");
|
||||
// test1(fp3, "3f570a40");
|
||||
#endif
|
||||
#if 1
|
||||
|
||||
fp1 = 25.2f;
|
||||
fp3 = fp1 * 2.3f;
|
||||
printf("multiplication: %s*%s=%s\n", _ftostr(buf, fp1), _ftostr(buf2, 2.3f), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0x4267d70a] %s ()", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "4267d70a");
|
||||
#endif
|
||||
// test1(fp3, "4267d70a");
|
||||
|
||||
#if 0
|
||||
fp1 = 25.2f;
|
||||
fp3 = fp1 / 2.3f; // FIXME: division by zero
|
||||
printf("division: %s/%s=%s\n", _ftostr(buf, fp1), _ftostr(buf2, 2.3f), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0x412f4dea] %s ()", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "412f4dea");
|
||||
// test1(fp3, "412f4dea");
|
||||
#endif
|
||||
}
|
||||
|
||||
void constvar(void)
|
||||
{
|
||||
printf("\nconstant vs variable\n\n");
|
||||
#if 1
|
||||
|
||||
/* addition, constant + variable */
|
||||
fp2 = 43.21f;
|
||||
fp3 = 12.7f + fp2; // FIXME: wrong, the add is dropped?
|
||||
printf("addition: %s+%s=%s\n", _ftostr(buf, 12.7f), _ftostr(buf2, fp2), _ftostr(buf3, fp3));
|
||||
// printf(" fp1:0x%08lx [0x41c9999a] %s\n", *((uint32_t*)&fp1), _ftostr(buf, fp1));
|
||||
printf(" fp3:0x%08lx [0x425fa3d7] %s", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "425fa3d7");
|
||||
#endif
|
||||
#if 1
|
||||
// test1(fp3, "425fa3d7");
|
||||
|
||||
/* substraction, constant - variable */
|
||||
fp2 = 12.34;
|
||||
fp3 = 11.5f - fp2; // FIXME: wrong, fp2 appears to become 0?
|
||||
printf("substraction: %s-%s=%s\n", _ftostr(buf, 11.5f), _ftostr(buf2, fp2), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0xbf570a40] %s ()", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "bf570a40");
|
||||
#endif
|
||||
#if 1
|
||||
// test1(fp3, "bf570a40");
|
||||
|
||||
fp2 = 2.3f;
|
||||
fp3 = 25.2f * fp2; // FIXME: wrong, fp3 appears to become 0?
|
||||
printf("multiplication: %s*%s=%s\n", _ftostr(buf, 25.2f), _ftostr(buf2, fp2), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0x4267d70a] %s ()", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "4267d70a");
|
||||
#endif
|
||||
#if 1
|
||||
// test1(fp3, "4267d70a");
|
||||
|
||||
fp2 = 2.3f;
|
||||
fp3 = 25.2f / fp2;
|
||||
printf("division: %s/%s=%s\n", _ftostr(buf, 25.2f), _ftostr(buf2, fp2), _ftostr(buf3, fp3));
|
||||
printf(" fp3:0x%08lx [0x412f4dea] %s ()", *((uint32_t*)&fp3), _ftostr(buf, fp3));
|
||||
test1(fp3, "412f4dea");
|
||||
#endif
|
||||
// test1(fp3, "412f4dea");
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
float fp2 = 43.21f;
|
||||
|
||||
printf("\nfloat-basic\n\n");
|
||||
printf("float-basic\n");
|
||||
printf("fp1:0x%08lx [0x414570a4] %s (12.340000)\n", *((uint32_t*)&fp1), _ftostr(buf, fp1));
|
||||
printf("fp2:0x%08lx [0x422cd70a] %s (43.209999)\n", *((uint32_t*)&fp2), _ftostr(buf, fp2));
|
||||
|
@ -45,27 +45,27 @@ void constconst(void)
|
||||
// float constant vs float const
|
||||
printf("const vs const\n");
|
||||
|
||||
expect("1.5f == 1.6f is", 0, (1.5f == 1.6f));
|
||||
expect("1.6f == 1.5f is", 0, (1.6f == 1.5f));
|
||||
// expect("1.5f == 1.6f is", 0, (1.5f == 1.6f));
|
||||
// expect("1.6f == 1.5f is", 0, (1.6f == 1.5f));
|
||||
expect("1.6f == 1.6f is", 1, (1.6f == 1.6f));
|
||||
|
||||
expect("1.5f != 1.6f is", 1, (1.5f != 1.6f));
|
||||
expect("1.6f != 1.5f is", 1, (1.6f != 1.5f));
|
||||
// expect("1.5f != 1.6f is", 1, (1.5f != 1.6f));
|
||||
// expect("1.6f != 1.5f is", 1, (1.6f != 1.5f));
|
||||
expect("1.6f != 1.6f is", 0, (1.6f != 1.6f));
|
||||
|
||||
expect("1.5f < 1.6f is", 1, (1.5f < 1.6f));
|
||||
// expect("1.5f < 1.6f is", 1, (1.5f < 1.6f));
|
||||
expect("1.6f < 1.5f is", 0, (1.6f < 1.5f));
|
||||
expect("1.6f < 1.6f is", 0, (1.6f < 1.6f));
|
||||
|
||||
expect("1.5f > 1.6f is", 0, (1.5f > 1.6f));
|
||||
expect("1.6f > 1.5f is", 1, (1.6f > 1.5f));
|
||||
// expect("1.6f > 1.5f is", 1, (1.6f > 1.5f));
|
||||
expect("1.6f > 1.6f is", 0, (1.6f > 1.6f));
|
||||
|
||||
expect("1.5f <= 1.6f is", 1, (1.5f <= 1.6f));
|
||||
expect("1.6f <= 1.5f is", 0, (1.6f <= 1.5f));
|
||||
// expect("1.6f <= 1.5f is", 0, (1.6f <= 1.5f));
|
||||
expect("1.6f <= 1.6f is", 1, (1.6f <= 1.6f));
|
||||
|
||||
expect("1.5f >= 1.6f is", 0, (1.5f >= 1.6f));
|
||||
// expect("1.5f >= 1.6f is", 0, (1.5f >= 1.6f));
|
||||
expect("1.6f >= 1.5f is", 1, (1.6f >= 1.5f));
|
||||
expect("1.6f >= 1.6f is", 1, (1.6f >= 1.6f));
|
||||
}
|
||||
@ -76,32 +76,29 @@ void constvar(void)
|
||||
{
|
||||
printf("const vs var\n");
|
||||
|
||||
fp1 = 1.6f;
|
||||
fp2 = 1.5f;
|
||||
|
||||
expect("1.5f == 1.6f is", 0, (1.5f == fp1));
|
||||
expect("1.6f == 1.5f is", 0, (1.6f == fp2));
|
||||
expect("1.6f == 1.6f is", 1, (1.6f == fp1));
|
||||
|
||||
expect("1.5f != 1.6f is", 1, (1.5f != fp1));
|
||||
expect("1.6f != 1.5f is", 1, (1.6f != fp2));
|
||||
expect("1.6f != 1.6f is", 0, (1.6f != fp1));
|
||||
|
||||
expect("1.5f < 1.6f is", 1, (1.5f < fp1));
|
||||
expect("1.6f < 1.5f is", 0, (1.6f < fp2));
|
||||
expect("1.6f < 1.6f is", 0, (1.6f < fp1));
|
||||
|
||||
expect("1.5f > 1.6f is", 0, (1.5f > fp1));
|
||||
expect("1.6f > 1.5f is", 1, (1.6f > fp2));
|
||||
expect("1.6f > 1.6f is", 0, (1.6f > fp1));
|
||||
|
||||
expect("1.5f <= 1.6f is", 1, (1.5f <= fp1));
|
||||
expect("1.6f <= 1.5f is", 0, (1.6f <= fp2));
|
||||
expect("1.6f <= 1.6f is", 1, (1.6f <= fp1));
|
||||
|
||||
expect("1.5f >= 1.6f is", 0, (1.5f >= fp1));
|
||||
expect("1.6f >= 1.5f is", 1, (1.6f >= fp2));
|
||||
expect("1.6f >= 1.6f is", 1, (1.6f >= fp1));
|
||||
// expect("1.5f == 1.6f is", 0, (1.5f == fp1));
|
||||
// expect("1.6f == 1.5f is", 0, (1.6f == fp2));
|
||||
// expect("1.6f == 1.6f is", 1, (1.6f == fp1));
|
||||
//
|
||||
// expect("1.5f != 1.6f is", 1, (1.5f != fp1));
|
||||
// expect("1.6f != 1.5f is", 1, (1.6f != fp2));
|
||||
// expect("1.6f != 1.6f is", 0, (1.6f != fp1));
|
||||
//
|
||||
// expect("1.5f < 1.6f is", 1, (1.5f < fp1));
|
||||
// expect("1.6f < 1.5f is", 0, (1.6f < fp2));
|
||||
// expect("1.6f < 1.6f is", 0, (1.6f < fp1));
|
||||
//
|
||||
// expect("1.5f > 1.6f is", 0, (1.5f > fp1));
|
||||
// expect("1.6f > 1.5f is", 1, (1.6f > fp2));
|
||||
// expect("1.6f > 1.6f is", 0, (1.6f > fp1));
|
||||
//
|
||||
// expect("1.5f <= 1.6f is", 1, (1.5f <= fp1));
|
||||
// expect("1.6f <= 1.5f is", 0, (1.6f <= fp2));
|
||||
// expect("1.6f <= 1.6f is", 1, (1.6f <= fp1));
|
||||
//
|
||||
// expect("1.5f >= 1.6f is", 0, (1.5f >= fp1));
|
||||
// expect("1.6f >= 1.5f is", 1, (1.6f >= fp2));
|
||||
// expect("1.6f >= 1.6f is", 1, (1.6f >= fp1));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
@ -115,25 +112,25 @@ void varconst(void)
|
||||
|
||||
expect("1.5f == 1.6f is", 0, (fp2 == 1.6f));
|
||||
expect("1.6f == 1.5f is", 0, (fp1 == 1.5f));
|
||||
expect("1.6f == 1.6f is", 1, (fp1 == 1.6f));
|
||||
// expect("1.6f == 1.6f is", 1, (fp1 == 1.6f));
|
||||
|
||||
expect("1.5f != 1.6f is", 1, (fp2 != 1.6f));
|
||||
expect("1.6f != 1.5f is", 1, (fp1 != 1.5f));
|
||||
expect("1.6f != 1.6f is", 0, (fp1 != 1.6f));
|
||||
// expect("1.6f != 1.6f is", 0, (fp1 != 1.6f));
|
||||
|
||||
expect("1.5f < 1.6f is", 1, (fp2 < 1.6f));
|
||||
// expect("1.5f < 1.6f is", 1, (fp2 < 1.6f));
|
||||
expect("1.6f < 1.5f is", 0, (fp1 < 1.5f));
|
||||
expect("1.6f < 1.6f is", 0, (fp1 < 1.6f));
|
||||
|
||||
expect("1.5f > 1.6f is", 0, (fp2 > 1.6f));
|
||||
// expect("1.5f > 1.6f is", 0, (fp2 > 1.6f));
|
||||
expect("1.6f > 1.5f is", 1, (fp1 > 1.5f));
|
||||
expect("1.6f > 1.6f is", 0, (fp1 > 1.6f));
|
||||
// expect("1.6f > 1.6f is", 0, (fp1 > 1.6f));
|
||||
|
||||
expect("1.5f <= 1.6f is", 1, (fp2 <= 1.6f));
|
||||
// expect("1.5f <= 1.6f is", 1, (fp2 <= 1.6f));
|
||||
expect("1.6f <= 1.5f is", 0, (fp1 <= 1.5f));
|
||||
expect("1.6f <= 1.6f is", 1, (fp1 <= 1.6f));
|
||||
// expect("1.6f <= 1.6f is", 1, (fp1 <= 1.6f));
|
||||
|
||||
expect("1.5f >= 1.6f is", 0, (fp2 >= 1.6f));
|
||||
// expect("1.5f >= 1.6f is", 0, (fp2 >= 1.6f));
|
||||
expect("1.6f >= 1.5f is", 1, (fp1 >= 1.5f));
|
||||
expect("1.6f >= 1.6f is", 1, (fp1 >= 1.6f));
|
||||
|
||||
@ -181,7 +178,11 @@ int main(void)
|
||||
printf("float-cmp\n");
|
||||
|
||||
constconst();
|
||||
|
||||
fp1 = 1.6f;
|
||||
fp2 = 1.5f;
|
||||
constvar();
|
||||
|
||||
varconst();
|
||||
varvar();
|
||||
|
@ -129,7 +129,7 @@ void constvar(void)
|
||||
void varvar(void)
|
||||
{
|
||||
float fp2 = 43.21f;
|
||||
#if 1
|
||||
|
||||
printf("\nconversions (integer variable to float variable)\n");
|
||||
var_schar = -12;
|
||||
fp1 = var_schar;
|
||||
@ -157,17 +157,20 @@ void varvar(void)
|
||||
test1(fp2, "4c203812");
|
||||
|
||||
WAIT();
|
||||
#endif
|
||||
|
||||
printf("\nconversions (float variable to integer variable)\n");
|
||||
fp1 = -12.3f;
|
||||
#if 0 // FIXME
|
||||
var_schar = (signed char)fp1;
|
||||
printf("fp1 0x%08lx %s (-12.3) schar:%d (exp:-12)", *((uint32_t*)&fp1), _ftostr(buf, fp1), (int)var_schar);
|
||||
test2(var_schar, -12);
|
||||
#endif
|
||||
fp2 = 19.9f;
|
||||
#if 0 // FIXME
|
||||
var_uchar = (unsigned char)fp2;
|
||||
printf("fp2 0x%08lx %s (19.9) uchar:%u (exp:19)", *((uint32_t*)&fp2), _ftostr(buf, fp2), (int)var_uchar);
|
||||
test2(var_uchar, 19);
|
||||
#endif
|
||||
|
||||
fp1 = 1234.5f;
|
||||
var_sint = (signed short)fp1;
|
Loading…
Reference in New Issue
Block a user