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

Reply via email to