| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- thread data $i = align 4 {w 42}
- data $fmti = align 1 {b "i%d==%d\n", b 0}
- thread data $x = {w 1, w 2, w 3, w 4}
- data $fmtx = align 1 {b "*(x+%d)==%d\n", b 0}
- export
- function w $main() {
- @start
- %pthr =l alloc8 8
- %rval =l alloc8 8
- call $pthread_create(l %pthr, l 0, l $thread, l 0)
- %t =l load %pthr
- call $pthread_join(l %t, l %rval)
- %i0 =w loadw thread $i
- call $printf(l $fmti, ..., w 0, w %i0)
- %i1 =w load %rval
- call $printf(l $fmti, ..., w 1, w %i1)
- %a0 =l call $xaddr()
- %x0 =w load %a0
- call $printf(l $fmtx, ..., w 0, w %x0)
- %a4 =l call $xaddroff4()
- %x4 =w load %a4
- call $printf(l $fmtx, ..., w 4, w %x4)
- %a8 =l call $xaddroff(l 8)
- %x8 =w load %a8
- call $printf(l $fmtx, ..., w 8, w %x8)
- %xc =l call $xvalcnt(l 3)
- call $printf(l $fmtx, ..., w 12, w %xc)
- ret 0
- }
- function l $thread(l %arg) {
- @start
- %i3 =l add thread $i, 3
- storeb 24, %i3
- %ret =l loadsw thread $i
- ret %ret
- }
- function l $xaddr() {
- @start
- ret thread $x
- }
- function l $xaddroff4() {
- @start
- %a =l add 4, thread $x
- ret %a
- }
- function l $xaddroff(l %off) {
- @start
- %a =l add thread $x, %off
- ret %a
- }
- function w $xvalcnt(l %cnt) {
- @start
- %o =l mul 4, %cnt
- %a =l add thread $x, %o
- %x =w load %a
- ret %x
- }
- # >>> output
- # i0==42
- # i1==402653226
- # *(x+0)==1
- # *(x+4)==2
- # *(x+8)==3
- # *(x+12)==4
- # <<<
|