authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-04-04 14:06:32+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2020-04-04 14:06:32+02:00
log084c62f5d1fd6bf5e8df84e0cc87408ae38ca48f
tree3cebf04ede0f66c655e18a29b647ca4b809a01f6
parente89c42655cf9851cdf02065bc75cda0e27884966

stage1: Fix serialization of ZigValue on BE machines


1 files changed, 8 insertions(+), 2 deletions(-)

src/ir.cpp+8-2
...@@ -28417,6 +28417,7 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou...@@ -28417,6 +28417,7 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou
28417 }28417 }
28418 BigInt big_int;28418 BigInt big_int;
28419 bigint_read_twos_complement(&big_int, buf + offset, big_int_byte_count * 8, is_big_endian, false);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 while (src_i < src_field_count) {28421 while (src_i < src_field_count) {
28421 TypeStructField *field = val->type->data.structure.fields[src_i];28422 TypeStructField *field = val->type->data.structure.fields[src_i];
28422 src_assert(field->gen_index != SIZE_MAX, source_node);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,7 +28430,11 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou
2842928430
28430 BigInt child_val;28431 BigInt child_val;
28431 if (is_big_endian) {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 } else {28438 } else {
28434 BigInt packed_bits_size_bi;28439 BigInt packed_bits_size_bi;
28435 bigint_init_unsigned(&packed_bits_size_bi, packed_bits_size);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,11 +28444,12 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou
28439 big_int = tmp;28444 big_int = tmp;
28440 }28445 }
2844128446
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 if ((err = buf_read_value_bytes(ira, codegen, source_node, child_buf, field_val))) {28448 if ((err = buf_read_value_bytes(ira, codegen, source_node, child_buf, field_val))) {
28444 return err;28449 return err;
28445 }28450 }
2844628451
28452 bit_offset += packed_bits_size;
28447 src_i += 1;28453 src_i += 1;
28448 }28454 }
28449 offset += big_int_byte_count;28455 offset += big_int_byte_count;