! as -Av8plus -o std_test.o std_test.s ; ld -o std_test std_test.o .equ SYSCALL_EXIT,1 .equ SYSCALL_WRITE,4 .equ STDOUT,1 ! This problem was noticed with crafty (which does 64-bit bit manipulations) ! After the "std" code moved to using tcg_gen_concat_tl_i64() .globl _start _start: ! ! TEST1 - high bits in y ! set test1,%o1 call write_stdout nop tun_test1: ! Set some high bits in o4 ! have to use sllx to get them there set 0xff000000, %o5 sllx %o5,8,%o5 or %o5,0xff,%o5 set 0x00000000, %o4 set temp_mem, %o3 std %o4,[%o3] ! write 64-bit value, high 32bits from %o4 ! low 32bits from %o5 ld [%o3],%g1 ! load back in the high 32 bits set 0x00000000,%g2 ! result _should_ be 0 cmp %g1,%g2 beq test1_pass nop test1_fail: set fail,%o1 ba test1_print nop test1_pass: set pass,%o1 test1_print: call write_stdout nop !================================ ! Exit !================================ exit: mov 0,%o0 ! exit value mov SYSCALL_EXIT,%g1 ! put the exit syscall number in g1 ta 0x10 ! and exit !================================ ! WRITE_STDOUT !================================ ! %o1 has string write_stdout: set SYSCALL_WRITE,%g1 ! Write syscall in %g1 set STDOUT,%o0 ! 1 in %o0 (stdout) set 0,%o2 ! 0 (count) in %o2 str_loop1: ldub [%o1+%o2],%l0 ! load byte cmp %l0,%g0 ! compare against zero bnz str_loop1 ! if not nul, repeat ! BRANCH DELAY SLOT inc %o2 ! increment count dec %o2 ! correct count ta 0x10 ! run the syscall retl ! return nop .data fail: .ascii "Fail!\n\0" pass: .ascii "Pass\n\0" test1: .ascii "Test1: Storing 64-bit value : \0" temp_mem: .int 0 temp_mem_lo: .int 0