@@ -17,7 +17,7 @@ impl Address for VirtAddrSv48 {
1717 self . 0 . try_into ( ) . unwrap ( )
1818 }
1919 fn page_number ( & self ) -> usize {
20- self . 0 . get_bits ( 12 ..64 ) . try_into ( ) . unwrap ( )
20+ self . 0 . get_bits ( 12 ..48 ) . try_into ( ) . unwrap ( )
2121 }
2222 fn page_offset ( & self ) -> usize {
2323 self . 0 . get_bits ( 0 ..12 ) as usize
@@ -54,18 +54,18 @@ impl AddressL4 for VirtAddrSv48 {
5454 let p2_index = p2_index as u64 ;
5555 let p1_index = p1_index as u64 ;
5656 let offset = offset as u64 ;
57- assert ! ( p4_index. get_bits( 10 ..) == 0 , "p4_index exceeding 9 bits" ) ;
58- assert ! ( p3_index. get_bits( 10 ..) == 0 , "p3_index exceeding 9 bits" ) ;
59- assert ! ( p2_index. get_bits( 10 ..) == 0 , "p2_index exceeding 9 bits" ) ;
60- assert ! ( p1_index. get_bits( 10 ..) == 0 , "p1_index exceeding 9 bits" ) ;
57+ assert ! ( p4_index. get_bits( 9 ..) == 0 , "p4_index exceeding 9 bits" ) ;
58+ assert ! ( p3_index. get_bits( 9 ..) == 0 , "p3_index exceeding 9 bits" ) ;
59+ assert ! ( p2_index. get_bits( 9 ..) == 0 , "p2_index exceeding 9 bits" ) ;
60+ assert ! ( p1_index. get_bits( 9 ..) == 0 , "p1_index exceeding 9 bits" ) ;
6161 assert ! ( offset. get_bits( 12 ..) == 0 , "offset exceeding 12 bits" ) ;
6262 let mut addr = ( p4_index << 12 << 9 << 9 << 9 )
6363 | ( p3_index << 12 << 9 << 9 )
6464 | ( p2_index << 12 << 9 )
6565 | ( p1_index << 12 )
6666 | offset;
6767 if addr. get_bit ( 47 ) {
68- addr. set_bits ( 48 ..64 , 0xFFFF ) ;
68+ addr. set_bits ( 48 ..64 , ( 1 << ( 64 - 48 ) ) - 1 ) ;
6969 } else {
7070 addr. set_bits ( 48 ..64 , 0x0000 ) ;
7171 }
@@ -96,7 +96,10 @@ impl Address for PhysAddrSv48 {
9696impl AddressX64 for VirtAddrSv48 {
9797 fn new_u64 ( addr : u64 ) -> Self {
9898 if addr. get_bit ( 47 ) {
99- assert ! ( addr. get_bits( 48 ..64 ) == 0xFFFF , "va 48..64 is not sext" ) ;
99+ assert ! (
100+ addr. get_bits( 48 ..64 ) == ( 1 << ( 64 - 48 ) ) - 1 ,
101+ "va 48..64 is not sext"
102+ ) ;
100103 } else {
101104 assert ! ( addr. get_bits( 48 ..64 ) == 0x0000 , "va 48..64 is not sext" ) ;
102105 }
0 commit comments