@@ -377,7 +377,7 @@ impl JitMemory {
377377 /// Bind the current location to `label`.
378378 pub fn bind_label ( & mut self , label : DestLabel ) {
379379 let page = self . page ;
380- self . labels [ label ] . loc = Some ( ( page, self . counter ) ) ;
380+ self . bind_label_with_page ( page, label ) ;
381381 }
382382
383383 pub fn bind_label_with_page ( & mut self , page : Page , label : DestLabel ) {
@@ -408,10 +408,11 @@ impl JitMemory {
408408 }
409409
410410 /// Save relocaton slot for `DestLabel`.
411- pub fn save_reloc ( & mut self , dest : DestLabel , offset : u8 ) {
411+ pub fn emit_reloc ( & mut self , dest : DestLabel , offset : u8 ) {
412412 let page = self . page ;
413413 let pos = self . counter ;
414414 let target = TargetType :: Rel { page, offset, pos } ;
415+ self . emitl ( 0 ) ;
415416 if let Some ( ( src_page, src_pos) ) = self . labels [ dest] . loc {
416417 self . write_reloc ( src_page, src_pos, target) ;
417418 } else {
@@ -420,9 +421,10 @@ impl JitMemory {
420421 }
421422
422423 /// Save relocaton slot for `DestLabel`.
423- fn save_absolute_reloc ( & mut self , page : Page , dest : DestLabel ) {
424+ fn emit_absolute_reloc ( & mut self , page : Page , dest : DestLabel ) {
424425 let pos = self [ page] . counter ;
425426 let target = TargetType :: Abs { page, pos } ;
427+ self [ page] . emitq ( 0 ) ;
426428 if let Some ( ( src_page, src_pos) ) = self . labels [ dest] . loc {
427429 self . write_reloc ( src_page, src_pos, target) ;
428430 } else {
@@ -489,8 +491,7 @@ impl JitMemory {
489491 DataType :: AbsAddress ( label) => {
490492 self [ Page ( id) ] . align8 ( ) ;
491493 self . bind_label_with_page ( Page ( id) , const_label) ;
492- self . save_absolute_reloc ( Page ( id) , label) ;
493- self [ Page ( id) ] . emitq ( 0 ) ;
494+ self . emit_absolute_reloc ( Page ( id) , label) ;
494495 }
495496 DataType :: Align8 => {
496497 self [ Page ( id) ] . align8 ( ) ;
@@ -527,8 +528,7 @@ impl JitMemory {
527528 DataType :: AbsAddress ( label) => {
528529 self [ DATA_PAGE ] . align8 ( ) ;
529530 self . bind_label_with_page ( DATA_PAGE , data_label) ;
530- self . save_absolute_reloc ( DATA_PAGE , label) ;
531- self [ DATA_PAGE ] . emitq ( 0 ) ;
531+ self . emit_absolute_reloc ( DATA_PAGE , label) ;
532532 }
533533 DataType :: Align8 => {
534534 self [ DATA_PAGE ] . align8 ( ) ;
@@ -661,8 +661,7 @@ impl JitMemory {
661661 /// Op cd
662662 pub fn enc_d ( & mut self , op : & [ u8 ] , dest : DestLabel ) {
663663 self . emit ( op) ;
664- self . save_reloc ( dest, 4 ) ;
665- self . emitl ( 0 ) ;
664+ self . emit_reloc ( dest, 4 ) ;
666665 }
667666
668667 /// Encoding: /n
@@ -882,8 +881,7 @@ impl JitMemory {
882881 Disp :: D8 ( d) => self . emitb ( d as u8 ) ,
883882 Disp :: D32 ( d) => self . emitl ( d as u32 ) ,
884883 Disp :: Label ( label) => {
885- self . save_reloc ( label, 4 + imm. offset ( ) ) ;
886- self . emitl ( 0 ) ;
884+ self . emit_reloc ( label, 4 + imm. offset ( ) ) ;
887885 }
888886 Disp :: None => { }
889887 }
0 commit comments