@@ -288,8 +288,22 @@ mod aot {
288288 // }
289289 // self.page_indices_since_checkpoint.push(page_id);
290290
291- // Start with `ptr_reg = index`
292- asm_str += & format ! ( " push {ptr_reg}\n " ) ;
291+ // Append page_id to page_indices_since_checkpoint
292+ asm_str += & format ! (
293+ " mov {reg1}, [{REG_EXEC_STATE_PTR} + {page_indices_since_checkpoint_len_offset}]\n "
294+ ) ;
295+ asm_str += & format ! (
296+ " mov {reg2}, [{REG_EXEC_STATE_PTR} + {page_indices_since_checkpoint_ptr_offset}]\n "
297+ ) ;
298+ let ptr_reg_32 = convert_x86_reg ( ptr_reg, Width :: W32 ) . ok_or_else ( || {
299+ AotError :: Other ( format ! ( "unsupported ptr_reg for 32-bit store: {ptr_reg}" ) )
300+ } ) ?;
301+ asm_str += & format ! ( " mov dword ptr [{reg2} + {reg1} * 4], {ptr_reg_32}\n " ) ;
302+ asm_str += & format ! ( " add {reg1}, 1\n " ) ;
303+ asm_str += & format ! (
304+ " mov [{REG_EXEC_STATE_PTR} + {page_indices_since_checkpoint_len_offset}], {reg1}\n "
305+ ) ;
306+
293307 // `reg1 = word_index`
294308 asm_str += & format ! ( " mov {reg1}, {ptr_reg}\n " ) ;
295309 asm_str += & format ! ( " shr {reg1}, 6\n " ) ;
@@ -322,22 +336,6 @@ mod aot {
322336 // self.addr_space_access_count[address_space] += 1;
323337 asm_str += & format ! ( " add dword ptr [{reg1} + {address_space} * 4], 1\n " ) ;
324338 asm_str += & format ! ( "{inserted_label}:\n " ) ;
325- // Append page_id to page_indices_since_checkpoint
326- asm_str += & format ! ( " pop {ptr_reg}\n " ) ;
327- asm_str += & format ! (
328- " mov {reg1}, [{REG_EXEC_STATE_PTR} + {page_indices_since_checkpoint_len_offset}]\n "
329- ) ;
330- asm_str += & format ! (
331- " mov {reg2}, [{REG_EXEC_STATE_PTR} + {page_indices_since_checkpoint_ptr_offset}]\n "
332- ) ;
333- let ptr_reg_32 = convert_x86_reg ( ptr_reg, Width :: W32 ) . ok_or_else ( || {
334- AotError :: Other ( format ! ( "unsupported ptr_reg for 32-bit store: {ptr_reg}" ) )
335- } ) ?;
336- asm_str += & format ! ( " mov dword ptr [{reg2} + {reg1} * 4], {ptr_reg_32}\n " ) ;
337- asm_str += & format ! ( " add {reg1}, 1\n " ) ;
338- asm_str += & format ! (
339- " mov [{REG_EXEC_STATE_PTR} + {page_indices_since_checkpoint_len_offset}], {reg1}\n "
340- ) ;
341339
342340 Ok ( asm_str)
343341 }
0 commit comments