hi
In file ooo-exec.cpp:882 virtpage += (op_size - 1),
I think maybe it should be virtpage = state.virtaddr+(op_size-1) .
Variable /virtpage/ is set to the "exception address" according to the
comment,which should be /state.virtaddr+(op_size-1)/ ,the last byte's
address of the ld/st operation that crosses the page boundary.
Consider this scenario,a* load */word/*(2Byte) *uop to virtual address
*TARGET_PAGE_SIZE-1* with *uop.cond==LDST_ALIGN_LO*.
call addrgen():
* 833 virtpage=(TARGET_PAGE_SIZE-1)&~7;
* 870 if unlikely (page_crossing && !annul)
{
// page_crossing is 1
* 873 ctx.check_and_translate(state.virtaddr + (op_size -
1), uop.size - op_size, st, //state.virtaddr + (op_size - 1) is
on the second page
* 875 if(exception2 != 0)
{
//page fault occured
* 882 virtpage += (op_size - 1);
//virtpage is set to (TARGET_PAGE_SIZE-1)&~7+1 which is /*not*/ on
the second page
_______________________________________________
http://www.marss86.org
Marss86-Devel mailing list
[email protected]
https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel