6g and 8g use REP with MOVSL/MOVSQ, which I believe @randall77 determined to be faster around that threshold. I would believe that the other architectures could benefit from a call to memmove or something similar. (This is a place where NEON should shine.)
538->745 is hardly a "cliff". I'm surprised it is so close given the lack of anyone tuning this mechanism on arm. (Or did I miss someone doing that?)
minux is right, the moves generated here are sometimes used to marshal arguments to a function, so we can't call a function to do the marshaling. For other situations like your a=b example you could call memmove. It might take some work to distinguish those two cases, however. At the move generation point the marshaling has already been turned into a=b assignments.
changed the title
cmd/gc: assigning large values does not use memmoveJun 8, 2015