| .org 0x8d |
| ilc: |
| .org 0x8e |
| program_interruption_code: |
| .org 0x94 |
| monitor_class: |
| .org 0xb0 |
| monitor_code: |
| .org 0x150 |
| program_old_psw: |
| .org 0x1d0 /* program new PSW */ |
| .quad 0x180000000,pgm /* 64-bit mode */ |
| .org 0x200 /* lowcore padding */ |
| .globl _start |
| _start: |
| stctg %c8,%c8,c8 /* enable only monitor class 1 */ |
| mvhhi c8+6,0x4000 |
| lctlg %c8,%c8,c8 |
| mc_nop: |
| mc 123,0 |
| mc_monitor_event: |
| mc 321,1 |
| j failure |
| mc_specification: |
| mc 333,16 |
| j failure |
| pgm: |
| lgrl %r0,program_old_psw+8 /* ilc adjustment */ |
| llgc %r1,ilc |
| sgr %r0,%r1 |
| larl %r1,mc_monitor_event /* dispatch based on old PSW */ |
| cgrje %r0,%r1,pgm_monitor_event |
| larl %r1,mc_specification |
| cgrje %r0,%r1,pgm_specification |
| j failure |
| pgm_monitor_event: |
| chhsi program_interruption_code,0x40 /* monitor event? */ |
| jne failure |
| chhsi monitor_class,1 /* class from mc_monitor_event? */ |
| jne failure |
| cghsi monitor_code,321 /* code from mc_monitor_event? */ |
| jne failure |
| j mc_specification /* next test */ |
| pgm_specification: |
| chhsi program_interruption_code,6 /* specification exception? */ |
| jne failure |
| lpswe success_psw |
| failure: |
| lpswe failure_psw |
| .align 8 |
| c8: |
| .quad 0 |
| success_psw: |
| .quad 0x2000000000000,0xfff /* see is_special_wait_psw() */ |
| failure_psw: |
| .quad 0x2000000000000,0 /* disabled wait */ |