Concurrent Clean : 文字列
せっかく副作用がないのだから、部分文字列の切り出しは、メモリコピーなしに実装してあるんだよね、ということを確認したくなった。
該当ソース。
empty_string: movl $zero_length_string,a0 ret section (sliceAC) sliceAC: mov 4(a0),a2 test d1,d1 jns slice_string_1 xorl d1,d1 slice_string_1: cmp a2,d1 jge empty_string cmp d1,d0 jl empty_string inc d0 cmp a2,d0 jle slice_string_2 mov a2,d0 slice_string_2: sub d1,d0 lea 8+3(d0),a2 shr $2,a2 lea -32(a4,a2,4),a1 cmpl end_heap,a1 jae gc_4 r_gc_4: sub $2,a2 lea 8(a0,d1),a1 movl $__STRING__+2,(a4) mov d0,4(a4) / copy part of string mov a2,%ecx movl a4,a2 add $8,a4 xchg a1,%esi cld rep movsl mov a1,%esi mov a2,a0 ret gc_4: movl a1,a2 call collect_1l lea 8+3(d0),a2 shr $2,a2 jmp r_gc_4