S32
S32 High;
typedef S32 *PS32;
S32(fccp, fcc_fpsmr, FCC_PSMR_PRO);
S32(fccp, fcc_fpsmr, FCC_PSMR_RMII);
S32(fccp, fcc_fpsmr, FCC_PSMR_FDE | FCC_PSMR_LPB);
S32(fccp, fcc_gfmr, FCC_GFMR_ENR | FCC_GFMR_ENT);
S32(fccp, fcc_gfmr, FCC_GFMR_ENT);
S32(sccp, scc_gsmrl, SCC_GSMRL_ENR | SCC_GSMRL_ENT);
C(S32, "s32"), \
return DeBruijnBytePos[((U32) ((val & -(S32) val) * 0x077CB531U)) >> 27];
case S32: return "s32";
case S32: return true;
{"smin32=", ®->r[S32].a, (u32)S32_MIN, true},
{"smax32=", ®->r[S32].b, (u32)S32_MAX, true},
case U32: return S32;
case S32: return S32;
needs_two_arcs(U32, s->r[U32], S32, s->r[S32]);
case S32: return U32;
case S32: return (s32)x >= SNUM_MIN_DECIMAL && (s32)x <= SNUM_MAX_DECIMAL;
.init_subregs = (init_t == U32 || init_t == S32),
.setup_subregs = (init_t == U32 || init_t == S32),
.setup_signed = (init_t == S64 || init_t == S32),
.compare_subregs = (cond_t == U32 || cond_t == S32),
.compare_signed = (cond_t == S64 || cond_t == S32),
case S32: return snappendf(sb, "%d", (s32)x);
snprintf_num(S32, sb2, ctx->ssubvals[i]);
snprintf_range(S32, sb2, range(S32, ctx->ssubvals[i], ctx->ssubvals[j]));
ctx->ssubranges[cnt] = range(S32, ctx->ssubvals[i], ctx->ssubvals[j]);
case S32:
case S32:
void test_reg_bounds_gen_consts_u64_s32(void) { validate_gen_range_vs_const_64(U64, S32); }
void test_reg_bounds_gen_consts_s64_s32(void) { validate_gen_range_vs_const_64(S64, S32); }
void test_reg_bounds_gen_consts_u32_s32(void) { validate_gen_range_vs_const_32(U32, S32); }
void test_reg_bounds_gen_consts_s32_u64(void) { validate_gen_range_vs_const_32(S32, U64); }
void test_reg_bounds_gen_consts_s32_s64(void) { validate_gen_range_vs_const_32(S32, S64); }
void test_reg_bounds_gen_consts_s32_u32(void) { validate_gen_range_vs_const_32(S32, U32); }
void test_reg_bounds_gen_consts_s32_s32(void) { validate_gen_range_vs_const_32(S32, S32); }
void test_reg_bounds_gen_ranges_u64_s32(void) { validate_gen_range_vs_range(U64, S32); }
void test_reg_bounds_gen_ranges_s64_s32(void) { validate_gen_range_vs_range(S64, S32); }
void test_reg_bounds_gen_ranges_u32_s32(void) { validate_gen_range_vs_range(U32, S32); }
void test_reg_bounds_gen_ranges_s32_u64(void) { validate_gen_range_vs_range(S32, U64); }
void test_reg_bounds_gen_ranges_s32_s64(void) { validate_gen_range_vs_range(S32, S64); }
void test_reg_bounds_gen_ranges_s32_u32(void) { validate_gen_range_vs_range(S32, U32); }
void test_reg_bounds_gen_ranges_s32_s32(void) { validate_gen_range_vs_range(S32, S32); }
void test_reg_bounds_rand_consts_u64_s32(void) { validate_rand_ranges(U64, S32, true /* const */); }
void test_reg_bounds_rand_consts_s64_s32(void) { validate_rand_ranges(S64, S32, true /* const */); }
void test_reg_bounds_rand_consts_u32_s32(void) { validate_rand_ranges(U32, S32, true /* const */); }
void test_reg_bounds_rand_consts_s32_u64(void) { validate_rand_ranges(S32, U64, true /* const */); }
void test_reg_bounds_rand_consts_s32_s64(void) { validate_rand_ranges(S32, S64, true /* const */); }
void test_reg_bounds_rand_consts_s32_u32(void) { validate_rand_ranges(S32, U32, true /* const */); }
void test_reg_bounds_rand_consts_s32_s32(void) { validate_rand_ranges(S32, S32, true /* const */); }
void test_reg_bounds_rand_ranges_u64_s32(void) { validate_rand_ranges(U64, S32, false /* range */); }
void test_reg_bounds_rand_ranges_s64_s32(void) { validate_rand_ranges(S64, S32, false /* range */); }
void test_reg_bounds_rand_ranges_u32_s32(void) { validate_rand_ranges(U32, S32, false /* range */); }
void test_reg_bounds_rand_ranges_s32_u64(void) { validate_rand_ranges(S32, U64, false /* range */); }
void test_reg_bounds_rand_ranges_s32_s64(void) { validate_rand_ranges(S32, S64, false /* range */); }
void test_reg_bounds_rand_ranges_s32_u32(void) { validate_rand_ranges(S32, U32, false /* range */); }
void test_reg_bounds_rand_ranges_s32_s32(void) { validate_rand_ranges(S32, S32, false /* range */); }
{U64, S32, {0, 1}, {1, 0x80000000}},
{U64, S32, {0xfffffffe00000001, 0xffffffff00000000}, {S64_MIN, S64_MIN}},
{U64, S32, {0, 0xffffffff00000000ULL}, {0, 0}},
{U64, S32, {0, 0x0ffffffffULL}, {0, 0}},
{U64, S32, {0, 0x100000000ULL}, {0, 0}},
{U64, S32, {0, 0x100000001ULL}, {0, 0}},
{U64, S32, {0, 0x180000000ULL}, {0, 0}},
{U64, S32, {0, 0x17fffffffULL}, {0, 0}},
{U64, S32, {0, 0x180000001ULL}, {0, 0}},
{U32, S32, {0, U32_MAX}, {U32_MAX, U32_MAX}},
{S32, U64, {(u32)S32_MIN, (u32)S32_MIN}, {(u32)(s32)-255, 0}},
{S32, S64, {(u32)S32_MIN, (u32)(s32)-255}, {(u32)(s32)-2, 0}},
{S32, S64, {0, 1}, {(u32)S32_MIN, (u32)S32_MIN}},
{S32, U32, {(u32)S32_MIN, (u32)S32_MIN}, {(u32)S32_MIN, (u32)S32_MIN}},
{S32, U32, {(u32)S32_MIN, 0}, {0, 0}},
{S32, U32, {(u32)S32_MIN, 0}, {(u32)S32_MIN, (u32)S32_MIN}},
{S32, U32, {(u32)S32_MIN, S32_MAX}, {S32_MAX, S32_MAX}},
[S32] = { (u64)(u32)S32_MIN, (u64)(u32)S32_MAX },
case S32: return unkn[S32];
case S32: return (struct range){ (u32)(s32)a, (u32)(s32)b };
return range(S32, a, b);
return range(S32, a, b);
return unkn[S32];
case S32:
case S32:
case S32:
case S32:
case S32: return range_cast_s32(to_t, from);
case S32: return upper32(x) == 0;
case S32: return (s32)x.a <= (s32)x.b;
if (x_t == S64 && y_t == S32 && y_cast.a <= S32_MAX && y_cast.b <= S32_MAX &&
case S32: { range_canbe(s32); }
enum num_t { U64, first_t = U64, U32, S64, S32, last_t = S32 };
case S32: return (s32)x < (s32)y ? (s32)x : (s32)y;
case S32: return (s32)x > (s32)y ? (u32)(s32)x : (u32)(s32)y;
br = range_branch_taken_op(S32, x->r[S32], y->r[S32], op);
case S32: return (u32)(s32)x;
if (rv == strlen(S32)) {
assert(memcmp(buf, S32, strlen(S32)) == 0);