|  |  | 
|  | # define __ASM_FORM(x)  " " #x " " | 
|  | # define JUMP_LABEL_INITIAL_NOP ".byte 0xe9 \n\t .long 0\n\t" | 
|  | # define __ASM_SEL(a,b) __ASM_FORM(b) | 
|  | #define _ASM_PTR        __ASM_SEL(.long, .quad) | 
|  |  | 
|  | # define JUMP_LABEL(key, label)                                 \ | 
|  | do {                                                    \ | 
|  | asm goto("1:"                                   \ | 
|  | JUMP_LABEL_INITIAL_NOP                  \ | 
|  | ".pushsection __jump_table,  \"a\" \n\t"\ | 
|  | _ASM_PTR "1b, %l[" #label "], %c0 \n\t" \ | 
|  | ".popsection \n\t"                      \ | 
|  | : :  "i" (key) :  : label);             \ | 
|  | } while (0) | 
|  |  | 
|  | int main(int argc, char *argv[]) | 
|  | { | 
|  | JUMP_LABEL("1", do_trace ); | 
|  | return 1; | 
|  | do_trace: | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | /* | 
|  | *  check-name: Asm with goto labels. | 
|  | */ | 
|  |  |