> Regarding the latter, Plan 9 does not allow floating point > instructions to be executed within note handling, but erring on the > side of caution also forbids instructions such as MOVOU (don't ask me) > which is part of the SSE(2?) extension, but hardly qualifies as a > floating point instruction. movou (movdqu in the manual) is a sse2 data movement instruction. not all sse2 instructions require that sse be turned on (pause, for example), but movou uses at least one xmm register so is clearly using the sse unit, thus requiring that it be turned on. the go runtime memmove uses movou for memmoves between 33 and 128 bytes. i only see a 10 cycle difference for these cases on my atom machine, (maximum 13%), so we're not missing out on much here by not using sse. the real win, or loss for the plan 9 memmove, is in the short memmoves. but this is a µbenchmark, and it would be more convincing with a real world test. - erik harness; 8.memmovetest memmove 1 92.42578 cycles/op 2 81.28125 cycles/op 4 56.47266 cycles/op 8 58.32422 cycles/op 16 62.28516 cycles/op 32 70.26563 cycles/op 64 86.32031 cycles/op 128 118.3125 cycles/op 512 323.5078 cycles/op 1024 587.1094 cycles/op 4096 2119.242 cycles/op 131072 133058.5 cycles/op rt·memmove 1 20.60156 cycles/op 2 20.34375 cycles/op 4 24.46875 cycles/op 8 22.42969 cycles/op 16 27.45703 cycles/op 32 52.82813 cycles/op 64 79.19531 cycles/op 128 129.1289 cycles/op 512 314.4492 cycles/op 1024 569.9648 cycles/op 4096 2132.297 cycles/op 131072 135378.3 cycles/op