diff --git a/libkc3/tag_mod.c b/libkc3/tag_mod.c
index 0323b31..a14c8ce 100644
--- a/libkc3/tag_mod.c
+++ b/libkc3/tag_mod.c
@@ -140,77 +140,77 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&a->data.integer, &b->data.integer,
&dest->data.integer);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8:
integer_init_s8(&tmp, b->data.s8);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_s8(dest, integer_to_s8(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S16:
integer_init_s16(&tmp, b->data.s16);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_s16(dest, integer_to_s16(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S32:
integer_init_s32(&tmp, b->data.s32);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_s32(dest, integer_to_s32(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S64:
integer_init_s64(&tmp, b->data.s64);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_s64(dest, integer_to_s64(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_SW:
integer_init_sw(&tmp, b->data.sw);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_sw(dest, integer_to_sw(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U8:
integer_init_u8(&tmp, b->data.u8);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_u8(dest, integer_to_u8(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U16:
integer_init_u16(&tmp, b->data.u16);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_u16(dest, integer_to_u16(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U32:
integer_init_u32(&tmp, b->data.u32);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_u32(dest, integer_to_u32(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U64:
integer_init_u64(&tmp, b->data.u64);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_u64(dest, integer_to_u64(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_UW:
integer_init_uw(&tmp, b->data.uw);
integer_mod(&a->data.integer, &tmp, &tmp2);
tag_init_uw(dest, integer_to_uw(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -227,34 +227,42 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8:
- return tag_init_s8(dest, a->data.s8 % b->data.s8);
+ tag_init_s8(dest, a->data.s8 % b->data.s8);
+ return tag_integer_reduce(dest);
case TAG_S16:
- return tag_init_s8(dest, a->data.s8 % b->data.s16);
+ tag_init_s8(dest, a->data.s8 % b->data.s16);
+ return tag_integer_reduce(dest);
case TAG_S32:
- return tag_init_s8(dest, a->data.s8 % b->data.s32);
+ tag_init_s8(dest, a->data.s8 % b->data.s32);
+ return tag_integer_reduce(dest);
case TAG_S64:
- return tag_init_s8(dest, a->data.s8 % b->data.s64);
+ tag_init_s8(dest, a->data.s8 % b->data.s64);
+ return tag_integer_reduce(dest);
case TAG_SW:
- return tag_init_s8(dest, a->data.s8 % b->data.sw);
+ tag_init_s8(dest, a->data.s8 % b->data.sw);
+ return tag_integer_reduce(dest);
case TAG_U8: {
s16 i = a->data.s8 % (s16) b->data.u8;
if (i < 0)
i += b->data.u8;
- return tag_init_u8(dest, i);
+ tag_init_u8(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U16: {
s32 i = a->data.s8 % (s32) b->data.u16;
if (i < 0)
i += b->data.u16;
- return tag_init_u16(dest, i);
+ tag_init_u16(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U32: {
s64 i = a->data.s8 % (s64) b->data.u32;
if (i < 0)
i += b->data.u32;
- return tag_init_u32(dest, i);
+ tag_init_u32(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U64:
integer_init_s8(&tmp, a->data.s8);
@@ -263,7 +271,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_UW:
integer_init_s8(&tmp, a->data.s8);
integer_init_uw(&tmp2, b->data.uw);
@@ -271,7 +279,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -288,34 +296,42 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8:
- return tag_init_s8(dest, a->data.s16 % b->data.s8);
+ tag_init_s8(dest, a->data.s16 % b->data.s8);
+ return tag_integer_reduce(dest);
case TAG_S16:
- return tag_init_s16(dest, a->data.s16 % b->data.s16);
+ tag_init_s16(dest, a->data.s16 % b->data.s16);
+ return tag_integer_reduce(dest);
case TAG_S32:
- return tag_init_s16(dest, a->data.s16 % b->data.s32);
+ tag_init_s16(dest, a->data.s16 % b->data.s32);
+ return tag_integer_reduce(dest);
case TAG_S64:
- return tag_init_s16(dest, a->data.s16 % b->data.s64);
+ tag_init_s16(dest, a->data.s16 % b->data.s64);
+ return tag_integer_reduce(dest);
case TAG_SW:
- return tag_init_s16(dest, a->data.s16 % b->data.sw);
+ tag_init_s16(dest, a->data.s16 % b->data.sw);
+ return tag_integer_reduce(dest);
case TAG_U8: {
s16 i = a->data.s16 % (s16) b->data.u8;
if (i < 0)
i += b->data.u8;
- return tag_init_u8(dest, i);
+ tag_init_u8(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U16: {
s32 i = a->data.s16 % (s32) b->data.u16;
if (i < 0)
i += b->data.u16;
- return tag_init_u16(dest, i);
+ tag_init_u16(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U32: {
s64 i = a->data.s16 % (s64) b->data.u32;
if (i < 0)
i += b->data.u32;
- return tag_init_u32(dest, i);
+ tag_init_u32(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U64:
integer_init_s16(&tmp, a->data.s16);
@@ -324,7 +340,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_UW:
integer_init_s16(&tmp, a->data.s16);
integer_init_uw(&tmp2, b->data.uw);
@@ -332,7 +348,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -349,34 +365,42 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8:
- return tag_init_s8(dest, a->data.s32 % b->data.s8);
+ tag_init_s8(dest, a->data.s32 % b->data.s8);
+ return tag_integer_reduce(dest);
case TAG_S16:
- return tag_init_s16(dest, a->data.s32 % b->data.s16);
+ tag_init_s16(dest, a->data.s32 % b->data.s16);
+ return tag_integer_reduce(dest);
case TAG_S32:
- return tag_init_s32(dest, a->data.s32 % b->data.s32);
+ tag_init_s32(dest, a->data.s32 % b->data.s32);
+ return tag_integer_reduce(dest);
case TAG_S64:
- return tag_init_s64(dest, a->data.s32 % b->data.s64);
+ tag_init_s64(dest, a->data.s32 % b->data.s64);
+ return tag_integer_reduce(dest);
case TAG_SW:
- return tag_init_sw(dest, a->data.s32 % b->data.sw);
+ tag_init_sw(dest, a->data.s32 % b->data.sw);
+ return tag_integer_reduce(dest);
case TAG_U8: {
s16 i = a->data.s32 % (s16) b->data.u8;
if (i < 0)
i += b->data.u8;
- return tag_init_u8(dest, i);
+ tag_init_u8(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U16: {
s32 i = a->data.s32 % (s32) b->data.u16;
if (i < 0)
i += b->data.u16;
- return tag_init_u16(dest, i);
+ tag_init_u16(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U32: {
s64 i = a->data.s32 % (s64) b->data.u32;
if (i < 0)
i += b->data.u32;
- return tag_init_u32(dest, i);
+ tag_init_u32(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U64:
integer_init_s32(&tmp, a->data.s32);
@@ -385,7 +409,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_UW:
integer_init_s32(&tmp, a->data.s32);
integer_init_uw(&tmp2, b->data.uw);
@@ -393,7 +417,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -410,34 +434,42 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8:
- return tag_init_s8(dest, a->data.s64 % b->data.s8);
+ tag_init_s8(dest, a->data.s64 % b->data.s8);
+ return tag_integer_reduce(dest);
case TAG_S16:
- return tag_init_s16(dest, a->data.s64 % b->data.s16);
+ tag_init_s16(dest, a->data.s64 % b->data.s16);
+ return tag_integer_reduce(dest);
case TAG_S32:
- return tag_init_s32(dest, a->data.s64 % b->data.s32);
+ tag_init_s32(dest, a->data.s64 % b->data.s32);
+ return tag_integer_reduce(dest);
case TAG_S64:
- return tag_init_s64(dest, a->data.s64 % b->data.s64);
+ tag_init_s64(dest, a->data.s64 % b->data.s64);
+ return tag_integer_reduce(dest);
case TAG_SW:
- return tag_init_sw(dest, a->data.s64 % b->data.sw);
+ tag_init_sw(dest, a->data.s64 % b->data.sw);
+ return tag_integer_reduce(dest);
case TAG_U8: {
s16 i = a->data.s64 % b->data.u8;
if (i < 0)
i += b->data.u8;
- return tag_init_u8(dest, i);
+ tag_init_u8(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U16: {
s32 i = a->data.s64 % b->data.u16;
if (i < 0)
i += b->data.u16;
- return tag_init_u16(dest, i);
+ tag_init_u16(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U32: {
s64 i = a->data.s64 % b->data.u32;
if (i < 0)
i += b->data.u32;
- return tag_init_u32(dest, i);
+ tag_init_u32(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U64:
integer_init_s64(&tmp, a->data.s64);
@@ -446,7 +478,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_UW:
integer_init_s64(&tmp, a->data.s64);
integer_init_uw(&tmp2, b->data.uw);
@@ -454,7 +486,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -472,34 +504,42 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
tag_init_sw(dest, integer_to_sw(&tmp2));
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8:
- return tag_init_s8(dest, a->data.sw % b->data.s8);
+ tag_init_s8(dest, a->data.sw % b->data.s8);
+ return tag_integer_reduce(dest);
case TAG_S16:
- return tag_init_s16(dest, a->data.sw % b->data.s16);
+ tag_init_s16(dest, a->data.sw % b->data.s16);
+ return tag_integer_reduce(dest);
case TAG_S32:
- return tag_init_s32(dest, a->data.sw % b->data.s32);
+ tag_init_s32(dest, a->data.sw % b->data.s32);
+ return tag_integer_reduce(dest);
case TAG_S64:
- return tag_init_sw(dest, a->data.sw % b->data.s64);
+ tag_init_sw(dest, a->data.sw % b->data.s64);
+ return tag_integer_reduce(dest);
case TAG_SW:
- return tag_init_sw(dest, a->data.sw % b->data.sw);
+ tag_init_sw(dest, a->data.sw % b->data.sw);
+ return tag_integer_reduce(dest);
case TAG_U8: {
s16 i = a->data.sw % b->data.u8;
if (i < 0)
i += b->data.u8;
- return tag_init_u8(dest, i);
+ tag_init_u8(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U16: {
s32 i = a->data.sw % b->data.u16;
if (i < 0)
i += b->data.u16;
- return tag_init_u16(dest, i);
+ tag_init_u16(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U32: {
s64 i = a->data.sw % b->data.u32;
if (i < 0)
i += b->data.u32;
- return tag_init_u32(dest, i);
+ tag_init_u32(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_U64:
integer_init_sw(&tmp, a->data.sw);
@@ -508,7 +548,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_UW:
integer_init_sw(&tmp, a->data.sw);
integer_init_uw(&tmp2, b->data.uw);
@@ -516,7 +556,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -533,24 +573,27 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8: {
s16 i = a->data.u8 % b->data.s8;
if (b->data.s8 < 0 && i > 0)
i += b->data.s8;
- return tag_init_s8(dest, i);
+ tag_init_s8(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S16: {
s32 i = a->data.u8 % b->data.s16;
if (b->data.s16 < 0 && i > 0)
i += b->data.s16;
- return tag_init_s16(dest, i);
+ tag_init_s16(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S32: {
s64 i = a->data.u8 % b->data.s32;
if (b->data.s32 < 0 && i > 0)
i += b->data.s32;
- return tag_init_s32(dest, i);
+ tag_init_s32(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S64:
integer_init_u8(&tmp, a->data.u8);
@@ -559,7 +602,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_SW:
integer_init_u8(&tmp, a->data.u8);
integer_init_sw(&tmp2, b->data.sw);
@@ -567,17 +610,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U8:
- return tag_init_u8(dest, a->data.u8 % b->data.u8);
+ tag_init_u8(dest, a->data.u8 % b->data.u8);
+ return tag_integer_reduce(dest);
case TAG_U16:
- return tag_init_u8(dest, a->data.u8 % b->data.u16);
+ tag_init_u8(dest, a->data.u8 % b->data.u16);
+ return tag_integer_reduce(dest);
case TAG_U32:
- return tag_init_u8(dest, a->data.u8 % b->data.u32);
+ tag_init_u8(dest, a->data.u8 % b->data.u32);
+ return tag_integer_reduce(dest);
case TAG_U64:
- return tag_init_u8(dest, a->data.u8 % b->data.u64);
+ tag_init_u8(dest, a->data.u8 % b->data.u64);
+ return tag_integer_reduce(dest);
case TAG_UW:
- return tag_init_u8(dest, a->data.u8 % b->data.uw);
+ tag_init_u8(dest, a->data.u8 % b->data.uw);
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -594,24 +642,27 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8: {
s16 i = a->data.u16 % b->data.s8;
if (b->data.s8 < 0 && i > 0)
i += b->data.s8;
- return tag_init_s8(dest, i);
+ tag_init_s8(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S16: {
s32 i = a->data.u16 % b->data.s16;
if (b->data.s16 < 0 && i > 0)
i += b->data.s16;
- return tag_init_s16(dest, i);
+ tag_init_s16(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S32: {
s64 i = a->data.u16 % b->data.s32;
if (b->data.s32 < 0 && i > 0)
i += b->data.s32;
- return tag_init_s32(dest, i);
+ tag_init_s32(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S64:
integer_init_u16(&tmp, a->data.u16);
@@ -620,7 +671,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_SW:
integer_init_u16(&tmp, a->data.u16);
integer_init_sw(&tmp2, b->data.sw);
@@ -628,17 +679,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U8:
- return tag_init_u8(dest, a->data.u16 % b->data.u8);
+ tag_init_u8(dest, a->data.u16 % b->data.u8);
+ return tag_integer_reduce(dest);
case TAG_U16:
- return tag_init_u16(dest, a->data.u16 % b->data.u16);
+ tag_init_u16(dest, a->data.u16 % b->data.u16);
+ return tag_integer_reduce(dest);
case TAG_U32:
- return tag_init_u16(dest, a->data.u16 % b->data.u32);
+ tag_init_u16(dest, a->data.u16 % b->data.u32);
+ return tag_integer_reduce(dest);
case TAG_U64:
- return tag_init_u16(dest, a->data.u16 % b->data.u64);
+ tag_init_u16(dest, a->data.u16 % b->data.u64);
+ return tag_integer_reduce(dest);
case TAG_UW:
- return tag_init_u16(dest, a->data.u16 % b->data.uw);
+ tag_init_u16(dest, a->data.u16 % b->data.uw);
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -655,24 +711,27 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8: {
s64 i = a->data.u32 % (s64) b->data.s8;
if (b->data.s8 < 0 && i > 0)
i += b->data.s8;
- return tag_init_s8(dest, i);
+ tag_init_s8(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S16: {
s64 i = a->data.u32 % (s64) b->data.s16;
if (b->data.s16 < 0 && i > 0)
i += b->data.s16;
- return tag_init_s16(dest, i);
+ tag_init_s16(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S32: {
s64 i = a->data.u32 % (s64) b->data.s32;
if (b->data.s32 < 0 && i > 0)
i += b->data.s32;
- return tag_init_s32(dest, i);
+ tag_init_s32(dest, i);
+ return tag_integer_reduce(dest);
}
case TAG_S64:
integer_init_u32(&tmp, a->data.u32);
@@ -681,7 +740,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_SW:
integer_init_u32(&tmp, a->data.u32);
integer_init_sw(&tmp2, b->data.sw);
@@ -689,17 +748,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U8:
- return tag_init_u8(dest, a->data.u32 % b->data.u8);
+ tag_init_u8(dest, a->data.u32 % b->data.u8);
+ return tag_integer_reduce(dest);
case TAG_U16:
- return tag_init_u16(dest, a->data.u32 % b->data.u16);
+ tag_init_u16(dest, a->data.u32 % b->data.u16);
+ return tag_integer_reduce(dest);
case TAG_U32:
- return tag_init_u32(dest, a->data.u32 % b->data.u32);
+ tag_init_u32(dest, a->data.u32 % b->data.u32);
+ return tag_integer_reduce(dest);
case TAG_U64:
- return tag_init_u32(dest, a->data.u32 % b->data.u64);
+ tag_init_u32(dest, a->data.u32 % b->data.u64);
+ return tag_integer_reduce(dest);
case TAG_UW:
- return tag_init_u32(dest, a->data.u32 % b->data.uw);
+ tag_init_u32(dest, a->data.u32 % b->data.uw);
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -716,7 +780,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8:
integer_init_u64(&tmp, a->data.u64);
integer_init_s8(&tmp2, b->data.s8);
@@ -724,7 +788,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S16:
integer_init_u64(&tmp, a->data.u64);
integer_init_s16(&tmp2, b->data.s16);
@@ -732,7 +796,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S32:
integer_init_u64(&tmp, a->data.u64);
integer_init_s32(&tmp2, b->data.s32);
@@ -740,7 +804,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S64:
integer_init_u64(&tmp, a->data.u64);
integer_init_s64(&tmp2, b->data.s64);
@@ -748,7 +812,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_SW:
integer_init_u64(&tmp, a->data.u64);
integer_init_sw(&tmp2, b->data.sw);
@@ -756,17 +820,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U8:
- return tag_init_u8(dest, a->data.u64 % b->data.u8);
+ tag_init_u8(dest, a->data.u64 % b->data.u8);
+ return tag_integer_reduce(dest);
case TAG_U16:
- return tag_init_u16(dest, a->data.u64 % b->data.u16);
+ tag_init_u16(dest, a->data.u64 % b->data.u16);
+ return tag_integer_reduce(dest);
case TAG_U32:
- return tag_init_u32(dest, a->data.u64 % b->data.u32);
+ tag_init_u32(dest, a->data.u64 % b->data.u32);
+ return tag_integer_reduce(dest);
case TAG_U64:
- return tag_init_u64(dest, a->data.u64 % b->data.u64);
+ tag_init_u64(dest, a->data.u64 % b->data.u64);
+ return tag_integer_reduce(dest);
case TAG_UW:
- return tag_init_uw(dest, a->data.u64 % b->data.uw);
+ tag_init_uw(dest, a->data.u64 % b->data.uw);
+ return tag_integer_reduce(dest);
default:
goto ko;
}
@@ -783,7 +852,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
dest->type = TAG_INTEGER;
integer_mod(&tmp, &b->data.integer, &dest->data.integer);
integer_clean(&tmp);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S8:
integer_init_uw(&tmp, a->data.uw);
integer_init_s8(&tmp2, b->data.s8);
@@ -791,7 +860,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S16:
integer_init_uw(&tmp, a->data.uw);
integer_init_s16(&tmp2, b->data.s16);
@@ -799,7 +868,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S32:
integer_init_uw(&tmp, a->data.uw);
integer_init_s32(&tmp2, b->data.s32);
@@ -807,7 +876,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_S64:
integer_init_uw(&tmp, a->data.uw);
integer_init_s64(&tmp2, b->data.s64);
@@ -815,7 +884,7 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_SW:
integer_init_uw(&tmp, a->data.uw);
integer_init_sw(&tmp2, b->data.sw);
@@ -823,17 +892,22 @@ s_tag * tag_mod (const s_tag *a, const s_tag *b, s_tag *dest)
integer_mod(&tmp, &tmp2, &dest->data.integer);
integer_clean(&tmp);
integer_clean(&tmp2);
- return dest;
+ return tag_integer_reduce(dest);
case TAG_U8:
- return tag_init_u8(dest, a->data.uw % b->data.u8);
+ tag_init_u8(dest, a->data.uw % b->data.u8);
+ return tag_integer_reduce(dest);
case TAG_U16:
- return tag_init_u16(dest, a->data.uw % b->data.u16);
+ tag_init_u16(dest, a->data.uw % b->data.u16);
+ return tag_integer_reduce(dest);
case TAG_U32:
- return tag_init_u32(dest, a->data.uw % b->data.u32);
+ tag_init_u32(dest, a->data.uw % b->data.u32);
+ return tag_integer_reduce(dest);
case TAG_U64:
- return tag_init_uw(dest, a->data.uw % b->data.u64);
+ tag_init_uw(dest, a->data.uw % b->data.u64);
+ return tag_integer_reduce(dest);
case TAG_UW:
- return tag_init_uw(dest, a->data.uw % b->data.uw);
+ tag_init_uw(dest, a->data.uw % b->data.uw);
+ return tag_integer_reduce(dest);
default:
goto ko;
}