@@ -306,6 +306,8 @@ module Update_kind = struct
306
306
type kind =
307
307
| Pointer
308
308
| Immediate
309
+ | Naked_int8
310
+ | Naked_int16
309
311
| Naked_int32
310
312
| Naked_int64
311
313
| Naked_float
@@ -329,8 +331,8 @@ module Update_kind = struct
329
331
330
332
let field_size_in_words t =
331
333
match t.kind with
332
- | Pointer | Immediate | Naked_int32 | Naked_int64 | Naked_float
333
- | Naked_float32 ->
334
+ | Pointer | Immediate | Naked_int8 | Naked_int16 | Naked_int32 | Naked_int64
335
+ | Naked_float | Naked_float32 ->
334
336
1
335
337
| Naked_vec128 -> 2
336
338
@@ -348,6 +350,10 @@ module Update_kind = struct
348
350
349
351
let naked_vec128s = { kind = Naked_vec128 ; stride = 16 }
350
352
353
+ let naked_int8_fields = { kind = Naked_int8 ; stride = Arch. size_addr }
354
+
355
+ let naked_int16_fields = { kind = Naked_int16 ; stride = Arch. size_addr }
356
+
351
357
let naked_int32_fields = { kind = Naked_int32 ; stride = Arch. size_addr }
352
358
353
359
let naked_float32_fields = { kind = Naked_float32 ; stride = Arch. size_addr }
@@ -372,8 +378,8 @@ let make_update env res dbg ({ kind; stride } : Update_kind.t) ~symbol var
372
378
| Immediate ->
373
379
(* See [caml_initialize]; we can avoid this function in this case. *)
374
380
None
375
- | Naked_int32 | Naked_int64 | Naked_float | Naked_float32 | Naked_vec128
376
- ->
381
+ | Naked_int8 | Naked_int16 | Naked_int32 | Naked_int64 | Naked_float
382
+ | Naked_float32 | Naked_vec128 ->
377
383
(* The GC never sees these fields, so we can avoid using
378
384
[caml_initialize]. This is important as it significantly reduces
379
385
the complexity of the statically-allocated inconstant unboxed int32
@@ -389,6 +395,11 @@ let make_update env res dbg ({ kind; stride } : Update_kind.t) ~symbol var
389
395
match kind with
390
396
| Pointer -> Word_val
391
397
| Immediate -> Word_int
398
+ | Naked_int8 | Naked_int16 ->
399
+ (* CR layouts v5.1: we only support small integers in being
400
+ sign-extended in word fields *)
401
+ assert (stride = Arch. size_addr);
402
+ Word_int
392
403
| Naked_int32 ->
393
404
(* Cmm expressions representing int32 values are always sign extended.
394
405
By using [Word_int] in the "fields" cases (see [Update_kind],
0 commit comments