diff options
Diffstat (limited to 'cbits')
| -rw-r--r-- | cbits/arith.c | 5 | ||||
| -rw-r--r-- | cbits/arith_lists.h | 1 | 
2 files changed, 6 insertions, 0 deletions
| diff --git a/cbits/arith.c b/cbits/arith.c index db88588..c984255 100644 --- a/cbits/arith.c +++ b/cbits/arith.c @@ -46,6 +46,7 @@ typedef int64_t i64;  #define GEN_POW(x, y) _Generic((x), float: powf, double: pow)(x, y)  #define GEN_LOGBASE(x, y) _Generic((x), float: logf(y) / logf(x), double: log(y) / log(x)) +#define GEN_ATAN2(y, x) _Generic((x), float: atan2f(y, x), double: atan2(y, x))  #define GEN_EXP(x) _Generic((x), float: expf, double: exp)(x)  #define GEN_LOG(x) _Generic((x), float: logf, double: log)(x)  #define GEN_SQRT(x) _Generic((x), float: sqrtf, double: sqrt)(x) @@ -456,6 +457,7 @@ enum fbinop_tag_t {        case FB_DIV: oxarop_op_fdiv_ ## typ ## _sv_strided(rank, shape, out, x, strides, y); break; \        case FB_POW: oxarop_op_pow_ ## typ ## _sv_strided(rank, shape, out, x, strides, y); break; \        case FB_LOGBASE: oxarop_op_logbase_ ## typ ## _sv_strided(rank, shape, out, x, strides, y); break; \ +      case FB_ATAN2: oxarop_op_atan2_ ## typ ## _sv_strided(rank, shape, out, x, strides, y); break; \        default: wrong_op("fbinary_sv_strided", tag); \      } \    } \ @@ -464,6 +466,7 @@ enum fbinop_tag_t {        case FB_DIV: oxarop_op_fdiv_ ## typ ## _vs_strided(rank, shape, out, strides, x, y); break; \        case FB_POW: oxarop_op_pow_ ## typ ## _vs_strided(rank, shape, out, strides, x, y); break; \        case FB_LOGBASE: oxarop_op_logbase_ ## typ ## _vs_strided(rank, shape, out, strides, x, y); break; \ +      case FB_ATAN2: oxarop_op_atan2_ ## typ ## _vs_strided(rank, shape, out, strides, x, y); break; \        default: wrong_op("fbinary_vs_strided", tag); \      } \    } \ @@ -472,6 +475,7 @@ enum fbinop_tag_t {        case FB_DIV: oxarop_op_fdiv_ ## typ ## _vv_strided(rank, shape, out, strides1, x, strides2, y); break; \        case FB_POW: oxarop_op_pow_ ## typ ## _vv_strided(rank, shape, out, strides1, x, strides2, y); break; \        case FB_LOGBASE: oxarop_op_logbase_ ## typ ## _vv_strided(rank, shape, out, strides1, x, strides2, y); break; \ +      case FB_ATAN2: oxarop_op_atan2_ ## typ ## _vv_strided(rank, shape, out, strides1, x, strides2, y); break; \        default: wrong_op("fbinary_vv_strided", tag); \      } \    } @@ -597,6 +601,7 @@ INT_TYPES_XLIST    NONCOMM_OP_STRIDED(fdiv, /, typ) \    PREFIX_BINOP_STRIDED(pow, GEN_POW, typ) \    PREFIX_BINOP_STRIDED(logbase, GEN_LOGBASE, typ) \ +  PREFIX_BINOP_STRIDED(atan2, GEN_ATAN2, typ) \    UNARY_OP_STRIDED(recip, 1.0/, typ) \    UNARY_OP_STRIDED(exp, GEN_EXP, typ) \    UNARY_OP_STRIDED(log, GEN_LOG, typ) \ diff --git a/cbits/arith_lists.h b/cbits/arith_lists.h index b651b62..432765c 100644 --- a/cbits/arith_lists.h +++ b/cbits/arith_lists.h @@ -8,6 +8,7 @@ LIST_IBINOP(IB_REM, 2, rem)  LIST_FBINOP(FB_DIV, 1, /)  LIST_FBINOP(FB_POW, 2, **)  LIST_FBINOP(FB_LOGBASE, 3, logBase) +LIST_FBINOP(FB_ATAN2, 4, atan2)  LIST_UNOP(UO_NEG, 1,)  LIST_UNOP(UO_ABS, 2,) | 
