내가 에뮬레이터 비스무리한걸 만들었거든?
근데 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 해봄. 근데 진짜 필요한거 아니면 손으로 최적화하는게 ㄹㅇ 병신짓이라는걸 깨달음
TempleOS를 진짜로 쓰는 사람이 있네
아래댓글설명: 병신통피가 제대로 알지도 못하면서 낭설 쓰지 말라고 쿠사리놓음 작성자: 진짜로 A안쓰고 W쓰는거 보여줌 병신통피: 지우고튐
해당 댓글은 삭제되었습니다.
진짜야...
https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b7911f1df4669989611/Source/XPSP1/NT/base/win32/client/filefind.c#L63
????????
너네만 알지 말고 확실하지 않은게 뭔지좀 설명해줘
ANSI win32 함수들이 WCHAR 함수를 부르는 thunk라는게 확실하지 않다고 한거같아서 윈도우 소스 유출된거에서 찾았음
Ascii가 아니라 ANSI일텐데
어째서 이런 무서운 최적화를 하는데수웅
이거 진짜에요? - dc App
뭐가 진짜가 아닌거같다는건지 설명좀;
얼마나 빨라지는지 벤치마크해봄?
글에서 I/O하는데 시간 다간다고 써놓음. 근데 이런거 재밌잖아 그래서 코드베이스에 걍 남겨놓음
컴파일러 최적화 옵션키면 간단한 경우는 SIMD쓰는 경우도 있어서 그거랑 비교해봐도 재밌을듯