# HG changeset patch # User Wuzzy # Date 1541777303 -3600 # Node ID 801dc57371c36f536de94dcc16ebecf49ec14774 # Parent ab77b144245d12bcd29c3e41aeec76da203fa021 Pas2C: Fix bad C typedefs for Pascal data types Extended and Real diff -r ab77b144245d -r 801dc57371c3 project_files/hwc/rtl/pas2c.h --- a/project_files/hwc/rtl/pas2c.h Fri Nov 09 17:44:19 2018 +0300 +++ b/project_files/hwc/rtl/pas2c.h Fri Nov 09 16:28:23 2018 +0100 @@ -49,8 +49,8 @@ typedef LongWord Cardinal; typedef LongInt Integer; -typedef float extended; -typedef float real; +typedef long double extended; +typedef double real; typedef float single; typedef bool boolean; diff -r ab77b144245d -r 801dc57371c3 project_files/hwc/rtl/pmath.c --- a/project_files/hwc/rtl/pmath.c Fri Nov 09 17:44:19 2018 +0300 +++ b/project_files/hwc/rtl/pmath.c Fri Nov 09 16:28:23 2018 +0100 @@ -32,12 +32,16 @@ float __attribute__((overloadable)) fpcrtl_abs(float x) { - return fabs(x); + return fabsf(x); } double __attribute__((overloadable)) fpcrtl_abs(double x) { return fabs(x); } +long double __attribute__((overloadable)) fpcrtl_abs(long double x) +{ + return fabsl(x); +} int __attribute__((overloadable)) fpcrtl_abs(int x) { return abs(x); diff -r ab77b144245d -r 801dc57371c3 project_files/hwc/rtl/pmath.h --- a/project_files/hwc/rtl/pmath.h Fri Nov 09 17:44:19 2018 +0300 +++ b/project_files/hwc/rtl/pmath.h Fri Nov 09 16:28:23 2018 +0100 @@ -18,6 +18,7 @@ float __attribute__((overloadable)) fpcrtl_abs(float x); double __attribute__((overloadable)) fpcrtl_abs(double x); +long double __attribute__((overloadable)) fpcrtl_abs(long double x); int __attribute__((overloadable)) fpcrtl_abs(int x); int64_t __attribute__((overloadable)) fpcrtl_abs(int64_t x); @@ -28,6 +29,8 @@ double sin(double); double cos(double); double fabs(double); +float fabsf(float); +long double fabsl(long double); double ceil(double); double sqrt(double); double atan(double); diff -r ab77b144245d -r 801dc57371c3 project_files/hwc/rtl/tests/check_system.c --- a/project_files/hwc/rtl/tests/check_system.c Fri Nov 09 17:44:19 2018 +0300 +++ b/project_files/hwc/rtl/tests/check_system.c Fri Nov 09 16:28:23 2018 +0100 @@ -130,6 +130,24 @@ fail_unless(fpcrtl_trunc(-123.456) == -123, "trunc(-123.456)"); fail_unless(fpcrtl_trunc(12.3456) == 12, "trunc(12.3456)"); fail_unless(fpcrtl_trunc(-12.3456) == -12, "trunc(-12.3456)"); + fail_unless(fpcrtl_trunc(0.3) == 0, "trunc(0.3)"); + fail_unless(fpcrtl_trunc(0.5) == 0, "trunc(0.5)"); + fail_unless(fpcrtl_trunc(99.9999999) == 99, "trunc(99.9999999)"); + fail_unless(fpcrtl_trunc(0x01000000.0) == 0x01000000, "trunc(0x01000000.0)"); + fail_unless(fpcrtl_trunc(0x01000001.0) == 0x01000001, "trunc(0x01000001.0)"); + fail_unless(fpcrtl_trunc(0x02000000.0) == 0x02000000, "trunc(0x02000000.0)"); + fail_unless(fpcrtl_trunc(0x04000000.0) == 0x04000000, "trunc(0x04000000.0)"); + fail_unless(fpcrtl_trunc(0x08000000.0) == 0x08000000, "trunc(0x08000000.0)"); + fail_unless(fpcrtl_trunc(0x10000000.0) == 0x10000000, "trunc(0x10000000.0)"); + fail_unless(fpcrtl_trunc(0x10000001.0) == 0x10000001, "trunc(0x10000001.0)"); + fail_unless(fpcrtl_trunc(0x20000000.0) == 0x20000000, "trunc(0x20000000.0)"); + fail_unless(fpcrtl_trunc(0x40000000.0) == 0x40000000, "trunc(0x40000000.0)"); + fail_unless(fpcrtl_trunc(0x80000000.0) == 0x80000000, "trunc(0x80000000.0)"); + fail_unless(fpcrtl_trunc(0xF0000000.0) == 0xF0000000, "trunc(0xF0000000.0)"); + fail_unless(fpcrtl_trunc(0xF0000001.0) == 0xF0000001, "trunc(0xF0000001.0)"); + fail_unless(fpcrtl_trunc(0x01010101.0) == 0x01010101, "trunc(0x01010101.0)"); + fail_unless(fpcrtl_trunc(0xFFFFFFFF.0) == 0xFFFFFFFF, "trunc(0xFFFFFFFF.0)"); + fail_unless(fpcrtl_trunc(0x8943FE39.0) == 0x8943FE39, "trunc(0x01000000.0)"); } END_TEST