diff --git a/libc3/tag.c b/libc3/tag.c
index fbfc156..9badf4e 100644
--- a/libc3/tag.c
+++ b/libc3/tag.c
@@ -39,67 +39,61 @@ s_tag * tag_add (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_F32:
return tag_init_f32(dest, a->data.f32 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.f32 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.f32 + b->data.f64);
case TAG_INTEGER:
- integer_init_double(&tmp, a->data.f32);
- integer_add(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
- integer_clean(&tmp);
- return dest;
+ return tag_init_f32(dest, a->data.f32 +
+ (f32) integer_to_f64(&a->data.integer));
case TAG_S8:
- return tag_init_f32(dest, a->data.f32 + b->data.s8);
+ return tag_init_f32(dest, a->data.f32 + (f32) b->data.s8);
case TAG_S16:
- return tag_init_f32(dest, a->data.f32 + b->data.s16);
+ return tag_init_f32(dest, a->data.f32 + (f32) b->data.s16);
case TAG_S32:
- return tag_init_f32(dest, a->data.f32 + b->data.s32);
+ return tag_init_f32(dest, a->data.f32 + (f32) b->data.s32);
case TAG_S64:
- return tag_init_f32(dest, a->data.f32 + b->data.s64);
+ return tag_init_f32(dest, a->data.f32 + (f32) b->data.s64);
case TAG_U8:
- return tag_init_f32(dest, a->data.f32 + b->data.u8);
+ return tag_init_f32(dest, a->data.f32 + (f32) b->data.u8);
case TAG_U16:
- return tag_init_f32(dest, a->data.f32 + b->data.u16);
+ return tag_init_f32(dest, a->data.f32 + (f32) b->data.u16);
case TAG_U32:
- return tag_init_f32(dest, a->data.f32 + b->data.u32);
+ return tag_init_f32(dest, a->data.f32 + (f32) b->data.u32);
case TAG_U64:
- return tag_init_f32(dest, a->data.f32 + b->data.u64);
+ return tag_init_f32(dest, a->data.f32 + (f32) b->data.u64);
default:
goto ko;
}
case TAG_F64:
switch (b->type) {
case TAG_F32:
- return tag_init_f64(dest, a->data.f64 + b->data.f32);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f64 + b->data.f64);
case TAG_INTEGER:
- integer_init_double(&tmp, a->data.f64);
- integer_add(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
- integer_clean(&tmp);
- return dest;
+ return tag_init_f64(dest, a->data.f64 +
+ integer_to_f64(&a->data.integer));
case TAG_S8:
- return tag_init_f64(dest, a->data.f64 + b->data.s8);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.s8);
case TAG_S16:
- return tag_init_f64(dest, a->data.f64 + b->data.s16);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.s16);
case TAG_S32:
- return tag_init_f64(dest, a->data.f64 + b->data.s32);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.s32);
case TAG_S64:
- return tag_init_f64(dest, a->data.f64 + b->data.s64);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.s64);
case TAG_U8:
- return tag_init_f64(dest, a->data.f64 + b->data.u8);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.u8);
case TAG_U16:
- return tag_init_f64(dest, a->data.f64 + b->data.u16);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.u16);
case TAG_U32:
- return tag_init_f64(dest, a->data.f64 + b->data.u32);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.u32);
case TAG_U64:
- return tag_init_f64(dest, a->data.f64 + b->data.u64);
+ return tag_init_f64(dest, a->data.f64 + (f64) b->data.u64);
default:
goto ko;
}
case TAG_INTEGER:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, integer_to_f64(&a->data.integer) +
+ return tag_init_f32(dest, (f32) integer_to_f64(&a->data.integer) +
b->data.f32);
case TAG_F64:
return tag_init_f64(dest, integer_to_f64(&a->data.integer) +
@@ -110,51 +104,51 @@ s_tag * tag_add (const s_tag *a, const s_tag *b, s_tag *dest)
&dest->data.integer);
return dest;
case TAG_S8:
- integer_init_s32(&tmp, b->data.s8);
- integer_add(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_s32(&tmp, (s32) b->data.s8);
+ tag_init_integer_zero(dest);
+ integer_add(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S16:
- integer_init_s32(&tmp, b->data.s16);
- integer_add(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_s32(&tmp, (s32) b->data.s16);
+ tag_init_integer_zero(dest);
+ integer_add(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S32:
integer_init_s32(&tmp, b->data.s32);
- integer_add(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_add(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S64:
integer_init_s64(&tmp, b->data.s64);
- integer_add(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_add(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_U8:
- integer_init_u32(&tmp, b->data.u8);
- integer_add(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_u32(&tmp, (u32) b->data.u8);
+ tag_init_integer_zero(dest);
+ integer_add(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_U16:
- integer_init_u32(&tmp, b->data.u16);
- integer_add(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_u32(&tmp, (u32) b->data.u16);
+ tag_init_integer_zero(dest);
+ integer_add(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_U32:
integer_init_u32(&tmp, b->data.u32);
- integer_add(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_add(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_U64:
integer_init_u64(&tmp, b->data.u64);
- integer_add(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_add(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
default:
@@ -163,195 +157,195 @@ s_tag * tag_add (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_S8:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s8 + b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s8 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s8 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s8 + b->data.f64);
case TAG_INTEGER:
- integer_init_s32(&tmp, a->data.s8);
- integer_add(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_s32(&tmp, (s32) a->data.s8);
+ tag_init_integer_zero(dest);
+ integer_add(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
return tag_init_s8(dest, a->data.s8 + b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.s8 + b->data.s16);
+ return tag_init_s16(dest, (s16) a->data.s8 + b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.s8 + b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.s8 + b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.s8 + b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.s8 + b->data.s64);
case TAG_U8:
- return tag_init_s8(dest, a->data.s8 + b->data.u8);
+ return tag_init_s8(dest, a->data.s8 + (s8) b->data.u8);
case TAG_U16:
- return tag_init_s16(dest, a->data.s8 + b->data.u16);
+ return tag_init_s16(dest, (s16) a->data.s8 + (s16) b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s8 + b->data.u32);
+ return tag_init_s32(dest, (s32) a->data.s8 + (s32) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s8 + b->data.u64);
+ return tag_init_s64(dest, (s64) a->data.s8 + (s64) b->data.u64);
default:
goto ko;
}
case TAG_S16:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s16 + b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s16 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s16 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s16 + b->data.f64);
case TAG_INTEGER:
- integer_init_s32(&tmp, a->data.s16);
- integer_add(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_s32(&tmp, (s32) a->data.s16);
+ tag_init_integer_zero(dest);
+ integer_add(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s16(dest, a->data.s16 + b->data.s8);
+ return tag_init_s16(dest, a->data.s16 + (s16) b->data.s8);
case TAG_S16:
return tag_init_s16(dest, a->data.s16 + b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.s16 + b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.s16 + b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.s16 + b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.s16 + b->data.s64);
case TAG_U8:
- return tag_init_s16(dest, a->data.s16 + b->data.u8);
+ return tag_init_s16(dest, a->data.s16 + (s16) b->data.u8);
case TAG_U16:
- return tag_init_s16(dest, a->data.s16 + b->data.u16);
+ return tag_init_s16(dest, a->data.s16 + (s16) b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s16 + b->data.u32);
+ return tag_init_s32(dest, (s32) a->data.s16 + (s32) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s16 + b->data.u64);
+ return tag_init_s64(dest, (s64) a->data.s16 + (s64) b->data.u64);
default:
goto ko;
}
case TAG_S32:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s32 + b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s32 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s32 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s32 + b->data.f64);
case TAG_INTEGER:
integer_init_s32(&tmp, a->data.s32);
- integer_add(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_add(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.s32 + b->data.s8);
+ return tag_init_s32(dest, a->data.s32 + (s32) b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.s32 + b->data.s16);
+ return tag_init_s32(dest, a->data.s32 + (s32) b->data.s16);
case TAG_S32:
return tag_init_s32(dest, a->data.s32 + b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.s32 + b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.s32 + b->data.s64);
case TAG_U8:
- return tag_init_s32(dest, a->data.s32 + b->data.u8);
+ return tag_init_s32(dest, a->data.s32 + (s32) b->data.u8);
case TAG_U16:
- return tag_init_s32(dest, a->data.s32 + b->data.u16);
+ return tag_init_s32(dest, a->data.s32 + (s32) b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s32 + b->data.u32);
+ return tag_init_s32(dest, a->data.s32 + (s32) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s32 + b->data.u64);
+ return tag_init_s64(dest, (s64) a->data.s32 + (s64) b->data.u64);
default:
goto ko;
}
case TAG_S64:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s64 + b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s64 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s64 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s64 + b->data.f64);
case TAG_INTEGER:
integer_init_s64(&tmp, a->data.s64);
- integer_add(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_add(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s64(dest, a->data.s64 + b->data.s8);
+ return tag_init_s64(dest, a->data.s64 + (s64) b->data.s8);
case TAG_S16:
- return tag_init_s64(dest, a->data.s64 + b->data.s16);
+ return tag_init_s64(dest, a->data.s64 + (s64) b->data.s16);
case TAG_S32:
- return tag_init_s64(dest, a->data.s64 + b->data.s32);
+ return tag_init_s64(dest, a->data.s64 + (s64) b->data.s32);
case TAG_S64:
return tag_init_s64(dest, a->data.s64 + b->data.s64);
case TAG_U8:
- return tag_init_s64(dest, a->data.s64 + b->data.u8);
+ return tag_init_s64(dest, a->data.s64 + (s64) b->data.u8);
case TAG_U16:
- return tag_init_s64(dest, a->data.s64 + b->data.u16);
+ return tag_init_s64(dest, a->data.s64 + (s64) b->data.u16);
case TAG_U32:
- return tag_init_s64(dest, a->data.s64 + b->data.u32);
+ return tag_init_s64(dest, a->data.s64 + (s64) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s64 + b->data.u64);
+ return tag_init_s64(dest, a->data.s64 + (s64) b->data.u64);
default:
goto ko;
}
case TAG_U8:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u8 + b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u8 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u8 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u8 + b->data.f64);
case TAG_INTEGER:
- integer_init_u32(&tmp, a->data.u8);
- integer_add(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_u32(&tmp, (u32) a->data.u8);
+ tag_init_integer_zero(dest);
+ integer_add(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s8(dest, a->data.u8 + b->data.s8);
+ return tag_init_s8(dest, (s8) a->data.u8 + b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.u8 + b->data.s16);
+ return tag_init_s16(dest, (s16) a->data.u8 + b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u8 + b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.u8 + b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u8 + b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u8 + b->data.s64);
case TAG_U8:
return tag_init_u8(dest, a->data.u8 + b->data.u8);
case TAG_U16:
- return tag_init_u16(dest, a->data.u8 + b->data.u16);
+ return tag_init_u16(dest, (u16) a->data.u8 + b->data.u16);
case TAG_U32:
- return tag_init_u32(dest, a->data.u8 + b->data.u32);
+ return tag_init_u32(dest, (u32) a->data.u8 + b->data.u32);
case TAG_U64:
- return tag_init_u64(dest, a->data.u8 + b->data.u64);
+ return tag_init_u64(dest, (u64) a->data.u8 + b->data.u64);
default:
goto ko;
}
case TAG_U16:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u16 + b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u16 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u16 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u16 + b->data.f64);
case TAG_INTEGER:
- integer_init_u32(&tmp, a->data.u16);
- integer_add(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_u32(&tmp, (u32) a->data.u16);
+ tag_init_integer_zero(dest);
+ integer_add(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s16(dest, a->data.u16 + b->data.s8);
+ return tag_init_s16(dest, (s16) a->data.u16 + (s16) b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.u16 + b->data.s16);
+ return tag_init_s16(dest, (s16) a->data.u16 + b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u16 + b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.u16 + b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u16 + b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u16 + b->data.s64);
case TAG_U8:
- return tag_init_u16(dest, a->data.u16 + b->data.u8);
+ return tag_init_u16(dest, a->data.u16 + (u16) b->data.u8);
case TAG_U16:
return tag_init_u16(dest, a->data.u16 + b->data.u16);
case TAG_U32:
- return tag_init_u32(dest, a->data.u16 + b->data.u32);
+ return tag_init_u32(dest, (u32) a->data.u16 + b->data.u32);
case TAG_U64:
- return tag_init_u64(dest, a->data.u16 + b->data.u64);
+ return tag_init_u64(dest, (u64) a->data.u16 + b->data.u64);
default:
goto ko;
}
case TAG_U32:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u32 + b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u32 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u32 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u32 + b->data.f64);
case TAG_INTEGER:
integer_init_u32(&tmp, a->data.u32);
integer_add(&tmp, &b->data.integer, &tmp);
@@ -359,30 +353,30 @@ s_tag * tag_add (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.u32 + b->data.s8);
+ return tag_init_s32(dest, (s32) a->data.u32 + (s32) b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.u32 + b->data.s16);
+ return tag_init_s32(dest, (s32) a->data.u32 + (s32) b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u32 + b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.u32 + b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u32 + b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u32 + b->data.s64);
case TAG_U8:
- return tag_init_u32(dest, a->data.u32 + b->data.u8);
+ return tag_init_u32(dest, a->data.u32 + (u32) b->data.u8);
case TAG_U16:
- return tag_init_u32(dest, a->data.u32 + b->data.u16);
+ return tag_init_u32(dest, a->data.u32 + (u32) b->data.u16);
case TAG_U32:
return tag_init_u32(dest, a->data.u32 + b->data.u32);
case TAG_U64:
- return tag_init_u64(dest, a->data.u32 + b->data.u64);
+ return tag_init_u64(dest, (u64) a->data.u32 + b->data.u64);
default:
goto ko;
}
case TAG_U64:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u64 + b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u64 + b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u64 + b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u64 + b->data.f64);
case TAG_INTEGER:
integer_init_u64(&tmp, a->data.u64);
integer_add(&tmp, &b->data.integer, &tmp);
@@ -390,19 +384,19 @@ s_tag * tag_add (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s64(dest, a->data.u64 + b->data.s8);
+ return tag_init_s64(dest, (s64) a->data.u64 + (s64) b->data.s8);
case TAG_S16:
- return tag_init_s64(dest, a->data.u64 + b->data.s16);
+ return tag_init_s64(dest, (s64) a->data.u64 + (s64) b->data.s16);
case TAG_S32:
- return tag_init_s64(dest, a->data.u64 + b->data.s32);
+ return tag_init_s64(dest, (s64) a->data.u64 + (s64) b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u64 + b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u64 + b->data.s64);
case TAG_U8:
- return tag_init_u64(dest, a->data.u64 + b->data.u8);
+ return tag_init_u64(dest, a->data.u64 + (u64) b->data.u8);
case TAG_U16:
- return tag_init_u64(dest, a->data.u64 + b->data.u16);
+ return tag_init_u64(dest, a->data.u64 + (u64) b->data.u16);
case TAG_U32:
- return tag_init_u64(dest, a->data.u64 + b->data.u32);
+ return tag_init_u64(dest, a->data.u64 + (u64) b->data.u32);
case TAG_U64:
return tag_init_u64(dest, a->data.u64 + b->data.u64);
default:
@@ -624,6 +618,8 @@ void tag_delete (s_tag *tag)
s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
{
s_integer tmp;
+ s_integer tmp2;
+ s_integer tmp3;
assert(a);
assert(b);
assert(dest);
@@ -633,36 +629,36 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_F32:
return tag_init_f32(dest, a->data.f32 / b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.f32 / b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.f32 / b->data.f64);
case TAG_INTEGER:
- integer_init_double(&tmp, a->data.f32);
+ integer_init_double(&tmp, (f64) a->data.f32);
integer_div(&tmp, &b->data.integer, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_f32(dest, a->data.f32 / b->data.s8);
+ return tag_init_f32(dest, a->data.f32 / (f32) b->data.s8);
case TAG_S16:
- return tag_init_f32(dest, a->data.f32 / b->data.s16);
+ return tag_init_f32(dest, a->data.f32 / (f32) b->data.s16);
case TAG_S32:
- return tag_init_f32(dest, a->data.f32 / b->data.s32);
+ return tag_init_f32(dest, a->data.f32 / (f32) b->data.s32);
case TAG_S64:
- return tag_init_f32(dest, a->data.f32 / b->data.s64);
+ return tag_init_f32(dest, a->data.f32 / (f32) b->data.s64);
case TAG_U8:
- return tag_init_f32(dest, a->data.f32 / b->data.u8);
+ return tag_init_f32(dest, a->data.f32 / (f32) b->data.u8);
case TAG_U16:
- return tag_init_f32(dest, a->data.f32 / b->data.u16);
+ return tag_init_f32(dest, a->data.f32 / (f32) b->data.u16);
case TAG_U32:
- return tag_init_f32(dest, a->data.f32 / b->data.u32);
+ return tag_init_f32(dest, a->data.f32 / (f32) b->data.u32);
case TAG_U64:
- return tag_init_f32(dest, a->data.f32 / b->data.u64);
+ return tag_init_f32(dest, a->data.f32 / (f32) b->data.u64);
default:
goto ko;
}
case TAG_F64:
switch (b->type) {
case TAG_F32:
- return tag_init_f64(dest, a->data.f64 / b->data.f32);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f64 / b->data.f64);
case TAG_INTEGER:
@@ -672,31 +668,31 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_f64(dest, a->data.f64 / b->data.s8);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.s8);
case TAG_S16:
- return tag_init_f64(dest, a->data.f64 / b->data.s16);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.s16);
case TAG_S32:
- return tag_init_f64(dest, a->data.f64 / b->data.s32);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.s32);
case TAG_S64:
- return tag_init_f64(dest, a->data.f64 / b->data.s64);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.s64);
case TAG_U8:
- return tag_init_f64(dest, a->data.f64 / b->data.u8);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.u8);
case TAG_U16:
- return tag_init_f64(dest, a->data.f64 / b->data.u16);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.u16);
case TAG_U32:
- return tag_init_f64(dest, a->data.f64 / b->data.u32);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.u32);
case TAG_U64:
- return tag_init_f64(dest, a->data.f64 / b->data.u64);
+ return tag_init_f64(dest, a->data.f64 / (f64) b->data.u64);
default:
goto ko;
}
case TAG_INTEGER:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, integer_to_f64(&a->data.integer) -
+ return tag_init_f32(dest, (f32) integer_to_f64(&a->data.integer) /
b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, integer_to_f64(&a->data.integer) -
+ return tag_init_f64(dest, integer_to_f64(&a->data.integer) /
b->data.f64);
case TAG_INTEGER:
tag_init_integer_zero(dest);
@@ -705,50 +701,50 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return dest;
case TAG_S8:
integer_init_s32(&tmp, b->data.s8);
- integer_div(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S16:
integer_init_s32(&tmp, b->data.s16);
- integer_div(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S32:
integer_init_s32(&tmp, b->data.s32);
- integer_div(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S64:
integer_init_s64(&tmp, b->data.s64);
- integer_div(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_U8:
- integer_init_u32(&tmp, b->data.u8);
- integer_div(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_u32(&tmp, (u32) b->data.u8);
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_U16:
- integer_init_u32(&tmp, b->data.u16);
- integer_div(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_u32(&tmp, (u32) b->data.u16);
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_U32:
integer_init_u32(&tmp, b->data.u32);
- integer_div(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_U64:
integer_init_u64(&tmp, b->data.u64);
- integer_div(&a->data.integer, &tmp, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&a->data.integer, &tmp, &dest->data.integer);
integer_clean(&tmp);
return dest;
default:
@@ -757,186 +753,198 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_S8:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s8 / b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s8 / b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s8 / b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s8 / b->data.f64);
case TAG_INTEGER:
- integer_init_s32(&tmp, a->data.s8);
- integer_div(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_s32(&tmp, (s32) a->data.s8);
+ tag_init_integer_zero(dest);
+ integer_div(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
return tag_init_s8(dest, a->data.s8 / b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.s8 / b->data.s16);
+ return tag_init_s8(dest, (s8) ((s16) a->data.s8 / b->data.s16));
case TAG_S32:
- return tag_init_s32(dest, a->data.s8 / b->data.s32);
+ return tag_init_s8(dest, (s8) ((s32) a->data.s8 / b->data.s32));
case TAG_S64:
- return tag_init_s64(dest, a->data.s8 / b->data.s64);
+ return tag_init_s8(dest, (s8) ((s64) a->data.s8 / b->data.s64));
case TAG_U8:
- return tag_init_s8(dest, a->data.s8 / b->data.u8);
+ return tag_init_s8(dest, (s8) ((s16) a->data.s8 / (s16) b->data.u8));
case TAG_U16:
- return tag_init_s16(dest, a->data.s8 / b->data.u16);
+ return tag_init_s8(dest, (s8) ((s32) a->data.s8 / (s32) b->data.u16));
case TAG_U32:
- return tag_init_s32(dest, a->data.s8 / b->data.u32);
+ return tag_init_s8(dest, (s8) ((s64) a->data.s8 / (s64) b->data.u32));
case TAG_U64:
- return tag_init_s64(dest, a->data.s8 / b->data.u64);
+ if (b->data.u64 > S8_MAX)
+ return tag_init_s8(dest, 0);
+ else
+ return tag_init_s8(dest, a->data.s8 / (s8) b->data.u64));
default:
goto ko;
}
case TAG_S16:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s16 / b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s16 / b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s16 / b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s16 / b->data.f64);
case TAG_INTEGER:
- integer_init_s32(&tmp, a->data.s16);
- integer_div(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_s32(&tmp, (s32) a->data.s16);
+ tag_init_integer_zero(dest);
+ integer_div(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s16(dest, a->data.s16 / b->data.s8);
+ return tag_init_s16(dest, a->data.s16 / (s16) b->data.s8);
case TAG_S16:
return tag_init_s16(dest, a->data.s16 / b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.s16 / b->data.s32);
+ return tag_init_s16(dest, ((s16) ((s32) a->data.s16 / b->data.s32)));
case TAG_S64:
- return tag_init_s64(dest, a->data.s16 / b->data.s64);
+ return tag_init_s16(dest, ((s16) ((s64) a->data.s16 / b->data.s64)));
case TAG_U8:
- return tag_init_s16(dest, a->data.s16 / b->data.u8);
+ return tag_init_s16(dest, a->data.s16 / (s16) b->data.u8);
case TAG_U16:
- return tag_init_s16(dest, a->data.s16 / b->data.u16);
+ return tag_init_s16(dest, (s16) ((s32) a->data.s16 / (s32) b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s16 / b->data.u32);
+ return tag_init_s16(dest, (s16) ((s64) a->data.s16 / (s64) b->data.u32)));
case TAG_U64:
- return tag_init_s64(dest, a->data.s16 / b->data.u64);
+ if (b->data.u64 > S16_MAX)
+ return tag_init_s16(dest, 0);
+ else
+ return tag_init_s16(dest, (s16) a->data.s16 / (s16) b->data.u64)));
default:
goto ko;
}
case TAG_S32:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s32 / b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s32 / b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s32 / b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s32 / b->data.f64);
case TAG_INTEGER:
integer_init_s32(&tmp, a->data.s32);
- integer_div(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.s32 / b->data.s8);
+ return tag_init_s32(dest, a->data.s32 / (s32) b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.s32 / b->data.s16);
+ return tag_init_s32(dest, a->data.s32 / (s32) b->data.s16);
case TAG_S32:
return tag_init_s32(dest, a->data.s32 / b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.s32 / b->data.s64);
+ return tag_init_s32(dest, (s32) ((s64) a->data.s32 / b->data.s64));
case TAG_U8:
- return tag_init_s32(dest, a->data.s32 / b->data.u8);
+ return tag_init_s32(dest, a->data.s32 / (s32) b->data.u8);
case TAG_U16:
- return tag_init_s32(dest, a->data.s32 / b->data.u16);
+ return tag_init_s32(dest, a->data.s32 / (s32) b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s32 / b->data.u32);
+ return tag_init_s32(dest, a->data.s32 / (s64) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s32 / b->data.u64);
+ if (b->data.u64 > S32_MAX)
+ return tag_init_s32(dest, 0);
+ else
+ return tag_init_s32(dest, a->data.s32 / (s32) b->data.u64));
default:
goto ko;
}
case TAG_S64:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s64 / b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s64 / b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s64 / b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s64 / b->data.f64);
case TAG_INTEGER:
integer_init_s64(&tmp, a->data.s64);
- integer_div(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s64(dest, a->data.s64 / b->data.s8);
+ return tag_init_s64(dest, a->data.s64 / (s64) b->data.s8);
case TAG_S16:
- return tag_init_s64(dest, a->data.s64 / b->data.s16);
+ return tag_init_s64(dest, a->data.s64 / (s64) b->data.s16);
case TAG_S32:
- return tag_init_s64(dest, a->data.s64 / b->data.s32);
+ return tag_init_s64(dest, a->data.s64 / (s64) b->data.s32);
case TAG_S64:
return tag_init_s64(dest, a->data.s64 / b->data.s64);
case TAG_U8:
- return tag_init_s64(dest, a->data.s64 / b->data.u8);
+ return tag_init_s64(dest, a->data.s64 / (s64) b->data.u8);
case TAG_U16:
- return tag_init_s64(dest, a->data.s64 / b->data.u16);
+ return tag_init_s64(dest, a->data.s64 / (s64) b->data.u16);
case TAG_U32:
- return tag_init_s64(dest, a->data.s64 / b->data.u32);
+ return tag_init_s64(dest, a->data.s64 / (s64) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s64 / b->data.u64);
+ if (b->data.u64 > S64_MAX)
+ return tag_init_s64(dest, 0);
+ else
+ return tag_init_s64(dest, a->data.s64 / (s64) b->data.u64);
default:
goto ko;
}
case TAG_U8:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u8 / b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u8 / b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u8 / b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u8 / b->data.f64);
case TAG_INTEGER:
integer_init_u32(&tmp, a->data.u8);
- integer_div(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s8(dest, a->data.u8 / b->data.s8);
+ return tag_init_s16(dest, (s16) a->data.u8 / (s16) b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.u8 / b->data.s16);
+ return tag_init_s16(dest, (s16) a->data.u8 / b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u8 / b->data.s32);
+ return tag_init_s16(dest, (s16) ((s32) a->data.u8 / b->data.s32));
case TAG_S64:
- return tag_init_s64(dest, a->data.u8 / b->data.s64);
+ return tag_init_s16(dest, (s16) ((s64) a->data.u8 / b->data.s64));
case TAG_U8:
return tag_init_u8(dest, a->data.u8 / b->data.u8);
case TAG_U16:
- return tag_init_u16(dest, a->data.u8 / b->data.u16);
+ return tag_init_u16(dest, (u8) ((u16) a->data.u8 / b->data.u16));
case TAG_U32:
- return tag_init_u32(dest, a->data.u8 / b->data.u32);
+ return tag_init_u32(dest, (u8) ((u32) a->data.u8 / b->data.u32));
case TAG_U64:
- return tag_init_u64(dest, a->data.u8 / b->data.u64);
+ return tag_init_u64(dest, (u8) ((u64) a->data.u8 / b->data.u64));
default:
goto ko;
}
case TAG_U16:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u16 / b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u16 / b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u16 / b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u16 / b->data.f64);
case TAG_INTEGER:
- integer_init_u32(&tmp, a->data.u16);
- integer_div(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ integer_init_u32(&tmp, (u32) a->data.u16);
+ tag_init_integer_zero(dest);
+ integer_div(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s16(dest, a->data.u16 / b->data.s8);
+ return tag_init_s16(dest, (s16) a->data.u16 / (s16) b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.u16 / b->data.s16);
+ return tag_init_s16(dest, (s16) a->data.u16 / b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u16 / b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.u16 / b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u16 / b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u16 / b->data.s64);
case TAG_U8:
- return tag_init_u16(dest, a->data.u16 / b->data.u8);
+ return tag_init_u16(dest, a->data.u16 / (u16) b->data.u8);
case TAG_U16:
return tag_init_u16(dest, a->data.u16 / b->data.u16);
case TAG_U32:
- return tag_init_u32(dest, a->data.u16 / b->data.u32);
+ return tag_init_u16(dest, (u16) ((u32) a->data.u16 / b->data.u32));
case TAG_U64:
- return tag_init_u64(dest, a->data.u16 / b->data.u64);
+ return tag_init_u16(dest, (u16) ((u64) a->data.u16 / b->data.u64));
default:
goto ko;
}
@@ -948,18 +956,18 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, a->data.u32 / b->data.f64);
case TAG_INTEGER:
integer_init_u32(&tmp, a->data.u32);
- integer_div(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.u32 / b->data.s8);
+ return tag_init_s32(dest, (s32) a->data.u32 / (s32) b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.u32 / b->data.s16);
+ return tag_init_s32(dest, (s32) a->data.u32 / (s32) b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u32 / b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.u32 / b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u32 / b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u32 / b->data.s64);
case TAG_U8:
return tag_init_u32(dest, a->data.u32 / b->data.u8);
case TAG_U16:
@@ -979,24 +987,24 @@ s_tag * tag_div (const s_tag *a, const s_tag *b, s_tag *dest)
return tag_init_f64(dest, a->data.u64 / b->data.f64);
case TAG_INTEGER:
integer_init_u64(&tmp, a->data.u64);
- integer_div(&tmp, &b->data.integer, &tmp);
- tag_init_integer(dest, &tmp);
+ tag_init_integer_zero(dest);
+ integer_div(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s64(dest, a->data.u64 / b->data.s8);
+ return tag_init_s64(dest, (s64) a->data.u64 / (s64) b->data.s8);
case TAG_S16:
- return tag_init_s64(dest, a->data.u64 / b->data.s16);
+ return tag_init_s64(dest, (s64) a->data.u64 / (s64) b->data.s16);
case TAG_S32:
- return tag_init_s64(dest, a->data.u64 / b->data.s32);
+ return tag_init_s64(dest, (s64) a->data.u64 / (s64) b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u64 / b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u64 / b->data.s64);
case TAG_U8:
- return tag_init_u64(dest, a->data.u64 / b->data.u8);
+ return tag_init_u64(dest, a->data.u64 / (u64) b->data.u8);
case TAG_U16:
- return tag_init_u64(dest, a->data.u64 / b->data.u16);
+ return tag_init_u64(dest, a->data.u64 / (u64) b->data.u16);
case TAG_U32:
- return tag_init_u64(dest, a->data.u64 / b->data.u32);
+ return tag_init_u64(dest, a->data.u64 / (u64) b->data.u32);
case TAG_U64:
return tag_init_u64(dest, a->data.u64 / b->data.u64);
default:
@@ -1519,36 +1527,36 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_F32:
return tag_init_f32(dest, a->data.f32 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.f32 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.f32 * b->data.f64);
case TAG_INTEGER:
- integer_init_double(&tmp, a->data.f32);
+ integer_init_double(&tmp, (f64) a->data.f32);
integer_mul(&tmp, &b->data.integer, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_f32(dest, a->data.f32 * b->data.s8);
+ return tag_init_f32(dest, a->data.f32 * (f32) b->data.s8);
case TAG_S16:
- return tag_init_f32(dest, a->data.f32 * b->data.s16);
+ return tag_init_f32(dest, a->data.f32 * (f32) b->data.s16);
case TAG_S32:
- return tag_init_f32(dest, a->data.f32 * b->data.s32);
+ return tag_init_f32(dest, a->data.f32 * (f32) b->data.s32);
case TAG_S64:
- return tag_init_f32(dest, a->data.f32 * b->data.s64);
+ return tag_init_f32(dest, a->data.f32 * (f32) b->data.s64);
case TAG_U8:
- return tag_init_f32(dest, a->data.f32 * b->data.u8);
+ return tag_init_f32(dest, a->data.f32 * (f32) b->data.u8);
case TAG_U16:
- return tag_init_f32(dest, a->data.f32 * b->data.u16);
+ return tag_init_f32(dest, a->data.f32 * (f32) b->data.u16);
case TAG_U32:
- return tag_init_f32(dest, a->data.f32 * b->data.u32);
+ return tag_init_f32(dest, a->data.f32 * (f32) b->data.u32);
case TAG_U64:
- return tag_init_f32(dest, a->data.f32 * b->data.u64);
+ return tag_init_f32(dest, a->data.f32 * (f32) b->data.u64);
default:
goto ko;
}
case TAG_F64:
switch (b->type) {
case TAG_F32:
- return tag_init_f64(dest, a->data.f64 * b->data.f32);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.f32);
case TAG_F64:
return tag_init_f64(dest, a->data.f64 * b->data.f64);
case TAG_INTEGER:
@@ -1558,31 +1566,31 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_f64(dest, a->data.f64 * b->data.s8);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.s8);
case TAG_S16:
- return tag_init_f64(dest, a->data.f64 * b->data.s16);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.s16);
case TAG_S32:
- return tag_init_f64(dest, a->data.f64 * b->data.s32);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.s32);
case TAG_S64:
- return tag_init_f64(dest, a->data.f64 * b->data.s64);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.s64);
case TAG_U8:
- return tag_init_f64(dest, a->data.f64 * b->data.u8);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.u8);
case TAG_U16:
- return tag_init_f64(dest, a->data.f64 * b->data.u16);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.u16);
case TAG_U32:
- return tag_init_f64(dest, a->data.f64 * b->data.u32);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.u32);
case TAG_U64:
- return tag_init_f64(dest, a->data.f64 * b->data.u64);
+ return tag_init_f64(dest, a->data.f64 * (f64) b->data.u64);
default:
goto ko;
}
case TAG_INTEGER:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, integer_to_f64(&a->data.integer) -
+ return tag_init_f32(dest, (f32) integer_to_f64(&a->data.integer) *
b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, integer_to_f64(&a->data.integer) -
+ return tag_init_f64(dest, (f32) integer_to_f64(&a->data.integer) *
b->data.f64);
case TAG_INTEGER:
tag_init_integer_zero(dest);
@@ -1590,13 +1598,13 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
&dest->data.integer);
return dest;
case TAG_S8:
- integer_init_s32(&tmp, b->data.s8);
+ integer_init_s32(&tmp, (s32) b->data.s8);
integer_mul(&a->data.integer, &tmp, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
return dest;
case TAG_S16:
- integer_init_s32(&tmp, b->data.s16);
+ integer_init_s32(&tmp, (s32) b->data.s16);
integer_mul(&a->data.integer, &tmp, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
@@ -1614,13 +1622,13 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_U8:
- integer_init_u32(&tmp, b->data.u8);
+ integer_init_u32(&tmp, (u32) b->data.u8);
integer_mul(&a->data.integer, &tmp, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
return dest;
case TAG_U16:
- integer_init_u32(&tmp, b->data.u16);
+ integer_init_u32(&tmp, (u32) b->data.u16);
integer_mul(&a->data.integer, &tmp, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
@@ -1643,11 +1651,11 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_S8:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s8 * b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s8 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s8 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s8 * b->data.f64);
case TAG_INTEGER:
- integer_init_s32(&tmp, a->data.s8);
+ integer_init_s32(&tmp, (s32) a->data.s8);
integer_mul(&tmp, &b->data.integer, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
@@ -1655,59 +1663,59 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
case TAG_S8:
return tag_init_s8(dest, a->data.s8 * b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.s8 * b->data.s16);
+ return tag_init_s16(dest, (s16) a->data.s8 * b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.s8 * b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.s8 * b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.s8 * b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.s8 * b->data.s64);
case TAG_U8:
- return tag_init_s8(dest, a->data.s8 * b->data.u8);
+ return tag_init_s8(dest, a->data.s8 * (s8) b->data.u8);
case TAG_U16:
- return tag_init_s16(dest, a->data.s8 * b->data.u16);
+ return tag_init_s16(dest, (s16) a->data.s8 * (s16) b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s8 * b->data.u32);
+ return tag_init_s32(dest, (s32) a->data.s8 * (s32) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s8 * b->data.u64);
+ return tag_init_s64(dest, (s64) a->data.s8 * (s64) b->data.u64);
default:
goto ko;
}
case TAG_S16:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s16 * b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s16 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s16 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s16 * b->data.f64);
case TAG_INTEGER:
- integer_init_s32(&tmp, a->data.s16);
+ integer_init_s32(&tmp, (s32) a->data.s16);
integer_mul(&tmp, &b->data.integer, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s16(dest, a->data.s16 * b->data.s8);
+ return tag_init_s16(dest, a->data.s16 * (s16) b->data.s8);
case TAG_S16:
return tag_init_s16(dest, a->data.s16 * b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.s16 * b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.s16 * b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.s16 * b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.s16 * b->data.s64);
case TAG_U8:
- return tag_init_s16(dest, a->data.s16 * b->data.u8);
+ return tag_init_s16(dest, a->data.s16 * (s16) b->data.u8);
case TAG_U16:
- return tag_init_s16(dest, a->data.s16 * b->data.u16);
+ return tag_init_s16(dest, a->data.s16 * (s16) b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s16 * b->data.u32);
+ return tag_init_s32(dest, (s32) a->data.s16 * (s32) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s16 * b->data.u64);
+ return tag_init_s64(dest, (s64) a->data.s16 * (s64) b->data.u64);
default:
goto ko;
}
case TAG_S32:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s32 * b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s32 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s32 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s32 * b->data.f64);
case TAG_INTEGER:
integer_init_s32(&tmp, a->data.s32);
integer_mul(&tmp, &b->data.integer, &tmp);
@@ -1715,30 +1723,30 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.s32 * b->data.s8);
+ return tag_init_s32(dest, a->data.s32 * (s32) b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.s32 * b->data.s16);
+ return tag_init_s32(dest, a->data.s32 * (s32) b->data.s16);
case TAG_S32:
return tag_init_s32(dest, a->data.s32 * b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.s32 * b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.s32 * b->data.s64);
case TAG_U8:
- return tag_init_s32(dest, a->data.s32 * b->data.u8);
+ return tag_init_s32(dest, a->data.s32 * (s32) b->data.u8);
case TAG_U16:
- return tag_init_s32(dest, a->data.s32 * b->data.u16);
+ return tag_init_s32(dest, a->data.s32 * (s32) b->data.u16);
case TAG_U32:
- return tag_init_s32(dest, a->data.s32 * b->data.u32);
+ return tag_init_s32(dest, a->data.s32 * (s32) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s32 * b->data.u64);
+ return tag_init_s64(dest, (s64) a->data.s32 * (s64) b->data.u64);
default:
goto ko;
}
case TAG_S64:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.s64 * b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.s64 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.s64 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.s64 * b->data.f64);
case TAG_INTEGER:
integer_init_s64(&tmp, a->data.s64);
integer_mul(&tmp, &b->data.integer, &tmp);
@@ -1746,92 +1754,92 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s64(dest, a->data.s64 * b->data.s8);
+ return tag_init_s64(dest, a->data.s64 * (s64) b->data.s8);
case TAG_S16:
- return tag_init_s64(dest, a->data.s64 * b->data.s16);
+ return tag_init_s64(dest, a->data.s64 * (s64) b->data.s16);
case TAG_S32:
- return tag_init_s64(dest, a->data.s64 * b->data.s32);
+ return tag_init_s64(dest, a->data.s64 * (s64) b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.s64 * b->data.s64);
+ return tag_init_s64(dest, a->data.s64 * (s64) b->data.s64);
case TAG_U8:
- return tag_init_s64(dest, a->data.s64 * b->data.u8);
+ return tag_init_s64(dest, a->data.s64 * (s64) b->data.u8);
case TAG_U16:
- return tag_init_s64(dest, a->data.s64 * b->data.u16);
+ return tag_init_s64(dest, a->data.s64 * (s64) b->data.u16);
case TAG_U32:
- return tag_init_s64(dest, a->data.s64 * b->data.u32);
+ return tag_init_s64(dest, a->data.s64 * (s64) b->data.u32);
case TAG_U64:
- return tag_init_s64(dest, a->data.s64 * b->data.u64);
+ return tag_init_s64(dest, a->data.s64 * (s64) b->data.u64);
default:
goto ko;
}
case TAG_U8:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u8 * b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u8 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u8 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u8 * b->data.f64);
case TAG_INTEGER:
- integer_init_u32(&tmp, a->data.u8);
+ integer_init_u32(&tmp, (u32) a->data.u8);
integer_mul(&tmp, &b->data.integer, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s8(dest, a->data.u8 * b->data.s8);
+ return tag_init_s8(dest, (s8) a->data.u8 * b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.u8 * b->data.s16);
+ return tag_init_s16(dest, (s16) a->data.u8 * b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u8 * b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.u8 * b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u8 * b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u8 * b->data.s64);
case TAG_U8:
return tag_init_u8(dest, a->data.u8 * b->data.u8);
case TAG_U16:
- return tag_init_u16(dest, a->data.u8 * b->data.u16);
+ return tag_init_u16(dest, (u16) a->data.u8 * b->data.u16);
case TAG_U32:
- return tag_init_u32(dest, a->data.u8 * b->data.u32);
+ return tag_init_u32(dest, (u32) a->data.u8 * b->data.u32);
case TAG_U64:
- return tag_init_u64(dest, a->data.u8 * b->data.u64);
+ return tag_init_u64(dest, (u64) a->data.u8 * b->data.u64);
default:
goto ko;
}
case TAG_U16:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u16 * b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u16 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u16 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u16 * b->data.f64);
case TAG_INTEGER:
- integer_init_u32(&tmp, a->data.u16);
+ integer_init_u32(&tmp, (u32) a->data.u16);
integer_mul(&tmp, &b->data.integer, &tmp);
tag_init_integer(dest, &tmp);
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s16(dest, a->data.u16 * b->data.s8);
+ return tag_init_s16(dest, (s16) a->data.u16 * (s16) b->data.s8);
case TAG_S16:
- return tag_init_s16(dest, a->data.u16 * b->data.s16);
+ return tag_init_s16(dest, (s16) a->data.u16 * b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u16 * b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.u16 * b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u16 * b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u16 * b->data.s64);
case TAG_U8:
- return tag_init_u16(dest, a->data.u16 * b->data.u8);
+ return tag_init_u16(dest, a->data.u16 * (u16) b->data.u8);
case TAG_U16:
return tag_init_u16(dest, a->data.u16 * b->data.u16);
case TAG_U32:
- return tag_init_u32(dest, a->data.u16 * b->data.u32);
+ return tag_init_u32(dest, (u32) a->data.u16 * b->data.u32);
case TAG_U64:
- return tag_init_u64(dest, a->data.u16 * b->data.u64);
+ return tag_init_u64(dest, (u64) a->data.u16 * b->data.u64);
default:
goto ko;
}
case TAG_U32:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u32 * b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u32 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u32 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u32 * b->data.f64);
case TAG_INTEGER:
integer_init_u32(&tmp, a->data.u32);
integer_mul(&tmp, &b->data.integer, &tmp);
@@ -1839,30 +1847,30 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s32(dest, a->data.u32 * b->data.s8);
+ return tag_init_s32(dest, (s32) a->data.u32 * (s32) b->data.s8);
case TAG_S16:
- return tag_init_s32(dest, a->data.u32 * b->data.s16);
+ return tag_init_s32(dest, (s32) a->data.u32 * (s32) b->data.s16);
case TAG_S32:
- return tag_init_s32(dest, a->data.u32 * b->data.s32);
+ return tag_init_s32(dest, (s32) a->data.u32 * b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u32 * b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u32 * b->data.s64);
case TAG_U8:
- return tag_init_u32(dest, a->data.u32 * b->data.u8);
+ return tag_init_u32(dest, a->data.u32 * (u32) b->data.u8);
case TAG_U16:
- return tag_init_u32(dest, a->data.u32 * b->data.u16);
+ return tag_init_u32(dest, a->data.u32 * (u32) b->data.u16);
case TAG_U32:
return tag_init_u32(dest, a->data.u32 * b->data.u32);
case TAG_U64:
- return tag_init_u64(dest, a->data.u32 * b->data.u64);
+ return tag_init_u64(dest, (u64) a->data.u32 * b->data.u64);
default:
goto ko;
}
case TAG_U64:
switch (b->type) {
case TAG_F32:
- return tag_init_f32(dest, a->data.u64 * b->data.f32);
+ return tag_init_f32(dest, (f32) a->data.u64 * b->data.f32);
case TAG_F64:
- return tag_init_f64(dest, a->data.u64 * b->data.f64);
+ return tag_init_f64(dest, (f64) a->data.u64 * b->data.f64);
case TAG_INTEGER:
integer_init_u64(&tmp, a->data.u64);
integer_mul(&tmp, &b->data.integer, &tmp);
@@ -1870,19 +1878,19 @@ s_tag * tag_mul (const s_tag *a, const s_tag *b, s_tag *dest)
integer_clean(&tmp);
return dest;
case TAG_S8:
- return tag_init_s64(dest, a->data.u64 * b->data.s8);
+ return tag_init_s64(dest, (s64) a->data.u64 * (s64) b->data.s8);
case TAG_S16:
- return tag_init_s64(dest, a->data.u64 * b->data.s16);
+ return tag_init_s64(dest, (s64) a->data.u64 * (s64) b->data.s16);
case TAG_S32:
- return tag_init_s64(dest, a->data.u64 * b->data.s32);
+ return tag_init_s64(dest, (s64) a->data.u64 * (s64) b->data.s32);
case TAG_S64:
- return tag_init_s64(dest, a->data.u64 * b->data.s64);
+ return tag_init_s64(dest, (s64) a->data.u64 * b->data.s64);
case TAG_U8:
- return tag_init_u64(dest, a->data.u64 * b->data.u8);
+ return tag_init_u64(dest, a->data.u64 * (u64) b->data.u8);
case TAG_U16:
- return tag_init_u64(dest, a->data.u64 * b->data.u16);
+ return tag_init_u64(dest, a->data.u64 * (u64) b->data.u16);
case TAG_U32:
- return tag_init_u64(dest, a->data.u64 * b->data.u32);
+ return tag_init_u64(dest, a->data.u64 * (u64) b->data.u32);
case TAG_U64:
return tag_init_u64(dest, a->data.u64 * b->data.u64);
default:
diff --git a/test/ic3/integer.lisp b/test/ic3/integer.lisp
index 44ddaf3..46cc403 100644
--- a/test/ic3/integer.lisp
+++ b/test/ic3/integer.lisp
@@ -2,105 +2,106 @@
(with-open-file (out #P"~/integer.out"
:direction :output
- :element-type 'character)
- (dolist (op (list #'- #'* #'/))
- (format out "~A~%" (funcall op -18446744073709551616 -18446744073709551616))
- (format out "~A~%" (funcall op -18446744073709551616 -4294967296))
- (format out "~A~%" (funcall op -18446744073709551616 -32769))
- (format out "~A~%" (funcall op -18446744073709551616 -129))
- (format out "~A~%" (funcall op -18446744073709551616 -1))
- (format out "~A~%" (funcall op -18446744073709551616 1))
- (format out "~A~%" (funcall op -18446744073709551616 256))
- (format out "~A~%" (funcall op -18446744073709551616 65536))
- (format out "~A~%" (funcall op -18446744073709551616 8589934592))
- (format out "~A~%" (funcall op -18446744073709551616 36893488147419103232))
- (format out "~A~%" (funcall op -4294967296 -18446744073709551616))
- (format out "~A~%" (funcall op -4294967296 -4294967296))
- (format out "~A~%" (funcall op -4294967296 -32769))
- (format out "~A~%" (funcall op -4294967296 -129))
- (format out "~A~%" (funcall op -4294967296 -1))
- (format out "~A~%" (funcall op -4294967296 1))
- (format out "~A~%" (funcall op -4294967296 256))
- (format out "~A~%" (funcall op -4294967296 65536))
- (format out "~A~%" (funcall op -4294967296 8589934592))
- (format out "~A~%" (funcall op -4294967296 36893488147419103232))
- (format out "~A~%" (funcall op -32769 -18446744073709551616))
- (format out "~A~%" (funcall op -32769 -4294967296))
- (format out "~A~%" (funcall op -32769 -32769))
- (format out "~A~%" (funcall op -32769 -129))
- (format out "~A~%" (funcall op -32769 -1))
- (format out "~A~%" (funcall op -32769 1))
- (format out "~A~%" (funcall op -32769 256))
- (format out "~A~%" (funcall op -32769 65536))
- (format out "~A~%" (funcall op -32769 8589934592))
- (format out "~A~%" (funcall op -32769 36893488147419103232))
- (format out "~A~%" (funcall op -129 -18446744073709551616))
- (format out "~A~%" (funcall op -129 -4294967296))
- (format out "~A~%" (funcall op -129 -32769))
- (format out "~A~%" (funcall op -129 -129))
- (format out "~A~%" (funcall op -129 -1))
- (format out "~A~%" (funcall op -129 1))
- (format out "~A~%" (funcall op -129 256))
- (format out "~A~%" (funcall op -129 65536))
- (format out "~A~%" (funcall op -129 8589934592))
- (format out "~A~%" (funcall op -129 36893488147419103232))
- (format out "~A~%" (funcall op -1 -18446744073709551616))
- (format out "~A~%" (funcall op -1 -4294967296))
- (format out "~A~%" (funcall op -1 -32769))
- (format out "~A~%" (funcall op -1 -129))
- (format out "~A~%" (funcall op -1 -1))
- (format out "~A~%" (funcall op -1 1))
- (format out "~A~%" (funcall op -1 256))
- (format out "~A~%" (funcall op -1 65536))
- (format out "~A~%" (funcall op -1 8589934592))
- (format out "~A~%" (funcall op -1 36893488147419103232))
- (format out "~A~%" (funcall op 1 -18446744073709551616))
- (format out "~A~%" (funcall op 1 -4294967296))
- (format out "~A~%" (funcall op 1 -32769))
- (format out "~A~%" (funcall op 1 -129))
- (format out "~A~%" (funcall op 1 -1))
- (format out "~A~%" (funcall op 1 1))
- (format out "~A~%" (funcall op 1 256))
- (format out "~A~%" (funcall op 1 65536))
- (format out "~A~%" (funcall op 1 8589934592))
- (format out "~A~%" (funcall op 1 36893488147419103232))
- (format out "~A~%" (funcall op 256 -18446744073709551616))
- (format out "~A~%" (funcall op 256 -4294967296))
- (format out "~A~%" (funcall op 256 -32769))
- (format out "~A~%" (funcall op 256 -257))
- (format out "~A~%" (funcall op 256 -1))
- (format out "~A~%" (funcall op 256 1))
- (format out "~A~%" (funcall op 256 256))
- (format out "~A~%" (funcall op 256 65536))
- (format out "~A~%" (funcall op 256 8589934592))
- (format out "~A~%" (funcall op 256 36893488147419103232))
- (format out "~A~%" (funcall op 65536 -18446744073709551616))
- (format out "~A~%" (funcall op 65536 -4294967296))
- (format out "~A~%" (funcall op 65536 -32769))
- (format out "~A~%" (funcall op 65536 -129))
- (format out "~A~%" (funcall op 65536 -1))
- (format out "~A~%" (funcall op 65536 1))
- (format out "~A~%" (funcall op 65536 256))
- (format out "~A~%" (funcall op 65536 65536))
- (format out "~A~%" (funcall op 65536 8589934592))
- (format out "~A~%" (funcall op 65536 36893488147419103232))
- (format out "~A~%" (funcall op 8589934592 -18446744073709551616))
- (format out "~A~%" (funcall op 8589934592 -4294967296))
- (format out "~A~%" (funcall op 8589934592 -32769))
- (format out "~A~%" (funcall op 8589934592 -129))
- (format out "~A~%" (funcall op 8589934592 -1))
- (format out "~A~%" (funcall op 8589934592 1))
- (format out "~A~%" (funcall op 8589934592 256))
- (format out "~A~%" (funcall op 8589934592 65536))
- (format out "~A~%" (funcall op 8589934592 8589934592))
- (format out "~A~%" (funcall op 8589934592 36893488147419103232))
- (format out "~A~%" (funcall op 36893488147419103232 -18446744073709551616))
- (format out "~A~%" (funcall op 36893488147419103232 -4294967296))
- (format out "~A~%" (funcall op 36893488147419103232 -32769))
- (format out "~A~%" (funcall op 36893488147419103232 -129))
- (format out "~A~%" (funcall op 36893488147419103232 -1))
- (format out "~A~%" (funcall op 36893488147419103232 1))
- (format out "~A~%" (funcall op 36893488147419103232 256))
- (format out "~A~%" (funcall op 36893488147419103232 65536))
- (format out "~A~%" (funcall op 36893488147419103232 8589934592))
- (format out "~A~%" (funcall op 36893488147419103232 36893488147419103232))))
+ :element-type 'character
+ :if-exists :supersede)
+ (dolist (op (list #'/))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 -4294967296)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 -32769)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 -129)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 -1)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 1)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 256)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 65536)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 8589934592)))
+ (format out "~A~%" (truncate (funcall op -18446744073709551616 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op -4294967296 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op -4294967296 -4294967296)))
+ (format out "~A~%" (truncate (funcall op -4294967296 -32769)))
+ (format out "~A~%" (truncate (funcall op -4294967296 -129)))
+ (format out "~A~%" (truncate (funcall op -4294967296 -1)))
+ (format out "~A~%" (truncate (funcall op -4294967296 1)))
+ (format out "~A~%" (truncate (funcall op -4294967296 256)))
+ (format out "~A~%" (truncate (funcall op -4294967296 65536)))
+ (format out "~A~%" (truncate (funcall op -4294967296 8589934592)))
+ (format out "~A~%" (truncate (funcall op -4294967296 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op -32769 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op -32769 -4294967296)))
+ (format out "~A~%" (truncate (funcall op -32769 -32769)))
+ (format out "~A~%" (truncate (funcall op -32769 -129)))
+ (format out "~A~%" (truncate (funcall op -32769 -1)))
+ (format out "~A~%" (truncate (funcall op -32769 1)))
+ (format out "~A~%" (truncate (funcall op -32769 256)))
+ (format out "~A~%" (truncate (funcall op -32769 65536)))
+ (format out "~A~%" (truncate (funcall op -32769 8589934592)))
+ (format out "~A~%" (truncate (funcall op -32769 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op -129 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op -129 -4294967296)))
+ (format out "~A~%" (truncate (funcall op -129 -32769)))
+ (format out "~A~%" (truncate (funcall op -129 -129)))
+ (format out "~A~%" (truncate (funcall op -129 -1)))
+ (format out "~A~%" (truncate (funcall op -129 1)))
+ (format out "~A~%" (truncate (funcall op -129 256)))
+ (format out "~A~%" (truncate (funcall op -129 65536)))
+ (format out "~A~%" (truncate (funcall op -129 8589934592)))
+ (format out "~A~%" (truncate (funcall op -129 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op -1 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op -1 -4294967296)))
+ (format out "~A~%" (truncate (funcall op -1 -32769)))
+ (format out "~A~%" (truncate (funcall op -1 -129)))
+ (format out "~A~%" (truncate (funcall op -1 -1)))
+ (format out "~A~%" (truncate (funcall op -1 1)))
+ (format out "~A~%" (truncate (funcall op -1 256)))
+ (format out "~A~%" (truncate (funcall op -1 65536)))
+ (format out "~A~%" (truncate (funcall op -1 8589934592)))
+ (format out "~A~%" (truncate (funcall op -1 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op 1 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op 1 -4294967296)))
+ (format out "~A~%" (truncate (funcall op 1 -32769)))
+ (format out "~A~%" (truncate (funcall op 1 -129)))
+ (format out "~A~%" (truncate (funcall op 1 -1)))
+ (format out "~A~%" (truncate (funcall op 1 1)))
+ (format out "~A~%" (truncate (funcall op 1 256)))
+ (format out "~A~%" (truncate (funcall op 1 65536)))
+ (format out "~A~%" (truncate (funcall op 1 8589934592)))
+ (format out "~A~%" (truncate (funcall op 1 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op 256 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op 256 -4294967296)))
+ (format out "~A~%" (truncate (funcall op 256 -32769)))
+ (format out "~A~%" (truncate (funcall op 256 -257)))
+ (format out "~A~%" (truncate (funcall op 256 -1)))
+ (format out "~A~%" (truncate (funcall op 256 1)))
+ (format out "~A~%" (truncate (funcall op 256 256)))
+ (format out "~A~%" (truncate (funcall op 256 65536)))
+ (format out "~A~%" (truncate (funcall op 256 8589934592)))
+ (format out "~A~%" (truncate (funcall op 256 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op 65536 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op 65536 -4294967296)))
+ (format out "~A~%" (truncate (funcall op 65536 -32769)))
+ (format out "~A~%" (truncate (funcall op 65536 -129)))
+ (format out "~A~%" (truncate (funcall op 65536 -1)))
+ (format out "~A~%" (truncate (funcall op 65536 1)))
+ (format out "~A~%" (truncate (funcall op 65536 256)))
+ (format out "~A~%" (truncate (funcall op 65536 65536)))
+ (format out "~A~%" (truncate (funcall op 65536 8589934592)))
+ (format out "~A~%" (truncate (funcall op 65536 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op 8589934592 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op 8589934592 -4294967296)))
+ (format out "~A~%" (truncate (funcall op 8589934592 -32769)))
+ (format out "~A~%" (truncate (funcall op 8589934592 -129)))
+ (format out "~A~%" (truncate (funcall op 8589934592 -1)))
+ (format out "~A~%" (truncate (funcall op 8589934592 1)))
+ (format out "~A~%" (truncate (funcall op 8589934592 256)))
+ (format out "~A~%" (truncate (funcall op 8589934592 65536)))
+ (format out "~A~%" (truncate (funcall op 8589934592 8589934592)))
+ (format out "~A~%" (truncate (funcall op 8589934592 36893488147419103232)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 -18446744073709551616)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 -4294967296)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 -32769)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 -129)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 -1)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 1)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 256)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 65536)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 8589934592)))
+ (format out "~A~%" (truncate (funcall op 36893488147419103232 36893488147419103232)))))
diff --git a/test/ic3/integer.out.expected b/test/ic3/integer.out.expected
index 867bfb3..ee15e01 100644
--- a/test/ic3/integer.out.expected
+++ b/test/ic3/integer.out.expected
@@ -370,98 +370,98 @@
1361129467683753853853498429727072845824
1
4294967296
-18446744073709551616/32769
-18446744073709551616/129
+562932774076400
+142998016075267841
18446744073709551616
-18446744073709551616
-72057594037927936
-281474976710656
-2147483648
--1/2
-1/4294967296
+0
+0
1
-4294967296/32769
-4294967296/129
+131068
+33294320
4294967296
-4294967296
-16777216
-65536
--1/2
--1/8589934592
-32769/18446744073709551616
-32769/4294967296
+0
+0
+0
+0
1
-10923/43
+254
32769
-32769
--32769/256
--32769/65536
--32769/8589934592
--32769/36893488147419103232
-129/18446744073709551616
-129/4294967296
-43/10923
+-128
+0
+0
+0
+0
+0
+0
1
129
-129
--129/256
--129/65536
--129/8589934592
--129/36893488147419103232
-1/18446744073709551616
-1/4294967296
-1/32769
-1/129
+0
+0
+0
+0
+0
+0
+0
+0
1
-1
--1/256
--1/65536
--1/8589934592
--1/36893488147419103232
--1/18446744073709551616
--1/4294967296
--1/32769
--1/129
+0
+0
+0
+0
+0
+0
+0
+0
-1
1
-1/256
-1/65536
-1/8589934592
-1/36893488147419103232
--1/72057594037927936
--1/16777216
--256/32769
--256/257
+0
+0
+0
+0
+0
+0
+0
+0
-256
256
1
-1/256
-1/33554432
-1/144115188075855872
--1/281474976710656
--1/65536
--65536/32769
--65536/129
+0
+0
+0
+0
+0
+-1
+-508
-65536
65536
256
1
-1/131072
-1/562949953421312
--1/2147483648
+0
+0
+0
-2
--8589934592/32769
--8589934592/129
+-262136
+-66588640
-8589934592
8589934592
33554432
131072
1
-1/4294967296
+0
-2
-8589934592
--36893488147419103232/32769
--36893488147419103232/129
+-1125865548152800
+-285996032150535683
-36893488147419103232
36893488147419103232
144115188075855872