| ... | @@ -1236,7 +1236,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) { | ... | @@ -1236,7 +1236,7 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) { |
| 1236 | | 1236 | |
| 1237 | LLVMTypeRef usize_type_ref = g->builtin_types.entry_usize->type_ref; | 1237 | LLVMTypeRef usize_type_ref = g->builtin_types.entry_usize->type_ref; |
| 1238 | | 1238 | |
| 1239 | // stack_trace.instruction_addresses[stack_trace.index % stack_trace.instruction_addresses.len] = return_address; | 1239 | // stack_trace.instruction_addresses[stack_trace.index & (stack_trace.instruction_addresses.len - 1)] = return_address; |
| 1240 | | 1240 | |
| 1241 | LLVMValueRef err_ret_trace_ptr = LLVMGetParam(fn_val, 0); | 1241 | LLVMValueRef err_ret_trace_ptr = LLVMGetParam(fn_val, 0); |
| 1242 | LLVMValueRef address_value = LLVMGetParam(fn_val, 1); | 1242 | LLVMValueRef address_value = LLVMGetParam(fn_val, 1); |
| ... | @@ -1254,9 +1254,10 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) { | ... | @@ -1254,9 +1254,10 @@ static LLVMValueRef get_add_error_return_trace_addr_fn(CodeGen *g) { |
| 1254 | | 1254 | |
| 1255 | LLVMValueRef len_value = gen_load_untyped(g, len_field_ptr, 0, false, ""); | 1255 | LLVMValueRef len_value = gen_load_untyped(g, len_field_ptr, 0, false, ""); |
| 1256 | LLVMValueRef index_val = gen_load_untyped(g, index_field_ptr, 0, false, ""); | 1256 | LLVMValueRef index_val = gen_load_untyped(g, index_field_ptr, 0, false, ""); |
| 1257 | LLVMValueRef modded_val = LLVMBuildURem(g->builder, index_val, len_value, ""); | 1257 | LLVMValueRef len_val_minus_one = LLVMBuildSub(g->builder, len_value, LLVMConstInt(usize_type_ref, 1, false), ""); |
| | 1258 | LLVMValueRef masked_val = LLVMBuildAnd(g->builder, index_val, len_val_minus_one, ""); |
| 1258 | LLVMValueRef address_indices[] = { | 1259 | LLVMValueRef address_indices[] = { |
| 1259 | modded_val, | 1260 | masked_val, |
| 1260 | }; | 1261 | }; |
| 1261 | | 1262 | |
| 1262 | LLVMValueRef ptr_value = gen_load_untyped(g, ptr_field_ptr, 0, false, ""); | 1263 | LLVMValueRef ptr_value = gen_load_untyped(g, ptr_field_ptr, 0, false, ""); |