lccrt/tools/lccrt_s/include/lccrt_s.h

487 lines
26 KiB
C

/**
* Part of the Lccrt Project, under the Apache License v2.0
* See http://www.apache.org/licenses/LICENSE-2.0.txt for license information.
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif /* !_GNU_SOURCE */
#include <stdint.h>
#include <stdio.h>
#include <math.h>
#include <assert.h>
#define __LCCRT_UMAX_U32 (0xffffffffULL)
#define __LCCRT_SMIN_S32 ((int32_t)0x80000000LL)
#define __LCCRT_SMAX_S32 ((int32_t)0x7fffffffLL)
#define __LCCRT_UMAX_U64 (0xffffffffffffffffULL)
#define __LCCRT_SMIN_S64 ((int64_t)0x8000000000000000LL)
#define __LCCRT_SMAX_S64 ((int64_t)0x7fffffffffffffffLL)
#define __LCCRT_SMIN_U64 (0x8000000000000000ULL)
#define __LCCRT_SMAX_U64 (0x7fffffffffffffffULL)
#define __LCCRT_MIN( a, b) (((a) <= (b)) ? (a) : (b))
#define __LCCRT_MAX( a, b) (((a) >= (b)) ? (a) : (b))
#define __LCCRT_BITS( x, h, l) ((((x) << (63ULL - (h)))) >> ((63ULL - (h)) + (l)))
#define __LCCRT_PRINT_BITS2( b0, b1) \
( \
printf( "%s:%d\n%s:%d\n", #b0, (int)(b0), #b1, (int)(b1)) \
)
#define __LCCRT_PRINT_BITS3( b0, b1, b2) \
( \
printf( "%s:%d\n%s:%d\n%s:%d\n", #b0, (int)(b0), #b1, (int)(b1), #b2, (int)(b2)) \
)
#define __LCCRT_PRINT_BITS4( b0, b1, b2, b3) \
( \
printf( "%s:%d\n%s:%d\n%s:%d\n:%s:%d\n", #b0, (int)(b0), #b1, (int)(b1), #b2, (int)(b2), #b3, (int)(b3)) \
)
#define __LCCRT_N_ARGS1( rbits, abits, r, a) \
uint32_t rbits, uint32_t abits, uint8_t *r, uint8_t *a
#define __LCCRT_N_ARGS2( rbits, abits, bbits, r, a, b) \
uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b
#define __LCCRT_N_ARGS3( rbits, abits, bbits, cbits, r, a, b, c) \
uint32_t rbits, uint32_t abits, uint32_t bbits, uint32_t cbits, uint8_t *r, uint8_t *a, uint8_t *b, uint8_t *c
#define __LCCRT_VEC_ARGS1( rbits, abits, r, a, rnum, anum, rebits, aebits) \
uint32_t rbits, uint32_t abits, uint8_t *r, uint8_t *a, \
uint32_t rnum, uint32_t anum, uint32_t rebits, uint32_t aebits
#define __LCCRT_VEC_ARGS2( rbits, abits, bbits, r, a, b, rnum, anum, bnum, rebits, aebits, bebits) \
uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b, \
uint32_t rnum, uint32_t anum, uint32_t bnum, uint32_t rebits, uint32_t aebits, uint32_t bebits
#define __LCCRT_VEC_ARGS3( rb, ab, bb, cb, r, a, b, c, rn, an, bn, cn, reb, aeb, beb, ceb) \
uint32_t rb, uint32_t ab, uint32_t bb, uint32_t cb, \
uint8_t *r, uint8_t *a, uint8_t *b, uint8_t *c, \
uint32_t rn, uint32_t an, uint32_t bn, uint32_t cn, \
uint32_t reb, uint32_t aeb, uint32_t beb, uint32_t ceb
typedef float __lccrt_f32_t;
typedef double __lccrt_f64_t;
typedef long double __lccrt_f80_t;
typedef __lccrt_f32_t f32_t;
typedef __lccrt_f64_t f64_t;
#define __define_lccrt_nint_t( N) typedef struct { uint8_t a[((N) + 7)/8]; } __lccrt_nint##N##_t
__define_lccrt_nint_t( 96);
#if __LCC__ <= 123
typedef struct
{
float x;
float y;
} __lccrt_complex_f32;
typedef struct
{
double x;
double y;
} __lccrt_complex_f64;
typedef struct
{
long double x;
long double y;
} __lccrt_complex_f80;
#endif /* __LCC__ <= 123 */
#define __lccrt_vec_typedef( type, N) typedef struct { type a[N]; } __lccrt_vec_##type##_##N
#define __lccrt_vec_si( k, N) __lccrt_vec_int##k##_t_##N
#define __lccrt_vec_ui( k, N) __lccrt_vec_uint##k##_t_##N
#define __lccrt_vec_f( k, N) __lccrt_vec_f##k##_t_##N
__lccrt_vec_typedef( int32_t, 2);
__lccrt_vec_typedef( int32_t, 16);
__lccrt_vec_typedef( int32_t, 32);
__lccrt_vec_typedef( int8_t, 16);
__lccrt_vec_typedef( int16_t, 8);
__lccrt_vec_typedef( int32_t, 4);
__lccrt_vec_typedef( int64_t, 2);
__lccrt_vec_typedef( int8_t, 32);
__lccrt_vec_typedef( int16_t, 16);
__lccrt_vec_typedef( int32_t, 8);
__lccrt_vec_typedef( int64_t, 4);
__lccrt_vec_typedef( uint8_t, 16);
__lccrt_vec_typedef( uint16_t, 8);
__lccrt_vec_typedef( uint32_t, 4);
__lccrt_vec_typedef( uint64_t, 2);
__lccrt_vec_typedef( uint8_t, 32);
__lccrt_vec_typedef( uint16_t, 16);
__lccrt_vec_typedef( uint32_t, 8);
__lccrt_vec_typedef( uint64_t, 4);
__lccrt_vec_typedef( f32_t, 4);
__lccrt_vec_typedef( f64_t, 2);
__lccrt_vec_typedef( f32_t, 8);
__lccrt_vec_typedef( f64_t, 4);
typedef struct
{
uint8_t value;
uint8_t is_overflow;
} __lccrt_overflow_8_t;
typedef struct
{
uint16_t value;
uint8_t is_overflow;
} __lccrt_overflow_16_t;
typedef struct
{
uint32_t value;
uint8_t is_overflow;
} __lccrt_overflow_32_t;
typedef struct
{
uint64_t value;
uint8_t is_overflow;
} __lccrt_overflow_64_t;
typedef struct
{
uint64_t lo;
uint64_t hi;
} __lccrt_uint128_t;
typedef struct
{
__lccrt_uint128_t value;
uint8_t is_overflow;
} __lccrt_overflow_128_t;
typedef struct
{
__lccrt_uint128_t lo;
__lccrt_uint128_t hi;
} __lccrt_uint256_t;
typedef struct
{
__lccrt_uint256_t value;
uint8_t is_overflow;
} __lccrt_overflow_256_t;
extern __lccrt_overflow_8_t __lccrt_uadd_overflow_8( uint64_t a, uint64_t b);
extern __lccrt_overflow_8_t __lccrt_sadd_overflow_8( uint64_t a, uint64_t b);
extern __lccrt_overflow_16_t __lccrt_uadd_overflow_16( uint64_t a, uint64_t b);
extern __lccrt_overflow_16_t __lccrt_sadd_overflow_16( uint64_t a, uint64_t b);
extern __lccrt_overflow_32_t __lccrt_uadd_overflow_32( uint64_t a, uint64_t b);
extern __lccrt_overflow_32_t __lccrt_sadd_overflow_32( uint64_t a, uint64_t b);
extern __lccrt_overflow_64_t __lccrt_uadd_overflow_64( uint64_t a, uint64_t b);
extern __lccrt_overflow_64_t __lccrt_sadd_overflow_64( uint64_t a, uint64_t b);
extern __lccrt_overflow_128_t __lccrt_uadd_overflow_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern __lccrt_overflow_128_t __lccrt_sadd_overflow_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern __lccrt_overflow_256_t __lccrt_uadd_overflow_256( __lccrt_uint256_t a, __lccrt_uint256_t b);
extern __lccrt_overflow_256_t __lccrt_sadd_overflow_256( __lccrt_uint256_t a, __lccrt_uint256_t b);
extern __lccrt_overflow_8_t __lccrt_usub_overflow_8( uint64_t a, uint64_t b);
extern __lccrt_overflow_8_t __lccrt_ssub_overflow_8( uint64_t a, uint64_t b);
extern __lccrt_overflow_16_t __lccrt_usub_overflow_16( uint64_t a, uint64_t b);
extern __lccrt_overflow_16_t __lccrt_ssub_overflow_16( uint64_t a, uint64_t b);
extern __lccrt_overflow_32_t __lccrt_usub_overflow_32( uint64_t a, uint64_t b);
extern __lccrt_overflow_32_t __lccrt_ssub_overflow_32( uint64_t a, uint64_t b);
extern __lccrt_overflow_64_t __lccrt_usub_overflow_64( uint64_t a, uint64_t b);
extern __lccrt_overflow_64_t __lccrt_ssub_overflow_64( uint64_t a, uint64_t b);
extern __lccrt_overflow_128_t __lccrt_usub_overflow_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern __lccrt_overflow_128_t __lccrt_ssub_overflow_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern __lccrt_overflow_8_t __lccrt_umul_overflow_8( uint64_t a, uint64_t b);
extern __lccrt_overflow_8_t __lccrt_smul_overflow_8( uint64_t a, uint64_t b);
extern __lccrt_overflow_16_t __lccrt_umul_overflow_16( uint64_t a, uint64_t b);
extern __lccrt_overflow_16_t __lccrt_smul_overflow_16( uint64_t a, uint64_t b);
extern __lccrt_overflow_32_t __lccrt_umul_overflow_32( uint64_t a, uint64_t b);
extern __lccrt_overflow_32_t __lccrt_smul_overflow_32( uint64_t a, uint64_t b);
extern __lccrt_overflow_64_t __lccrt_umul_overflow_64( uint64_t a, uint64_t b);
extern __lccrt_overflow_64_t __lccrt_smul_overflow_64( uint64_t a, uint64_t b);
extern __lccrt_overflow_128_t __lccrt_umul_overflow_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern __lccrt_overflow_128_t __lccrt_smul_overflow_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern uint8_t __lccrt_uadd_sat_8( uint8_t a, uint8_t b);
extern uint8_t __lccrt_sadd_sat_8( uint8_t a, uint8_t b);
extern uint16_t __lccrt_uadd_sat_16( uint16_t a, uint16_t b);
extern uint16_t __lccrt_sadd_sat_16( uint16_t a, uint16_t b);
extern uint32_t __lccrt_uadd_sat_32( uint32_t a, uint32_t b);
extern uint32_t __lccrt_sadd_sat_32( uint32_t a, uint32_t b);
extern uint64_t __lccrt_uadd_sat_64( uint64_t a, uint64_t b);
extern uint64_t __lccrt_sadd_sat_64( uint64_t a, uint64_t b);
extern __lccrt_uint128_t __lccrt_uadd_sat_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern __lccrt_uint128_t __lccrt_sadd_sat_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern uint8_t __lccrt_usub_sat_8( uint8_t a, uint8_t b);
extern uint8_t __lccrt_ssub_sat_8( uint8_t a, uint8_t b);
extern uint16_t __lccrt_usub_sat_16( uint16_t a, uint16_t b);
extern uint16_t __lccrt_ssub_sat_16( uint16_t a, uint16_t b);
extern uint32_t __lccrt_usub_sat_32( uint32_t a, uint32_t b);
extern uint32_t __lccrt_ssub_sat_32( uint32_t a, uint32_t b);
extern uint64_t __lccrt_usub_sat_64( uint64_t a, uint64_t b);
extern uint64_t __lccrt_ssub_sat_64( uint64_t a, uint64_t b);
extern __lccrt_uint128_t __lccrt_usub_sat_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern __lccrt_uint128_t __lccrt_ssub_sat_128( __lccrt_uint128_t a, __lccrt_uint128_t b);
extern uint8_t __lccrt_umul_sat_8( uint8_t a, uint8_t b);
extern uint8_t __lccrt_smul_sat_8( uint8_t a, uint8_t b);
extern uint16_t __lccrt_umul_sat_16( uint16_t a, uint16_t b);
extern uint16_t __lccrt_smul_sat_16( uint16_t a, uint16_t b);
extern uint32_t __lccrt_umul_sat_32( uint32_t a, uint32_t b);
extern uint32_t __lccrt_smul_sat_32( uint32_t a, uint32_t b);
extern uint64_t __lccrt_umul_sat_64( uint64_t a, uint64_t b);
extern uint64_t __lccrt_smul_sat_64( uint64_t a, uint64_t b);
//extern uint8_t __lccrt_umul_sat_128( uint8_t a, uint8_t b);
//extern uint8_t __lccrt_smul_sat_128( uint8_t a, uint8_t b);
extern uint8_t __lccrt_fshl_i4( uint8_t a, uint8_t b, uint8_t c);
extern uint8_t __lccrt_fshl_i8( uint8_t a, uint8_t b, uint8_t c);
extern uint16_t __lccrt_fshl_i16( uint16_t a, uint16_t b, uint16_t c);
extern uint32_t __lccrt_fshl_i32( uint32_t a, uint32_t b, uint32_t c);
extern uint64_t __lccrt_fshl_i64( uint64_t a, uint64_t b, uint64_t c);
extern uint8_t __lccrt_fshr_i4( uint8_t a, uint8_t b, uint8_t c);
extern uint8_t __lccrt_fshr_i8( uint8_t a, uint8_t b, uint8_t c);
extern uint16_t __lccrt_fshr_i16( uint16_t a, uint16_t b, uint16_t c);
extern uint32_t __lccrt_fshr_i32( uint32_t a, uint32_t b, uint32_t c);
extern uint64_t __lccrt_fshr_i64( uint64_t a, uint64_t b, uint64_t c);
extern __lccrt_uint128_t __lccrt_fshl_i128( __lccrt_uint128_t a, __lccrt_uint128_t b, __lccrt_uint128_t c);
extern __lccrt_uint128_t __lccrt_fshr_i128( __lccrt_uint128_t a, __lccrt_uint128_t b, __lccrt_uint128_t c);
extern void __lccrt_bitcast_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_select( uint32_t rbits, uint32_t abits, uint32_t bbits, uint32_t cbits,
uint8_t *r, uint8_t *a, uint8_t *b, uint8_t *c);
extern void __lccrt_abs_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_zext_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_sext_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_trunc_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_shl_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_shr_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_sar_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_fshl_n( __LCCRT_N_ARGS3( rbits, abits, bbits, cbits, r, a, b, c));
extern void __lccrt_fshr_n( __LCCRT_N_ARGS3( rbits, abits, bbits, cbits, r, a, b, c));
extern void __lccrt_and_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_or_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_xor_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_add_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_sub_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_mul_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_udiv_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_sdiv_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_umod_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_smod_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_fmod_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_minnum_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_maxnum_n( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_fneg_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_shuffle_n( uint32_t rbits, uint32_t abits, uint32_t bbits, uint32_t cbits,
uint8_t *r, uint8_t *a, uint8_t *b, uint8_t *c,
uint32_t rn, uint32_t an, uint32_t bn, uint32_t cn);
extern void __lccrt_fptofp_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_fptosi_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_fptoui_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_sitofp_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_uitofp_n( __LCCRT_N_ARGS1( reb, aeb, r, a));
extern void __lccrt_fptosi_sat_n( __LCCRT_N_ARGS1( rbits, abits, r, a));
extern void __lccrt_fptoui_sat_n( __LCCRT_N_ARGS1( rbits, abits, r, a));
extern void __lccrt_uadd_sat_n( __LCCRT_N_ARGS2( rbits, abits, bbits, r, a, b));
extern void __lccrt_sadd_sat_n( __LCCRT_N_ARGS2( rbits, abits, bbits, r, a, b));
extern void __lccrt_usub_sat_n( __LCCRT_N_ARGS2( rbits, abits, bbits, r, a, b));
extern void __lccrt_ssub_sat_n( __LCCRT_N_ARGS2( rbits, abits, bbits, r, a, b));
extern void __lccrt_bswap_n( __LCCRT_N_ARGS1( rbits, abits, r, a));
extern void __lccrt_bitreverse_n( __LCCRT_N_ARGS1( rbits, abits, r, a));
extern void __lccrt_ctpop_n( __LCCRT_N_ARGS1( rbits, abits, r, a));
extern void __lccrt_cttz_n( __LCCRT_N_ARGS1( rbits, abits, r, a));
extern void __lccrt_ctlz_n( __LCCRT_N_ARGS1( rbits, abits, r, a));
extern void __lccrt_shl_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_shr_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_sar_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_fshl_v( __LCCRT_VEC_ARGS3( rb, ab, bb, cb, r, a, b, c, rn, an, bn, cn, reb, aeb, beb, ceb));
extern void __lccrt_fshr_v( __LCCRT_VEC_ARGS3( rb, ab, bb, cb, r, a, b, c, rn, an, bn, cn, reb, aeb, beb, ceb));
extern void __lccrt_and_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_or_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_xor_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_add_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_sub_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_mul_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_udiv_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_sdiv_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_umod_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_smod_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_fadd_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_fsub_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_fmul_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_fmuladd_v( __LCCRT_VEC_ARGS3( rb, ab, bb, cb, r, a, b, c, rn, an, bn, cn, reb, aeb, beb, ceb));
extern void __lccrt_fdiv_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_fmod_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_minnum_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_maxnum_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_abs_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_reduce_fmin_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_reduce_fmax_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_fneg_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_ptoi_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_itop_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_fptofp_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_fptosi_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_fptoui_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_sitofp_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_uitofp_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_trunc_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_fptosi_sat_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_fptoui_sat_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_uadd_sat_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_sadd_sat_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_usub_sat_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_ssub_sat_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_fabs_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_sqrt_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_exp2_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_log2_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_exp10_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_log10_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_exp_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_log_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_cos_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_sin_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_tan_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_acos_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_asin_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_pow_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_powi_v( __LCCRT_VEC_ARGS2( rb, ab, bb, r, a, b, rn, an, bn, reb, aeb, beb));
extern void __lccrt_bswap_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_bitreverse_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_ctpop_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_cttz_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_ctlz_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_fma_v( __LCCRT_VEC_ARGS3( rb, ab, bb, cb, r, a, b, c, rn, an, bn, cn, reb, aeb, beb, ceb));
extern void __lccrt_floor_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_ceil_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_round_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_ftrunc_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_rint_v( __LCCRT_VEC_ARGS1( rb, ab, r, a, rn, an, reb, aeb));
extern void __lccrt_cmp_n_eq_i( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_ne_i( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_lt_i( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_lt_u( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_le_i( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_le_u( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_gt_i( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_gt_u( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_ge_i( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_n_ge_u( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_v_eq_i( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_ne_i( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_lt_i( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_lt_u( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_le_i( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_le_u( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_gt_i( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_gt_u( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_ge_i( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_v_ge_u( uint32_t rbits, uint32_t abits, uint32_t bbits, uint8_t *r, uint8_t *a, uint8_t *b,
uint32_t rn, uint32_t an, uint32_t bn);
extern void __lccrt_cmp_fo( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_fu( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_eq_fu( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_ne_fu( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_lt_fu( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_le_fu( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_gt_fu( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern void __lccrt_cmp_ge_fu( __LCCRT_N_ARGS2( reb, aeb, beb, r, a, b));
extern __lccrt_uint128_t __lccrt_ctlz_i128( __lccrt_uint128_t a);
extern __lccrt_uint128_t __lccrt_cttz_i128( __lccrt_uint128_t a);
extern __lccrt_uint128_t __lccrt_ctpop_i128( __lccrt_uint128_t a);
extern uint64_t __lccrt_bitreverse_8( uint64_t a);
extern uint64_t __lccrt_bitreverse_16( uint64_t a);
extern uint64_t __lccrt_bitreverse_32( uint64_t a);
extern uint64_t __lccrt_bitreverse_64( uint64_t a);
extern __lccrt_uint128_t __lccrt_bitreverse_128( __lccrt_uint128_t a);
#if defined( __LCC__) && (__LCC__ <= 123)
extern __lccrt_complex_f32 __mulsc3( __lccrt_f32_t a, __lccrt_f32_t b, __lccrt_f32_t c, __lccrt_f32_t d);
extern __lccrt_complex_f64 __muldc3( __lccrt_f64_t a, __lccrt_f64_t b, __lccrt_f64_t c, __lccrt_f64_t d);
extern __lccrt_complex_f32 __divsc3( __lccrt_f32_t a, __lccrt_f32_t b, __lccrt_f32_t c, __lccrt_f32_t d);
extern __lccrt_complex_f64 __divdc3( __lccrt_f64_t a, __lccrt_f64_t b, __lccrt_f64_t c, __lccrt_f64_t d);
#endif /* __LCC__ <= 123 */
int8_t __atomic_fetch_max_1( int8_t *a, int8_t b);
int16_t __atomic_fetch_max_2( int16_t *a, int16_t b);
int32_t __atomic_fetch_max_4( int32_t *a, int32_t b);
int64_t __atomic_fetch_max_8( int64_t *a, int64_t b);
int8_t __atomic_fetch_min_1( int8_t *a, int8_t b);
int16_t __atomic_fetch_min_2( int16_t *a, int16_t b);
int32_t __atomic_fetch_min_4( int32_t *a, int32_t b);
int64_t __atomic_fetch_min_8( int64_t *a, int64_t b);
uint8_t __atomic_fetch_umax_1( uint8_t *a, uint8_t b);
uint16_t __atomic_fetch_umax_2( uint16_t *a, uint16_t b);
uint32_t __atomic_fetch_umax_4( uint32_t *a, uint32_t b);
uint64_t __atomic_fetch_umax_8( uint64_t *a, uint64_t b);
uint8_t __atomic_fetch_umin_1( uint8_t *a, uint8_t b);
uint16_t __atomic_fetch_umin_2( uint16_t *a, uint16_t b);
uint32_t __atomic_fetch_umin_4( uint32_t *a, uint32_t b);
uint64_t __atomic_fetch_umin_8( uint64_t *a, uint64_t b);
extern __lccrt_uint128_t __lccrt_bswap_128( __lccrt_uint128_t v);
extern int8_t __lccrt_fptosi_sat_i8f32( __lccrt_f32_t);
extern int8_t __lccrt_fptosi_sat_i8f64( __lccrt_f64_t);
extern int8_t __lccrt_fptosi_sat_i8f80( __lccrt_f80_t);
extern int16_t __lccrt_fptosi_sat_i16f32( __lccrt_f32_t);
extern int16_t __lccrt_fptosi_sat_i16f64( __lccrt_f64_t);
extern int16_t __lccrt_fptosi_sat_i16f80( __lccrt_f80_t);
extern int32_t __lccrt_fptosi_sat_i32f32( __lccrt_f32_t);
extern int32_t __lccrt_fptosi_sat_i32f64( __lccrt_f64_t);
extern int32_t __lccrt_fptosi_sat_i32f80( __lccrt_f80_t);
extern int64_t __lccrt_fptosi_sat_i64f32( __lccrt_f32_t);
extern int64_t __lccrt_fptosi_sat_i64f64( __lccrt_f64_t);
extern int64_t __lccrt_fptosi_sat_i64f80( __lccrt_f80_t);
extern __lccrt_uint128_t __lccrt_fptosi_sat_i128f32( __lccrt_f32_t);
extern __lccrt_uint128_t __lccrt_fptosi_sat_i128f64( __lccrt_f64_t);
extern uint8_t __lccrt_fptoui_sat_i8f32( __lccrt_f32_t);
extern uint8_t __lccrt_fptoui_sat_i8f64( __lccrt_f64_t);
extern uint8_t __lccrt_fptoui_sat_i8f80( __lccrt_f80_t);
extern uint16_t __lccrt_fptoui_sat_i16f32( __lccrt_f32_t);
extern uint16_t __lccrt_fptoui_sat_i16f64( __lccrt_f64_t);
extern uint16_t __lccrt_fptoui_sat_i16f80( __lccrt_f80_t);
extern uint32_t __lccrt_fptoui_sat_i32f32( __lccrt_f32_t);
extern uint32_t __lccrt_fptoui_sat_i32f64( __lccrt_f64_t);
extern uint32_t __lccrt_fptoui_sat_i32f80( __lccrt_f80_t);
extern uint64_t __lccrt_fptoui_sat_i64f32( __lccrt_f32_t);
extern uint64_t __lccrt_fptoui_sat_i64f64( __lccrt_f64_t);
extern uint64_t __lccrt_fptoui_sat_i64f80( __lccrt_f80_t);
extern __lccrt_uint128_t __lccrt_fptoui_sat_i128f32( __lccrt_f32_t);
extern __lccrt_uint128_t __lccrt_fptoui_sat_i128f64( __lccrt_f64_t);
extern __lccrt_nint96_t __lccrt_fshl_i96( __lccrt_nint96_t, __lccrt_nint96_t, __lccrt_nint96_t);
extern void __lccrt_vecbitpack( void *dst, void *src, int64_t veclen, int64_t elembitsize);
extern void __lccrt_vecbitunpack( void *dst, void *src, int64_t veclen, int64_t elembitsize);
extern uint8_t __lccrt_typetest_unsupported_yet( void);