| ... | ... | @@ -28417,6 +28417,7 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou |
| 28417 | 28417 | } |
| 28418 | 28418 | BigInt big_int; |
| 28419 | 28419 | bigint_read_twos_complement(&big_int, buf + offset, big_int_byte_count * 8, is_big_endian, false); |
| 28420 | uint64_t bit_offset = 0; |
| 28420 | 28421 | while (src_i < src_field_count) { |
| 28421 | 28422 | TypeStructField *field = val->type->data.structure.fields[src_i]; |
| 28422 | 28423 | src_assert(field->gen_index != SIZE_MAX, source_node); |
| ... | ... | @@ -28429,7 +28430,11 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou |
| 28429 | 28430 | |
| 28430 | 28431 | BigInt child_val; |
| 28431 | 28432 | if (is_big_endian) { |
| 28432 | | zig_panic("TODO buf_read_value_bytes packed struct big endian"); |
| 28433 | BigInt packed_bits_size_bi; |
| 28434 | bigint_init_unsigned(&packed_bits_size_bi, big_int_byte_count * 8 - packed_bits_size - bit_offset); |
| 28435 | BigInt tmp; |
| 28436 | bigint_shr(&tmp, &big_int, &packed_bits_size_bi); |
| 28437 | bigint_truncate(&child_val, &tmp, packed_bits_size, false); |
| 28433 | 28438 | } else { |
| 28434 | 28439 | BigInt packed_bits_size_bi; |
| 28435 | 28440 | bigint_init_unsigned(&packed_bits_size_bi, packed_bits_size); |
| ... | ... | @@ -28439,11 +28444,12 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou |
| 28439 | 28444 | big_int = tmp; |
| 28440 | 28445 | } |
| 28441 | 28446 | |
| 28442 | | bigint_write_twos_complement(&child_val, child_buf, big_int_byte_count * 8, is_big_endian); |
| 28447 | bigint_write_twos_complement(&child_val, child_buf, packed_bits_size, is_big_endian); |
| 28443 | 28448 | if ((err = buf_read_value_bytes(ira, codegen, source_node, child_buf, field_val))) { |
| 28444 | 28449 | return err; |
| 28445 | 28450 | } |
| 28446 | 28451 | |
| 28452 | bit_offset += packed_bits_size; |
| 28447 | 28453 | src_i += 1; |
| 28448 | 28454 | } |
| 28449 | 28455 | offset += big_int_byte_count; |