Skip to content

Commit db0b5ac

Browse files
committed
feat(cmp): support for u8 type combinations
1 parent f8bc363 commit db0b5ac

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

core/cmp.c

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,45 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
8383
return b8(op##I8(x->b8, y->u8)); \
8484
case MTYPE2(-TYPE_U8, -TYPE_B8): \
8585
return b8(op##I8(x->u8, y->b8)); \
86+
case MTYPE2(-TYPE_U8, -TYPE_I16): \
87+
return b8(op##I16(u8_to_i16(x->u8), y->i16)); \
88+
case MTYPE2(-TYPE_U8, -TYPE_I32): \
89+
return b8(op##I32(u8_to_i32(x->u8), y->i32)); \
90+
case MTYPE2(-TYPE_U8, -TYPE_I64): \
91+
return b8(op##I64(u8_to_i64(x->u8), y->i64)); \
92+
case MTYPE2(-TYPE_U8, -TYPE_F64): \
93+
return b8(op##F64(u8_to_f64(x->u8), y->f64)); \
94+
case MTYPE2(-TYPE_U8, TYPE_U8): \
95+
return __CMP_A_V(x, y, u8, u8, u8, op##U8, len, offset, res); \
96+
case MTYPE2(-TYPE_U8, TYPE_I16): \
97+
return __CMP_A_V(x, y, u8, i16, i16, op##I16, len, offset, res); \
98+
case MTYPE2(-TYPE_U8, TYPE_I32): \
99+
return __CMP_A_V(x, y, u8, i32, i32, op##I32, len, offset, res); \
100+
case MTYPE2(-TYPE_U8, TYPE_I64): \
101+
return __CMP_A_V(x, y, u8, i64, i64, op##I64, len, offset, res); \
102+
case MTYPE2(-TYPE_U8, TYPE_F64): \
103+
return __CMP_A_V(x, y, u8, f64, f64, op##F64, len, offset, res); \
104+
case MTYPE2(TYPE_U8, -TYPE_U8): \
105+
return __CMP_V_A(x, y, u8, u8, u8, op##U8, len, offset, res); \
106+
case MTYPE2(TYPE_U8, -TYPE_I16): \
107+
return __CMP_V_A(x, y, u8, i16, i16, op##I16, len, offset, res); \
108+
case MTYPE2(TYPE_U8, -TYPE_I32): \
109+
return __CMP_V_A(x, y, u8, i32, i32, op##I32, len, offset, res); \
110+
case MTYPE2(TYPE_U8, -TYPE_I64): \
111+
return __CMP_V_A(x, y, u8, i64, i64, op##I64, len, offset, res); \
112+
case MTYPE2(TYPE_U8, -TYPE_F64): \
113+
return __CMP_V_A(x, y, u8, f64, f64, op##F64, len, offset, res); \
114+
case MTYPE2(TYPE_U8, TYPE_U8): \
115+
return __CMP_V_V(x, y, u8, u8, u8, op##U8, len, offset, res); \
116+
case MTYPE2(TYPE_U8, TYPE_I16): \
117+
return __CMP_V_V(x, y, u8, i16, i16, op##I16, len, offset, res); \
118+
case MTYPE2(TYPE_U8, TYPE_I32): \
119+
return __CMP_V_V(x, y, u8, i32, i32, op##I32, len, offset, res); \
120+
case MTYPE2(TYPE_U8, TYPE_I64): \
121+
return __CMP_V_V(x, y, u8, i64, i64, op##I64, len, offset, res); \
122+
case MTYPE2(TYPE_U8, TYPE_F64): \
123+
return __CMP_V_V(x, y, u8, f64, f64, op##F64, len, offset, res); \
124+
\
86125
case MTYPE2(-TYPE_C8, -TYPE_C8): \
87126
return b8(op##C8(x->c8, y->c8)); \
88127
case MTYPE2(-TYPE_C8, TYPE_C8): \
@@ -92,6 +131,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
92131
case MTYPE2(TYPE_C8, TYPE_C8): \
93132
return b8(op##STR(AS_C8(x), x->len, AS_C8(y), y->len)); \
94133
\
134+
case MTYPE2(-TYPE_I16, -TYPE_U8): \
135+
return b8(op##I16(x->i16, u8_to_i16(y->u8))); \
95136
case MTYPE2(-TYPE_I16, -TYPE_I16): \
96137
return b8(op##I16(x->i16, y->i16)); \
97138
case MTYPE2(-TYPE_I16, -TYPE_I32): \
@@ -106,8 +147,12 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
106147
return __CMP_A_V(x, y, i16, i32, i32, op##I32, len, offset, res); \
107148
case MTYPE2(-TYPE_I16, TYPE_I64): \
108149
return __CMP_A_V(x, y, i16, i64, i64, op##I64, len, offset, res); \
150+
case MTYPE2(-TYPE_I16, TYPE_U8): \
151+
return __CMP_A_V(x, y, i16, u8, i16, op##I16, len, offset, res); \
109152
case MTYPE2(-TYPE_I16, TYPE_F64): \
110153
return __CMP_A_V(x, y, i16, f64, f64, op##F64, len, offset, res); \
154+
case MTYPE2(TYPE_I16, -TYPE_U8): \
155+
return __CMP_V_A(x, y, i16, u8, i16, op##I16, len, offset, res); \
111156
case MTYPE2(TYPE_I16, -TYPE_I16): \
112157
return __CMP_V_A(x, y, i16, i16, i16, op##I16, len, offset, res); \
113158
case MTYPE2(TYPE_I16, -TYPE_I32): \
@@ -122,9 +167,13 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
122167
return __CMP_V_V(x, y, i16, i32, i32, op##I32, len, offset, res); \
123168
case MTYPE2(TYPE_I16, TYPE_I64): \
124169
return __CMP_V_V(x, y, i16, i64, i64, op##I64, len, offset, res); \
170+
case MTYPE2(TYPE_I16, TYPE_U8): \
171+
return __CMP_V_V(x, y, i16, u8, i16, op##I16, len, offset, res); \
125172
case MTYPE2(TYPE_I16, TYPE_F64): \
126173
return __CMP_V_V(x, y, i16, f64, f64, op##F64, len, offset, res); \
127174
\
175+
case MTYPE2(-TYPE_I32, -TYPE_U8): \
176+
return b8(op##I32(x->i32, u8_to_i32(y->u8))); \
128177
case MTYPE2(-TYPE_I32, -TYPE_I16): \
129178
return b8(op##I32(x->i32, i16_to_i32(y->i16))); \
130179
case MTYPE2(-TYPE_I32, -TYPE_I32): \
@@ -135,6 +184,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
135184
return b8(op##I64(i32_to_i64(x->i32), y->i64)); \
136185
case MTYPE2(-TYPE_I32, -TYPE_F64): \
137186
return b8(op##F64(i32_to_f64(x->i32), y->f64)); \
187+
case MTYPE2(-TYPE_I32, TYPE_U8): \
188+
return __CMP_A_V(x, y, i32, u8, i32, op##I32, len, offset, res); \
138189
case MTYPE2(-TYPE_I32, TYPE_I16): \
139190
return __CMP_A_V(x, y, i32, i16, i32, op##I32, len, offset, res); \
140191
case MTYPE2(-TYPE_I32, TYPE_I32): \
@@ -145,6 +196,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
145196
return __CMP_A_V(x, y, i32, i64, i64, op##I64, len, offset, res); \
146197
case MTYPE2(-TYPE_I32, TYPE_F64): \
147198
return __CMP_A_V(x, y, i32, f64, f64, op##F64, len, offset, res); \
199+
case MTYPE2(TYPE_I32, -TYPE_U8): \
200+
return __CMP_V_A(x, y, i32, u8, i32, op##I32, len, offset, res); \
148201
case MTYPE2(TYPE_I32, -TYPE_I16): \
149202
return __CMP_V_A(x, y, i32, i16, i32, op##I32, len, offset, res); \
150203
case MTYPE2(TYPE_I32, -TYPE_I32): \
@@ -155,6 +208,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
155208
return __CMP_V_A(x, y, i32, i64, i64, op##I64, len, offset, res); \
156209
case MTYPE2(TYPE_I32, -TYPE_F64): \
157210
return __CMP_V_A(x, y, i32, f64, f64, op##F64, len, offset, res); \
211+
case MTYPE2(TYPE_I32, TYPE_U8): \
212+
return __CMP_V_V(x, y, i32, u8, i32, op##I32, len, offset, res); \
158213
case MTYPE2(TYPE_I32, TYPE_I16): \
159214
return __CMP_V_V(x, y, i32, i16, i32, op##I32, len, offset, res); \
160215
case MTYPE2(TYPE_I32, TYPE_I32): \
@@ -166,6 +221,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
166221
case MTYPE2(TYPE_I32, TYPE_F64): \
167222
return __CMP_V_V(x, y, i32, f64, f64, op##F64, len, offset, res); \
168223
\
224+
case MTYPE2(-TYPE_I64, -TYPE_U8): \
225+
return b8(op##I64(x->i64, u8_to_i64(y->u8))); \
169226
case MTYPE2(-TYPE_I64, -TYPE_I16): \
170227
return b8(op##I64(x->i64, i16_to_i64(y->i16))); \
171228
case MTYPE2(-TYPE_I64, -TYPE_I32): \
@@ -176,6 +233,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
176233
return b8(op##I64(x->i64, y->i64)); \
177234
case MTYPE2(-TYPE_I64, -TYPE_F64): \
178235
return b8(op##F64(i64_to_f64(x->i64), y->f64)); \
236+
case MTYPE2(-TYPE_I64, TYPE_U8): \
237+
return __CMP_A_V(x, y, i64, u8, i64, op##I64, len, offset, res); \
179238
case MTYPE2(-TYPE_I64, TYPE_I16): \
180239
return __CMP_A_V(x, y, i64, i16, i64, op##I64, len, offset, res); \
181240
case MTYPE2(-TYPE_I64, TYPE_I32): \
@@ -186,6 +245,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
186245
return __CMP_A_V(x, y, i64, i64, i64, op##I64, len, offset, res); \
187246
case MTYPE2(-TYPE_I64, TYPE_F64): \
188247
return __CMP_A_V(x, y, i64, f64, f64, op##F64, len, offset, res); \
248+
case MTYPE2(TYPE_I64, -TYPE_U8): \
249+
return __CMP_V_A(x, y, i64, u8, i64, op##I64, len, offset, res); \
189250
case MTYPE2(TYPE_I64, -TYPE_I16): \
190251
return __CMP_V_A(x, y, i64, i16, i64, op##I64, len, offset, res); \
191252
case MTYPE2(TYPE_I64, -TYPE_I32): \
@@ -196,6 +257,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
196257
return __CMP_V_A(x, y, i64, i64, i64, op##I64, len, offset, res); \
197258
case MTYPE2(TYPE_I64, -TYPE_F64): \
198259
return __CMP_V_A(x, y, i64, f64, f64, op##F64, len, offset, res); \
260+
case MTYPE2(TYPE_I64, TYPE_U8): \
261+
return __CMP_V_V(x, y, i64, u8, i64, op##I64, len, offset, res); \
199262
case MTYPE2(TYPE_I64, TYPE_I16): \
200263
return __CMP_V_V(x, y, i64, i16, i64, op##I64, len, offset, res); \
201264
case MTYPE2(TYPE_I64, TYPE_I32): \
@@ -207,6 +270,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
207270
case MTYPE2(TYPE_I64, TYPE_F64): \
208271
return __CMP_V_V(x, y, i64, f64, f64, op##F64, len, offset, res); \
209272
\
273+
case MTYPE2(-TYPE_F64, -TYPE_U8): \
274+
return b8(op##F64(x->f64, u8_to_f64(y->u8))); \
210275
case MTYPE2(-TYPE_F64, -TYPE_I16): \
211276
return b8(op##F64(x->f64, i16_to_f64(y->i16))); \
212277
case MTYPE2(-TYPE_F64, -TYPE_I32): \
@@ -215,6 +280,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
215280
return b8(op##F64(x->f64, i64_to_f64(y->i64))); \
216281
case MTYPE2(-TYPE_F64, -TYPE_F64): \
217282
return b8(op##F64(x->f64, y->f64)); \
283+
case MTYPE2(-TYPE_F64, TYPE_U8): \
284+
return __CMP_A_V(x, y, f64, u8, f64, op##F64, len, offset, res); \
218285
case MTYPE2(-TYPE_F64, TYPE_I16): \
219286
return __CMP_A_V(x, y, f64, i16, f64, op##F64, len, offset, res); \
220287
case MTYPE2(-TYPE_F64, TYPE_I32): \
@@ -223,6 +290,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
223290
return __CMP_A_V(x, y, f64, i64, f64, op##F64, len, offset, res); \
224291
case MTYPE2(-TYPE_F64, TYPE_F64): \
225292
return __CMP_A_V(x, y, f64, f64, f64, op##F64, len, offset, res); \
293+
case MTYPE2(TYPE_F64, -TYPE_U8): \
294+
return __CMP_V_A(x, y, f64, u8, f64, op##F64, len, offset, res); \
226295
case MTYPE2(TYPE_F64, -TYPE_I16): \
227296
return __CMP_V_A(x, y, f64, i16, f64, op##F64, len, offset, res); \
228297
case MTYPE2(TYPE_F64, -TYPE_I32): \
@@ -231,6 +300,8 @@ typedef obj_p (*ray_cmp_f)(obj_p, obj_p, i64_t, i64_t, obj_p);
231300
return __CMP_V_A(x, y, f64, i64, f64, op##F64, len, offset, res); \
232301
case MTYPE2(TYPE_F64, -TYPE_F64): \
233302
return __CMP_V_A(x, y, f64, f64, f64, op##F64, len, offset, res); \
303+
case MTYPE2(TYPE_F64, TYPE_U8): \
304+
return __CMP_V_V(x, y, f64, u8, f64, op##F64, len, offset, res); \
234305
case MTYPE2(TYPE_F64, TYPE_I16): \
235306
return __CMP_V_V(x, y, f64, i16, f64, op##F64, len, offset, res); \
236307
case MTYPE2(TYPE_F64, TYPE_I32): \

core/ops.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ extern struct obj_t __ERR_OBJ;
7474
#define ALIGN8(x) ((str_p)(((i64_t)x + 7) & ~7))
7575
#define MTYPE2(x, y) ((u8_t)(x) | ((u8_t)(y) << 8))
7676
#define EQI8(x, y) ((x) == (y))
77+
#define EQU8(x, y) ((x) == (y))
7778
#define EQC8(x, y) ((x) == (y))
7879
#define EQI16(x, y) ((x) == (y))
7980
#define EQI32(x, y) ((x) == (y))
@@ -82,6 +83,7 @@ extern struct obj_t __ERR_OBJ;
8283
#define EQGUID(x, y) (memcmp((x), (y), sizeof(guid_t)) == 0)
8384
#define EQSTR(x, xl, y, yl) (str_cmp((x), (xl), (y), (yl)) == 0)
8485
#define NEI8(x, y) ((x) != (y))
86+
#define NEU8(x, y) ((x) != (y))
8587
#define NEC8(x, y) ((x) != (y))
8688
#define NEI16(x, y) ((x) != (y))
8789
#define NEI32(x, y) ((x) != (y))
@@ -90,6 +92,7 @@ extern struct obj_t __ERR_OBJ;
9092
#define NEGUID(x, y) (memcmp((x), (y), sizeof(guid_t)) != 0)
9193
#define NESTR(x, xl, y, yl) (str_cmp((x), (xl), (y), (yl)) != 0)
9294
#define LTI8(x, y) ((x) < (y))
95+
#define LTU8(x, y) ((x) < (y))
9396
#define LTC8(x, y) ((x) < (y))
9497
#define LTI16(x, y) ((x) < (y))
9598
#define LTI32(x, y) ((x) < (y))
@@ -98,6 +101,7 @@ extern struct obj_t __ERR_OBJ;
98101
#define LTGUID(x, y) (memcmp((x), (y), sizeof(guid_t)) < 0)
99102
#define LTSTR(x, xl, y, yl) (str_cmp((x), (xl), (y), (yl)) < 0)
100103
#define GTI8(x, y) ((x) > (y))
104+
#define GTU8(x, y) ((x) > (y))
101105
#define GTC8(x, y) ((x) > (y))
102106
#define GTI16(x, y) ((x) > (y))
103107
#define GTI32(x, y) ((x) > (y))
@@ -106,6 +110,7 @@ extern struct obj_t __ERR_OBJ;
106110
#define GTGUID(x, y) (memcmp((x), (y), sizeof(guid_t)) > 0)
107111
#define GTSTR(x, xl, y, yl) (str_cmp((x), (xl), (y), (yl)) > 0)
108112
#define LEI8(x, y) ((x) <= (y))
113+
#define LEU8(x, y) ((x) <= (y))
109114
#define LEC8(x, y) ((x) <= (y))
110115
#define LEI16(x, y) ((x) <= (y))
111116
#define LEI32(x, y) ((x) <= (y))
@@ -114,6 +119,7 @@ extern struct obj_t __ERR_OBJ;
114119
#define LEGUID(x, y) (!GTGUID((x), (y)))
115120
#define LESTR(x, xl, y, yl) (str_cmp((x), (xl), (y), (yl)) <= 0)
116121
#define GEI8(x, y) ((x) >= (y))
122+
#define GEU8(x, y) ((x) >= (y))
117123
#define GEC8(x, y) ((x) >= (y))
118124
#define GEI16(x, y) ((x) >= (y))
119125
#define GEI32(x, y) ((x) >= (y))

0 commit comments

Comments
 (0)