native_amd64.go 1016 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //go:generate make
  2. package base64x
  3. import (
  4. `unsafe`
  5. `github.com/bytedance/sonic/loader`
  6. )
  7. //go:nosplit
  8. func b64encode(out *[]byte, src *[]byte, mode int) {
  9. __b64encode(noEscape(unsafe.Pointer(out)), noEscape(unsafe.Pointer(src)), mode)
  10. }
  11. //go:nosplit
  12. func b64decode(out *[]byte, src unsafe.Pointer, len int, mode int) (ret int) {
  13. return __b64decode(noEscape(unsafe.Pointer(out)), noEscape(unsafe.Pointer(src)), len, mode)
  14. }
  15. // asm2asm templates
  16. var (
  17. __b64encode func(out unsafe.Pointer, src unsafe.Pointer, mod int)
  18. __b64decode func(out unsafe.Pointer, src unsafe.Pointer, len int, mod int) (ret int)
  19. )
  20. // directly jump PCs
  21. var (
  22. _subr__b64encode uintptr
  23. _subr__b64decode uintptr
  24. )
  25. var stubs = []loader.GoC{
  26. {"_b64encode", &_subr__b64encode, &__b64encode},
  27. {"_b64decode", &_subr__b64decode, &__b64decode},
  28. }
  29. func init() {
  30. if hasAVX2() {
  31. archFlags = _MODE_AVX2
  32. }
  33. loader.WrapGoC(text__native_entry__, funcs, stubs, "base64x", "base64x/native.c")
  34. }