On 26/07/12 00:46, Walter Bright wrote:
On 7/25/2012 2:55 PM, Dmitry Olshansky wrote:
std\regex.d(5118): Error: undefined identifier 'L_jumptable'


I was afraid of that. You may have to approximate it by loading the
address of L_jumptable into a register and adding it in instead of
using
the addressing mode.

I failed to load it in any register or interact with it in any way.
I think I've stalled. There has to be a way to get label address
somehow, I got
tired of guess and shot :(

BTW that would allow us to do computed gotos but only in inline asm.


How to get an address:

      call jump_table
L1:

      ...
jump_table:
      pop EAX
      jmp L1
      .. the rest of the jump table ...

Yes, it's awful, but we're just trying to take some measurements here,
so it doesn't matter.

What I meant was add these extra instructions in to the switch version
as dummies in order to make the extra time they take irrelevant to
looking at the difference.

But doing that screws up the CPU"s stack prediction so badly that it will dominate the timing
At least do something like:

jump_table:
      move EAX, [ESP]
      ret


Reply via email to