Re: [fpc-devel] Case code pattern

2018-08-14 Thread Marco Borsari via fpc-devel
Il 14/08/2018 12:37, Martok ha scritto: label label0,label1,label2,{...,}afterend; const table: array [lowestcaselabel..highestcaselabel] of CodePointer = (@label0, @label1, @label2{,...}); if (xhighestcaselabel) then goto @afterend; goto table[x]; label0: code; goto afterend; label1:

Re: [fpc-devel] Case code pattern

2018-08-14 Thread Martok
Am 14.08.2018 um 11:27 schrieb Marco Borsari via fpc-devel: > From what I can read from Wikipedia, every compound of the case is > enclosed in > a procedure (or in a function, as you said the table is typed), declared > with > nostackframe, and called by an array of index, right? The blocks

Re: [fpc-devel] Case code pattern

2018-08-14 Thread Marco Borsari via fpc-devel
Il 14/08/2018 10:00, Martok ha scritto: array of index = array of pointers, sorry ___ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Re: [fpc-devel] Case code pattern

2018-08-14 Thread Marco Borsari via fpc-devel
Il 14/08/2018 10:00, Martok ha scritto: What Kit said, but a correction: the threshold is not 50, it is 19. And what is generated is not technically a jump table, but a typed dispatch table. From what I can read from Wikipedia, every compound of the case is enclosed in a procedure (or in a

Re: [fpc-devel] Case code pattern

2018-08-14 Thread J. Gareth Moreton
I stand corrected - thanks. *makes note to research more weird and wondeful things in the compiler!* Gareth aka. Kit On Tue 14/08/18 09:00 , Martok list...@martoks-place.de sent: Hi, > I would need a clarification about the way the case statement is > translated into assembler by FPC.

Re: [fpc-devel] Case code pattern

2018-08-14 Thread Martok
Hi, > I would need a clarification about the way the case statement is > translated into assembler by FPC. When the list of alternatives is > continous, does the compiler generate a jump table? What Kit said, but a correction: the threshold is not 50, it is 19. And what is generated is not

Re: [fpc-devel] Case code pattern

2018-08-13 Thread Marco Borsari via fpc-devel
Il 13/08/2018 16:29, J. Gareth Moreton ha scritto: I haven't explored it too deeply myself, but from what I understand, a jump table is only generated if there are a large number of branches (over 50). If it's just a handful of branches, it simply subtracts values from the input corresponding

Re: [fpc-devel] Case code pattern

2018-08-13 Thread J. Gareth Moreton
I haven't explored it too deeply myself, but from what I understand, a jump table is only generated if there are a large number of branches (over 50).  If it's just a handful of branches, it simply subtracts values from the input corresponding to the differences between the case labels, and

[fpc-devel] Case code pattern

2018-08-13 Thread Marco Borsari via fpc-devel
Hello, I would need a clarification about the way the case statement is translated into assembler by FPC. When the list of alternatives is continous, does the compiler generate a jump table? And if yes, there is some conditions for which a fall-through is performed anyway? Thank you, Marco