fixed non-sequential not having a correct default case
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40114
This commit is contained in:
		
							parent
							
								
									9bc1279af1
								
							
						
					
					
						commit
						8fe4440b10
					
				@ -1364,10 +1364,15 @@ inline void WriteOp_Switch(JitWriter *jit)
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				jit->write_uint32(base + RelocLookup(jit, cases[i].offs, false));
 | 
									jit->write_uint32(base + RelocLookup(jit, cases[i].offs, false));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								//if we get here, there was a bug in the JIT, so we should break into the debugger
 | 
				
			||||||
 | 
								jit->write_ubyte(IA32_INT3);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			/* The slow version.  Go through each case and generate a check.
 | 
								/* The slow version.  Go through each case and generate a check.
 | 
				
			||||||
			 * In the future we should replace case tables of more than ~8 cases with a
 | 
								 * In the future we should replace case tables of more than ~8 cases with a
 | 
				
			||||||
			 * hash table lookup.
 | 
								 * hash table lookup.
 | 
				
			||||||
 | 
								 * :THOUGHT: Another method of optimizing this - fill in the gaps with jumps to the default case,
 | 
				
			||||||
 | 
								 *  but only if we're under N cases or so!
 | 
				
			||||||
 | 
								 * :THOUGHT: Write out a static btree lookup :)
 | 
				
			||||||
			 */
 | 
								 */
 | 
				
			||||||
			cell_t val;
 | 
								cell_t val;
 | 
				
			||||||
			for (cell_t i=0; i<num_cases; i++)
 | 
								for (cell_t i=0; i<num_cases; i++)
 | 
				
			||||||
@ -1382,9 +1387,9 @@ inline void WriteOp_Switch(JitWriter *jit)
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
				IA32_Jump_Cond_Imm32_Abs(jit, CC_E, RelocLookup(jit, cases[i].offs, false));
 | 
									IA32_Jump_Cond_Imm32_Abs(jit, CC_E, RelocLookup(jit, cases[i].offs, false));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								/* After all this, jump to the default case! */
 | 
				
			||||||
 | 
								IA32_Jump_Imm32_Abs(jit, RelocLookup(jit, *tbl, false));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		//if we get here, there was a bug in the JIT, so we should break into the debugger
 | 
					 | 
				
			||||||
		jit->write_ubyte(IA32_INT3);
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user