1*1f5207b7SJohn Levon 
2*1f5207b7SJohn Levon # define __ASM_FORM(x)  " " #x " "
3*1f5207b7SJohn Levon # define JUMP_LABEL_INITIAL_NOP ".byte 0xe9 \n\t .long 0\n\t"
4*1f5207b7SJohn Levon # define __ASM_SEL(a,b) __ASM_FORM(b)
5*1f5207b7SJohn Levon #define _ASM_PTR        __ASM_SEL(.long, .quad)
6*1f5207b7SJohn Levon 
7*1f5207b7SJohn Levon # define JUMP_LABEL(key, label)                                 \
8*1f5207b7SJohn Levon        do {                                                    \
9*1f5207b7SJohn Levon                asm goto("1:"                                   \
10*1f5207b7SJohn Levon                        JUMP_LABEL_INITIAL_NOP                  \
11*1f5207b7SJohn Levon                        ".pushsection __jump_table,  \"a\" \n\t"\
12*1f5207b7SJohn Levon                        _ASM_PTR "1b, %l[" #label "], %c0 \n\t" \
13*1f5207b7SJohn Levon                        ".popsection \n\t"                      \
14*1f5207b7SJohn Levon                        : :  "i" (key) :  : label);             \
15*1f5207b7SJohn Levon        } while (0)
16*1f5207b7SJohn Levon 
main(int argc,char * argv[])17*1f5207b7SJohn Levon int main(int argc, char *argv[])
18*1f5207b7SJohn Levon {
19*1f5207b7SJohn Levon        JUMP_LABEL("1", do_trace );
20*1f5207b7SJohn Levon        return 1;
21*1f5207b7SJohn Levon do_trace:
22*1f5207b7SJohn Levon        return 0;
23*1f5207b7SJohn Levon }
24*1f5207b7SJohn Levon 
25*1f5207b7SJohn Levon /*
26*1f5207b7SJohn Levon  *  check-name: Asm with goto labels.
27*1f5207b7SJohn Levon  */
28*1f5207b7SJohn Levon 
29