mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-29 00:32:29 +00:00
Fix compiler runtime for _Float16 type
This commit is contained in:
parent
0ef36489c8
commit
64a9e6fe56
14 changed files with 797 additions and 53 deletions
42
libc/intrin/float16.c
Normal file
42
libc/intrin/float16.c
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│ vi: set et ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi │
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2024 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
|
||||
/**
|
||||
* @fileoverview fp16 compiler runtime
|
||||
*/
|
||||
|
||||
#define asint(x) ((union pun){x}).i
|
||||
#define isnan(x) (((x) & 0x7fff) > 0x7c00)
|
||||
|
||||
union pun {
|
||||
_Float16 f;
|
||||
unsigned short i;
|
||||
};
|
||||
|
||||
int __eqhf2(_Float16 fx, _Float16 fy) {
|
||||
int x = asint(fx);
|
||||
int y = asint(fy);
|
||||
return (x == y) & !isnan(x) & !isnan(y);
|
||||
}
|
||||
|
||||
int __nehf2(_Float16 fx, _Float16 fy) {
|
||||
int x = asint(fx);
|
||||
int y = asint(fy);
|
||||
return (x != y) & !isnan(x) & !isnan(y);
|
||||
}
|
|
@ -159,10 +159,10 @@ typedef double double_t;
|
|||
#define fpclassify(x) \
|
||||
__builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, x)
|
||||
|
||||
#define signbit(x) \
|
||||
(sizeof(x) == sizeof(double) ? __builtin_signbit(x) \
|
||||
: sizeof(x) == sizeof(float) ? __builtin_signbitf(x) \
|
||||
: __builtin_signbitl(x))
|
||||
#define signbit(x) \
|
||||
(sizeof(x) == sizeof(long double) ? __builtin_signbitl(x) \
|
||||
: sizeof(x) == sizeof(float) ? __builtin_signbitf(x) \
|
||||
: __builtin_signbit(x))
|
||||
|
||||
extern int signgam;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue