내가 에뮬레이터 비스무리한걸 만들었거든?

근데 win32에서 파일 입출력할때 W로 끝나는 함수들은 UTF-16 받잖아 (eg, PathFileExistsW)

어차피 내껀 아스키만 다뤄서 A 함수 불러도 상관없긴한데 예네들은 ansi 문자열을 utf16로 변환하고 W 함수 부르는거여서 뭔가 ㅈㄴ 강박관념 드는거임 (사실 I/O하는데 시간 다가서 상관없긴함 ㅋㅋ)

그래서 뭔가 내가 간단하게 변환 함수 만들고 W 함수 부르면 되겠는데? 이러고 그냥 간단하게 for문 하나로 ws[i]=s[i] 이런 함수 짬

근데 또 뭔가 또 더 빠르게 SIMD를 써볼 기회인거 같은거임

ascii->utf16는 0으로 채운 레지스터랑 문자열에서 뽑아온 바이트가 들어있는 레지스터를 interleave하는 PUNPCKLBW랑 PUNPCKHBW를 쓰면됨. 사실 PSHUFB를 쓰고 싶었는데 난 모든 x86_64에서 다 돌리고싶어서 SSE2로 제한함 (웃긴건 PSHUFD/PSHUFW는 SSE2인데 PSHUFB만 SSSE3임)

utf16->ascii는 word를 byte로 clamp하는 PACKUSWB가 마침 있더라고 그래서 그거 씀

간단하게 showcase 해봄. 근데 진짜 필요한거 아니면 손으로 최적화하는게 ㄹㅇ 병신짓이라는걸 깨달음


24b0d121e09c28a8699fe8b115ef046ecd4dccf320