@@ -276,6 +276,28 @@ macro_rules! test_interpreter_and_jit {
276
276
Ok ( ( ) ) => {
277
277
let ( instruction_count_jit, result_jit) = vm. execute_program( & $executable, false ) ;
278
278
let tracer_jit = & vm. context_object_pointer;
279
+ let mut diverged = false ;
280
+ if format!( "{:?}" , result_interpreter) != format!( "{:?}" , result_jit) {
281
+ println!(
282
+ "Result of interpreter ({:?}) and JIT ({:?}) diverged" ,
283
+ result_interpreter, result_jit,
284
+ ) ;
285
+ diverged = true ;
286
+ }
287
+ if instruction_count_interpreter != instruction_count_jit {
288
+ println!(
289
+ "Instruction meter of interpreter ({:?}) and JIT ({:?}) diverged" ,
290
+ instruction_count_interpreter, instruction_count_jit,
291
+ ) ;
292
+ diverged = true ;
293
+ }
294
+ if interpreter_final_pc != vm. registers[ 11 ] {
295
+ println!(
296
+ "Final PC of interpreter ({:?}) and JIT ({:?}) result diverged" ,
297
+ interpreter_final_pc, vm. registers[ 11 ] ,
298
+ ) ;
299
+ diverged = true ;
300
+ }
279
301
if !TestContextObject :: compare_trace_log( & _tracer_interpreter, tracer_jit) {
280
302
let analysis = Analysis :: from_executable( & $executable) . unwrap( ) ;
281
303
let stdout = std:: io:: stdout( ) ;
@@ -288,20 +310,9 @@ macro_rules! test_interpreter_and_jit {
288
310
analysis
289
311
. disassemble_trace_log( & mut stdout. lock( ) , & tracer_jit. trace_log)
290
312
. unwrap( ) ;
291
- panic! ( ) ;
313
+ diverged = true ;
292
314
}
293
- assert_eq!(
294
- format!( "{:?}" , result_interpreter) , format!( "{:?}" , result_jit) ,
295
- "Interpreter and JIT instruction result diverged" ,
296
- ) ;
297
- assert_eq!(
298
- instruction_count_interpreter, instruction_count_jit,
299
- "Interpreter and JIT instruction meter diverged" ,
300
- ) ;
301
- assert_eq!(
302
- interpreter_final_pc, vm. registers[ 11 ] ,
303
- "Interpreter and JIT instruction final PC diverged" ,
304
- ) ;
315
+ assert!( !diverged) ;
305
316
}
306
317
}
307
318
}
0 commit comments