From 90087b6cfe87122de5e46a62d5e323ec7a88bb50 Mon Sep 17 00:00:00 2001 From: Rbanh Date: Sun, 23 Feb 2025 12:02:17 -0500 Subject: [PATCH] Initial commit: Basic project structure and snake game implementation --- .gitignore | 36 + .../site/python3.11/pygame/_blit_info.h | 21 + .../Include/site/python3.11/pygame/_camera.h | 26 + .../Include/site/python3.11/pygame/_pygame.h | 374 + .../Include/site/python3.11/pygame/_surface.h | 30 + .venv/Include/site/python3.11/pygame/camera.h | 252 + .venv/Include/site/python3.11/pygame/font.h | 15 + .../Include/site/python3.11/pygame/freetype.h | 114 + .../site/python3.11/pygame/include/_pygame.h | 949 +++ .../site/python3.11/pygame/include/bitmask.h | 171 + .../site/python3.11/pygame/include/pgcompat.h | 102 + .../site/python3.11/pygame/include/pgimport.h | 67 + .../python3.11/pygame/include/pgplatform.h | 87 + .../site/python3.11/pygame/include/pygame.h | 34 + .../pygame/include/pygame_bufferproxy.h | 56 + .../python3.11/pygame/include/pygame_font.h | 50 + .../pygame/include/pygame_freetype.h | 42 + .../python3.11/pygame/include/pygame_mask.h | 45 + .../python3.11/pygame/include/pygame_mixer.h | 71 + .../site/python3.11/pygame/include/sse2neon.h | 6203 +++++++++++++++++ .venv/Include/site/python3.11/pygame/mask.h | 7 + .venv/Include/site/python3.11/pygame/mixer.h | 14 + .../Include/site/python3.11/pygame/palette.h | 123 + .../site/python3.11/pygame/pgarrinter.h | 26 + .../site/python3.11/pygame/pgbufferproxy.h | 7 + .../Include/site/python3.11/pygame/pgcompat.h | 27 + .../Include/site/python3.11/pygame/pgopengl.h | 20 + .../site/python3.11/pygame/pgplatform.h | 23 + .venv/Include/site/python3.11/pygame/pygame.h | 32 + .venv/Include/site/python3.11/pygame/scrap.h | 147 + .../site/python3.11/pygame/simd_blitters.h | 84 + .../Include/site/python3.11/pygame/surface.h | 361 + .venv/Scripts/Activate.ps1 | 472 ++ .venv/Scripts/activate | 69 + .venv/Scripts/activate.bat | 34 + .venv/Scripts/black.exe | Bin 0 -> 108421 bytes .venv/Scripts/blackd.exe | Bin 0 -> 108422 bytes .venv/Scripts/deactivate.bat | 22 + .venv/Scripts/f2py.exe | Bin 0 -> 108417 bytes .venv/Scripts/pip.exe | Bin 0 -> 108424 bytes .venv/Scripts/pip3.11.exe | Bin 0 -> 108424 bytes .venv/Scripts/pip3.exe | Bin 0 -> 108424 bytes .venv/Scripts/py.test.exe | Bin 0 -> 108422 bytes .venv/Scripts/pytest.exe | Bin 0 -> 108422 bytes .venv/Scripts/python.exe | Bin 0 -> 268152 bytes .venv/Scripts/pythonw.exe | Bin 0 -> 256384 bytes .venv/pyvenv.cfg | 5 + README.md | 60 + requirements.txt | 4 + src/game.py | 77 + src/main.py | 23 + src/snake.py | 92 + 52 files changed, 10474 insertions(+) create mode 100644 .gitignore create mode 100644 .venv/Include/site/python3.11/pygame/_blit_info.h create mode 100644 .venv/Include/site/python3.11/pygame/_camera.h create mode 100644 .venv/Include/site/python3.11/pygame/_pygame.h create mode 100644 .venv/Include/site/python3.11/pygame/_surface.h create mode 100644 .venv/Include/site/python3.11/pygame/camera.h create mode 100644 .venv/Include/site/python3.11/pygame/font.h create mode 100644 .venv/Include/site/python3.11/pygame/freetype.h create mode 100644 .venv/Include/site/python3.11/pygame/include/_pygame.h create mode 100644 .venv/Include/site/python3.11/pygame/include/bitmask.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pgcompat.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pgimport.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pgplatform.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pygame.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pygame_bufferproxy.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pygame_font.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pygame_freetype.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pygame_mask.h create mode 100644 .venv/Include/site/python3.11/pygame/include/pygame_mixer.h create mode 100644 .venv/Include/site/python3.11/pygame/include/sse2neon.h create mode 100644 .venv/Include/site/python3.11/pygame/mask.h create mode 100644 .venv/Include/site/python3.11/pygame/mixer.h create mode 100644 .venv/Include/site/python3.11/pygame/palette.h create mode 100644 .venv/Include/site/python3.11/pygame/pgarrinter.h create mode 100644 .venv/Include/site/python3.11/pygame/pgbufferproxy.h create mode 100644 .venv/Include/site/python3.11/pygame/pgcompat.h create mode 100644 .venv/Include/site/python3.11/pygame/pgopengl.h create mode 100644 .venv/Include/site/python3.11/pygame/pgplatform.h create mode 100644 .venv/Include/site/python3.11/pygame/pygame.h create mode 100644 .venv/Include/site/python3.11/pygame/scrap.h create mode 100644 .venv/Include/site/python3.11/pygame/simd_blitters.h create mode 100644 .venv/Include/site/python3.11/pygame/surface.h create mode 100644 .venv/Scripts/Activate.ps1 create mode 100644 .venv/Scripts/activate create mode 100644 .venv/Scripts/activate.bat create mode 100644 .venv/Scripts/black.exe create mode 100644 .venv/Scripts/blackd.exe create mode 100644 .venv/Scripts/deactivate.bat create mode 100644 .venv/Scripts/f2py.exe create mode 100644 .venv/Scripts/pip.exe create mode 100644 .venv/Scripts/pip3.11.exe create mode 100644 .venv/Scripts/pip3.exe create mode 100644 .venv/Scripts/py.test.exe create mode 100644 .venv/Scripts/pytest.exe create mode 100644 .venv/Scripts/python.exe create mode 100644 .venv/Scripts/pythonw.exe create mode 100644 .venv/pyvenv.cfg create mode 100644 README.md create mode 100644 requirements.txt create mode 100644 src/game.py create mode 100644 src/main.py create mode 100644 src/snake.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a086bfc --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# Virtual Environment +venv/ +env/ +ENV/ + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/.venv/Include/site/python3.11/pygame/_blit_info.h b/.venv/Include/site/python3.11/pygame/_blit_info.h new file mode 100644 index 0000000..5320d0b --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/_blit_info.h @@ -0,0 +1,21 @@ +#define NO_PYGAME_C_API +#include "_surface.h" + +/* The structure passed to the low level blit functions */ +typedef struct { + int width; + int height; + Uint8 *s_pixels; + int s_pxskip; + int s_skip; + Uint8 *d_pixels; + int d_pxskip; + int d_skip; + SDL_PixelFormat *src; + SDL_PixelFormat *dst; + Uint8 src_blanket_alpha; + int src_has_colorkey; + Uint32 src_colorkey; + SDL_BlendMode src_blend; + SDL_BlendMode dst_blend; +} SDL_BlitInfo; diff --git a/.venv/Include/site/python3.11/pygame/_camera.h b/.venv/Include/site/python3.11/pygame/_camera.h new file mode 100644 index 0000000..075ef6f --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/_camera.h @@ -0,0 +1,26 @@ +/* + pygame - Python Game Library + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#ifndef _CAMERA_H +#define _CAMERA_H + +#include "_pygame.h" +#include "camera.h" + +#endif diff --git a/.venv/Include/site/python3.11/pygame/_pygame.h b/.venv/Include/site/python3.11/pygame/_pygame.h new file mode 100644 index 0000000..e3521b3 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/_pygame.h @@ -0,0 +1,374 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +/* This will use PYGAMEAPI_EXTERN_SLOTS instead + * of PYGAMEAPI_DEFINE_SLOTS for base modules. + */ +#ifndef _PYGAME_INTERNAL_H +#define _PYGAME_INTERNAL_H + +#include "pgplatform.h" +/* + If PY_SSIZE_T_CLEAN is defined before including Python.h, length is a + Py_ssize_t rather than an int for all # variants of formats (s#, y#, etc.) +*/ +#define PY_SSIZE_T_CLEAN +#include + +/* Ensure PyPy-specific code is not in use when running on GraalPython (PR + * #2580) */ +#if defined(GRAALVM_PYTHON) && defined(PYPY_VERSION) +#undef PYPY_VERSION +#endif + +#include + +/* SDL 1.2 constants removed from SDL 2 */ +typedef enum { + SDL_HWSURFACE = 0, + SDL_RESIZABLE = SDL_WINDOW_RESIZABLE, + SDL_ASYNCBLIT = 0, + SDL_OPENGL = SDL_WINDOW_OPENGL, + SDL_OPENGLBLIT = 0, + SDL_ANYFORMAT = 0, + SDL_HWPALETTE = 0, + SDL_DOUBLEBUF = 0, + SDL_FULLSCREEN = SDL_WINDOW_FULLSCREEN, + SDL_HWACCEL = 0, + SDL_SRCCOLORKEY = 0, + SDL_RLEACCELOK = 0, + SDL_SRCALPHA = 0, + SDL_NOFRAME = SDL_WINDOW_BORDERLESS, + SDL_GL_SWAP_CONTROL = 0, + TIMER_RESOLUTION = 0 +} PygameVideoFlags; + +/* the wheel button constants were removed from SDL 2 */ +typedef enum { + PGM_BUTTON_LEFT = SDL_BUTTON_LEFT, + PGM_BUTTON_RIGHT = SDL_BUTTON_RIGHT, + PGM_BUTTON_MIDDLE = SDL_BUTTON_MIDDLE, + PGM_BUTTON_WHEELUP = 4, + PGM_BUTTON_WHEELDOWN = 5, + PGM_BUTTON_X1 = SDL_BUTTON_X1 + 2, + PGM_BUTTON_X2 = SDL_BUTTON_X2 + 2, + PGM_BUTTON_KEEP = 0x80 +} PygameMouseFlags; + +typedef enum { + /* Any SDL_* events here are for backward compatibility. */ + SDL_NOEVENT = 0, + + SDL_ACTIVEEVENT = SDL_USEREVENT, + SDL_VIDEORESIZE, + SDL_VIDEOEXPOSE, + + PGE_MIDIIN, + PGE_MIDIOUT, + PGE_KEYREPEAT, /* Special internal pygame event, for managing key-presses + */ + + /* DO NOT CHANGE THE ORDER OF EVENTS HERE */ + PGE_WINDOWSHOWN, + PGE_WINDOWHIDDEN, + PGE_WINDOWEXPOSED, + PGE_WINDOWMOVED, + PGE_WINDOWRESIZED, + PGE_WINDOWSIZECHANGED, + PGE_WINDOWMINIMIZED, + PGE_WINDOWMAXIMIZED, + PGE_WINDOWRESTORED, + PGE_WINDOWENTER, + PGE_WINDOWLEAVE, + PGE_WINDOWFOCUSGAINED, + PGE_WINDOWFOCUSLOST, + PGE_WINDOWCLOSE, + PGE_WINDOWTAKEFOCUS, + PGE_WINDOWHITTEST, + PGE_WINDOWICCPROFCHANGED, + PGE_WINDOWDISPLAYCHANGED, + + /* Here we define PGPOST_* events, events that act as a one-to-one + * proxy for SDL events (and some extra events too!), the proxy is used + * internally when pygame users use event.post() + * + * At a first glance, these may look redundant, but they are really + * important, especially with event blocking. If proxy events are + * not there, blocked events dont make it to our event filter, and + * that can break a lot of stuff. + * + * IMPORTANT NOTE: Do not post events directly with these proxy types, + * use the appropriate functions from event.c, that handle these proxy + * events for you. + * Proxy events are for internal use only */ + PGPOST_EVENTBEGIN, /* mark start of proxy-events */ + PGPOST_ACTIVEEVENT = PGPOST_EVENTBEGIN, + PGPOST_APP_TERMINATING, + PGPOST_APP_LOWMEMORY, + PGPOST_APP_WILLENTERBACKGROUND, + PGPOST_APP_DIDENTERBACKGROUND, + PGPOST_APP_WILLENTERFOREGROUND, + PGPOST_APP_DIDENTERFOREGROUND, + PGPOST_AUDIODEVICEADDED, + PGPOST_AUDIODEVICEREMOVED, + PGPOST_CLIPBOARDUPDATE, + PGPOST_CONTROLLERAXISMOTION, + PGPOST_CONTROLLERBUTTONDOWN, + PGPOST_CONTROLLERBUTTONUP, + PGPOST_CONTROLLERDEVICEADDED, + PGPOST_CONTROLLERDEVICEREMOVED, + PGPOST_CONTROLLERDEVICEREMAPPED, + PGPOST_CONTROLLERTOUCHPADDOWN, + PGPOST_CONTROLLERTOUCHPADMOTION, + PGPOST_CONTROLLERTOUCHPADUP, + PGPOST_CONTROLLERSENSORUPDATE, + PGPOST_DOLLARGESTURE, + PGPOST_DOLLARRECORD, + PGPOST_DROPFILE, + PGPOST_DROPTEXT, + PGPOST_DROPBEGIN, + PGPOST_DROPCOMPLETE, + PGPOST_FINGERMOTION, + PGPOST_FINGERDOWN, + PGPOST_FINGERUP, + PGPOST_KEYDOWN, + PGPOST_KEYMAPCHANGED, + PGPOST_KEYUP, + PGPOST_JOYAXISMOTION, + PGPOST_JOYBALLMOTION, + PGPOST_JOYHATMOTION, + PGPOST_JOYBUTTONDOWN, + PGPOST_JOYBUTTONUP, + PGPOST_JOYDEVICEADDED, + PGPOST_JOYDEVICEREMOVED, + PGPOST_LOCALECHANGED, + PGPOST_MIDIIN, + PGPOST_MIDIOUT, + PGPOST_MOUSEMOTION, + PGPOST_MOUSEBUTTONDOWN, + PGPOST_MOUSEBUTTONUP, + PGPOST_MOUSEWHEEL, + PGPOST_MULTIGESTURE, + PGPOST_NOEVENT, + PGPOST_QUIT, + PGPOST_RENDER_TARGETS_RESET, + PGPOST_RENDER_DEVICE_RESET, + PGPOST_SYSWMEVENT, + PGPOST_TEXTEDITING, + PGPOST_TEXTINPUT, + PGPOST_VIDEORESIZE, + PGPOST_VIDEOEXPOSE, + PGPOST_WINDOWSHOWN, + PGPOST_WINDOWHIDDEN, + PGPOST_WINDOWEXPOSED, + PGPOST_WINDOWMOVED, + PGPOST_WINDOWRESIZED, + PGPOST_WINDOWSIZECHANGED, + PGPOST_WINDOWMINIMIZED, + PGPOST_WINDOWMAXIMIZED, + PGPOST_WINDOWRESTORED, + PGPOST_WINDOWENTER, + PGPOST_WINDOWLEAVE, + PGPOST_WINDOWFOCUSGAINED, + PGPOST_WINDOWFOCUSLOST, + PGPOST_WINDOWCLOSE, + PGPOST_WINDOWTAKEFOCUS, + PGPOST_WINDOWHITTEST, + PGPOST_WINDOWICCPROFCHANGED, + PGPOST_WINDOWDISPLAYCHANGED, + + PGE_USEREVENT, /* this event must stay in this position only */ + + PG_NUMEVENTS = + SDL_LASTEVENT /* Not an event. Indicates end of user events. */ +} PygameEventCode; + +/* SDL1 ACTIVEEVENT state attribute can take the following values */ +/* These constant values are directly picked from SDL1 source */ +#define SDL_APPMOUSEFOCUS 0x01 +#define SDL_APPINPUTFOCUS 0x02 +#define SDL_APPACTIVE 0x04 + +/* Surface flags: based on SDL 1.2 flags */ +typedef enum { + PGS_SWSURFACE = 0x00000000, + PGS_HWSURFACE = 0x00000001, + PGS_ASYNCBLIT = 0x00000004, + + PGS_ANYFORMAT = 0x10000000, + PGS_HWPALETTE = 0x20000000, + PGS_DOUBLEBUF = 0x40000000, + PGS_FULLSCREEN = 0x80000000, + PGS_SCALED = 0x00000200, + + PGS_OPENGL = 0x00000002, + PGS_OPENGLBLIT = 0x0000000A, + PGS_RESIZABLE = 0x00000010, + PGS_NOFRAME = 0x00000020, + PGS_SHOWN = 0x00000040, /* Added from SDL 2 */ + PGS_HIDDEN = 0x00000080, /* Added from SDL 2 */ + + PGS_HWACCEL = 0x00000100, + PGS_SRCCOLORKEY = 0x00001000, + PGS_RLEACCELOK = 0x00002000, + PGS_RLEACCEL = 0x00004000, + PGS_SRCALPHA = 0x00010000, + PGS_PREALLOC = 0x01000000 +} PygameSurfaceFlags; + +// TODO Implement check below in a way that does not break CI +/* New buffer protocol (PEP 3118) implemented on all supported Py versions. +#if !defined(Py_TPFLAGS_HAVE_NEWBUFFER) +#error No support for PEP 3118/Py_TPFLAGS_HAVE_NEWBUFFER. Please use a +supported Python version. #endif */ + +#define RAISE(x, y) (PyErr_SetString((x), (y)), NULL) +#define DEL_ATTR_NOT_SUPPORTED_CHECK(name, value) \ + do { \ + if (!value) { \ + PyErr_Format(PyExc_AttributeError, "Cannot delete attribute %s", \ + name); \ + return -1; \ + } \ + } while (0) + +#define DEL_ATTR_NOT_SUPPORTED_CHECK_NO_NAME(value) \ + do { \ + if (!value) { \ + PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); \ + return -1; \ + } \ + } while (0) + +/* + * Initialization checks + */ + +#define VIDEO_INIT_CHECK() \ + if (!SDL_WasInit(SDL_INIT_VIDEO)) \ + return RAISE(pgExc_SDLError, "video system not initialized") + +#define JOYSTICK_INIT_CHECK() \ + if (!SDL_WasInit(SDL_INIT_JOYSTICK)) \ + return RAISE(pgExc_SDLError, "joystick system not initialized") + +/* thread check */ +#ifdef WITH_THREAD +#define PG_CHECK_THREADS() (1) +#else /* ~WITH_THREAD */ +#define PG_CHECK_THREADS() \ + (RAISE(PyExc_NotImplementedError, "Python built without thread support")) +#endif /* ~WITH_THREAD */ + +#define PyType_Init(x) (((x).ob_type) = &PyType_Type) + +/* CPython 3.6 had initial and undocumented FASTCALL support, but we play it + * safe by not relying on implementation details */ +#if PY_VERSION_HEX < 0x03070000 + +/* Macro for naming a pygame fastcall wrapper function */ +#define PG_FASTCALL_NAME(func) _##func##_fastcall_wrap + +/* used to forward declare compat functions */ +#define PG_DECLARE_FASTCALL_FUNC(func, self_type) \ + static PyObject *PG_FASTCALL_NAME(func)(self_type * self, PyObject * args) + +/* Using this macro on a function defined with the FASTCALL calling convention + * adds a wrapper definition that uses regular python VARARGS convention. + * Since it is guaranteed that the 'args' object is a tuple, we can directly + * call PySequence_Fast_ITEMS and PyTuple_GET_SIZE on it (which are macros that + * assume the same, and don't do error checking) */ +#define PG_WRAP_FASTCALL_FUNC(func, self_type) \ + PG_DECLARE_FASTCALL_FUNC(func, self_type) \ + { \ + return func(self, (PyObject *const *)PySequence_Fast_ITEMS(args), \ + PyTuple_GET_SIZE(args)); \ + } + +#define PG_FASTCALL METH_VARARGS + +#else /* PY_VERSION_HEX >= 0x03070000 */ +/* compat macros are no-op on python versions that support fastcall */ +#define PG_FASTCALL_NAME(func) func +#define PG_DECLARE_FASTCALL_FUNC(func, self_type) +#define PG_WRAP_FASTCALL_FUNC(func, self_type) + +#define PG_FASTCALL METH_FASTCALL + +#endif /* PY_VERSION_HEX >= 0x03070000 */ + +/* + * event module internals + */ +struct pgEventObject { + PyObject_HEAD int type; + PyObject *dict; +}; + +/* + * surflock module internals + */ +typedef struct { + PyObject_HEAD PyObject *surface; + PyObject *lockobj; + PyObject *weakrefs; +} pgLifetimeLockObject; + +/* + * surface module internals + */ +struct pgSubSurface_Data { + PyObject *owner; + int pixeloffset; + int offsetx, offsety; +}; + +/* + * color module internals + */ +struct pgColorObject { + PyObject_HEAD Uint8 data[4]; + Uint8 len; +}; + +/* + * include public API + */ +#include "include/_pygame.h" + +/* Slot counts. + * Remember to keep these constants up to date. + */ + +#define PYGAMEAPI_RECT_NUMSLOTS 5 +#define PYGAMEAPI_JOYSTICK_NUMSLOTS 2 +#define PYGAMEAPI_DISPLAY_NUMSLOTS 2 +#define PYGAMEAPI_SURFACE_NUMSLOTS 4 +#define PYGAMEAPI_SURFLOCK_NUMSLOTS 8 +#define PYGAMEAPI_RWOBJECT_NUMSLOTS 6 +#define PYGAMEAPI_PIXELARRAY_NUMSLOTS 2 +#define PYGAMEAPI_COLOR_NUMSLOTS 5 +#define PYGAMEAPI_MATH_NUMSLOTS 2 +#define PYGAMEAPI_BASE_NUMSLOTS 27 +#define PYGAMEAPI_EVENT_NUMSLOTS 6 + +#endif /* _PYGAME_INTERNAL_H */ diff --git a/.venv/Include/site/python3.11/pygame/_surface.h b/.venv/Include/site/python3.11/pygame/_surface.h new file mode 100644 index 0000000..b2b4644 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/_surface.h @@ -0,0 +1,30 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + Copyright (C) 2007 Marcus von Appen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef _SURFACE_H +#define _SURFACE_H + +#include "_pygame.h" +#include "surface.h" + +#endif diff --git a/.venv/Include/site/python3.11/pygame/camera.h b/.venv/Include/site/python3.11/pygame/camera.h new file mode 100644 index 0000000..3079a9a --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/camera.h @@ -0,0 +1,252 @@ +#ifndef CAMERA_H +#define CAMERA_H +/* + pygame - Python Game Library + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include "pygame.h" +#include "pgcompat.h" +#include "doc/camera_doc.h" + +#if defined(__unix__) +#include +#include +#include +#include +#include + +#include /* low-level i/o */ +#include +#include +#include +#include +#include +#include +#include + +/* on freebsd there is no asm/types */ +#ifdef linux +#include /* for videodev2.h */ +#endif + +#include +#endif + +#if defined(__WIN32__) +#define PYGAME_WINDOWS_CAMERA 1 + +#include +#include +#include +#include +#include +#include +#endif + +/* some constants used which are not defined on non-v4l machines. */ +#ifndef V4L2_PIX_FMT_RGB24 +#define V4L2_PIX_FMT_RGB24 'RGB3' +#endif +#ifndef V4L2_PIX_FMT_RGB444 +#define V4L2_PIX_FMT_RGB444 'R444' +#endif +#ifndef V4L2_PIX_FMT_YUYV +#define V4L2_PIX_FMT_YUYV 'YUYV' +#endif +#ifndef V4L2_PIX_FMT_XBGR32 +#define V4L2_PIX_FMT_XBGR32 'XR24' +#endif + +#define CLEAR(x) memset(&(x), 0, sizeof(x)) +#define SAT(c) \ + if (c & (~255)) { \ + if (c < 0) \ + c = 0; \ + else \ + c = 255; \ + } +#define SAT2(c) ((c) & (~255) ? ((c) < 0 ? 0 : 255) : (c)) +#define DEFAULT_WIDTH 640 +#define DEFAULT_HEIGHT 480 +#define RGB_OUT 1 +#define YUV_OUT 2 +#define HSV_OUT 4 +#define CAM_V4L \ + 1 /* deprecated. the incomplete support in pygame was removed */ +#define CAM_V4L2 2 + +struct buffer { + void *start; + size_t length; +}; + +#if defined(__unix__) +typedef struct pgCameraObject { + PyObject_HEAD char *device_name; + int camera_type; + unsigned long pixelformat; + unsigned int color_out; + struct buffer *buffers; + unsigned int n_buffers; + int width; + int height; + int size; + int hflip; + int vflip; + int brightness; + int fd; +} pgCameraObject; +#elif defined(PYGAME_WINDOWS_CAMERA) +typedef struct pgCameraObject { + PyObject_HEAD WCHAR *device_name; + IMFSourceReader *reader; + IMFTransform *transform; + IMFVideoProcessorControl *control; + IMFMediaBuffer *buf; + IMFMediaBuffer *raw_buf; + int buffer_ready; + short open; /* used to signal the update_function to exit */ + HANDLE t_handle; + HRESULT t_error; + int t_error_line; + int width; + int height; + int hflip; + int vflip; + int last_vflip; + int color_out; + unsigned long pixelformat; +} pgCameraObject; + +#else +/* generic definition. + */ + +typedef struct pgCameraObject { + PyObject_HEAD char *device_name; + int camera_type; + unsigned long pixelformat; + unsigned int color_out; + struct buffer *buffers; + unsigned int n_buffers; + int width; + int height; + int size; + int hflip; + int vflip; + int brightness; + int fd; +} pgCameraObject; +#endif + +/* internal functions for colorspace conversion */ +void +colorspace(SDL_Surface *src, SDL_Surface *dst, int cspace); +void +rgb24_to_rgb(const void *src, void *dst, int length, SDL_PixelFormat *format); +void +bgr32_to_rgb(const void *src, void *dst, int length, SDL_PixelFormat *format); +void +rgb444_to_rgb(const void *src, void *dst, int length, SDL_PixelFormat *format); +void +rgb_to_yuv(const void *src, void *dst, int length, unsigned long source, + SDL_PixelFormat *format); +void +rgb_to_hsv(const void *src, void *dst, int length, unsigned long source, + SDL_PixelFormat *format); +void +yuyv_to_rgb(const void *src, void *dst, int length, SDL_PixelFormat *format); +void +yuyv_to_yuv(const void *src, void *dst, int length, SDL_PixelFormat *format); +void +uyvy_to_rgb(const void *src, void *dst, int length, SDL_PixelFormat *format); +void +uyvy_to_yuv(const void *src, void *dst, int length, SDL_PixelFormat *format); +void +sbggr8_to_rgb(const void *src, void *dst, int width, int height, + SDL_PixelFormat *format); +void +yuv420_to_rgb(const void *src, void *dst, int width, int height, + SDL_PixelFormat *format); +void +yuv420_to_yuv(const void *src, void *dst, int width, int height, + SDL_PixelFormat *format); + +#if defined(__unix__) +/* internal functions specific to v4l2 */ +char ** +v4l2_list_cameras(int *num_devices); +int +v4l2_get_control(int fd, int id, int *value); +int +v4l2_set_control(int fd, int id, int value); +PyObject * +v4l2_read_raw(pgCameraObject *self); +int +v4l2_xioctl(int fd, int request, void *arg); +int +v4l2_process_image(pgCameraObject *self, const void *image, int buffer_size, + SDL_Surface *surf); +int +v4l2_query_buffer(pgCameraObject *self); +int +v4l2_read_frame(pgCameraObject *self, SDL_Surface *surf, int *errno_code); +int +v4l2_stop_capturing(pgCameraObject *self); +int +v4l2_start_capturing(pgCameraObject *self); +int +v4l2_uninit_device(pgCameraObject *self); +int +v4l2_init_mmap(pgCameraObject *self); +int +v4l2_init_device(pgCameraObject *self); +int +v4l2_close_device(pgCameraObject *self); +int +v4l2_open_device(pgCameraObject *self); + +#elif defined(PYGAME_WINDOWS_CAMERA) +/* internal functions specific to WINDOWS */ +WCHAR ** +windows_list_cameras(int *num_devices); +int +windows_init_device(pgCameraObject *self); +int +windows_open_device(pgCameraObject *self); +IMFActivate * +windows_device_from_name(WCHAR *device_name); +int +windows_close_device(pgCameraObject *self); +int +windows_read_frame(pgCameraObject *self, SDL_Surface *surf); +int +windows_frame_ready(pgCameraObject *self, int *result); +PyObject * +windows_read_raw(pgCameraObject *self); +int +windows_process_image(pgCameraObject *self, BYTE *data, DWORD buffer_size, + SDL_Surface *surf); +void +windows_dealloc_device(pgCameraObject *self); +int +windows_init_device(pgCameraObject *self); + +#endif + +#endif /* !CAMERA_H */ diff --git a/.venv/Include/site/python3.11/pygame/font.h b/.venv/Include/site/python3.11/pygame/font.h new file mode 100644 index 0000000..f5eedb2 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/font.h @@ -0,0 +1,15 @@ +#ifndef PGFONT_INTERNAL_H +#define PGFONT_INTERNAL_H + +#include + +/* test font initialization */ +#define FONT_INIT_CHECK() \ + if (!(*(int *)PyFONT_C_API[2])) \ + return RAISE(pgExc_SDLError, "font system not initialized") + +#include "include/pygame_font.h" + +#define PYGAMEAPI_FONT_NUMSLOTS 3 + +#endif /* ~PGFONT_INTERNAL_H */ diff --git a/.venv/Include/site/python3.11/pygame/freetype.h b/.venv/Include/site/python3.11/pygame/freetype.h new file mode 100644 index 0000000..fd86bc2 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/freetype.h @@ -0,0 +1,114 @@ +/* + pygame - Python Game Library + Copyright (C) 2009 Vicent Marti + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ +#ifndef _PYGAME_FREETYPE_INTERNAL_H_ +#define _PYGAME_FREETYPE_INTERNAL_H_ + +#include "pgcompat.h" +#include "pgplatform.h" + +#include +#include FT_FREETYPE_H +#include FT_CACHE_H +#include FT_XFREE86_H +#include FT_TRIGONOMETRY_H + +/********************************************************** + * Global module constants + **********************************************************/ + +/* Render styles */ +#define FT_STYLE_NORMAL 0x00 +#define FT_STYLE_STRONG 0x01 +#define FT_STYLE_OBLIQUE 0x02 +#define FT_STYLE_UNDERLINE 0x04 +#define FT_STYLE_WIDE 0x08 +#define FT_STYLE_DEFAULT 0xFF + +/* Bounding box modes */ +#define FT_BBOX_EXACT FT_GLYPH_BBOX_SUBPIXELS +#define FT_BBOX_EXACT_GRIDFIT FT_GLYPH_BBOX_GRIDFIT +#define FT_BBOX_PIXEL FT_GLYPH_BBOX_TRUNCATE +#define FT_BBOX_PIXEL_GRIDFIT FT_GLYPH_BBOX_PIXELS + +/* Rendering flags */ +#define FT_RFLAG_NONE (0) +#define FT_RFLAG_ANTIALIAS (1 << 0) +#define FT_RFLAG_AUTOHINT (1 << 1) +#define FT_RFLAG_VERTICAL (1 << 2) +#define FT_RFLAG_HINTED (1 << 3) +#define FT_RFLAG_KERNING (1 << 4) +#define FT_RFLAG_TRANSFORM (1 << 5) +#define FT_RFLAG_PAD (1 << 6) +#define FT_RFLAG_ORIGIN (1 << 7) +#define FT_RFLAG_UCS4 (1 << 8) +#define FT_RFLAG_USE_BITMAP_STRIKES (1 << 9) +#define FT_RFLAG_DEFAULTS \ + (FT_RFLAG_HINTED | FT_RFLAG_USE_BITMAP_STRIKES | FT_RFLAG_ANTIALIAS) + +#define FT_RENDER_NEWBYTEARRAY 0x0 +#define FT_RENDER_NEWSURFACE 0x1 +#define FT_RENDER_EXISTINGSURFACE 0x2 + +/********************************************************** + * Global module types + **********************************************************/ + +typedef struct _scale_s { + FT_UInt x, y; +} Scale_t; +typedef FT_Angle Angle_t; + +struct fontinternals_; +struct freetypeinstance_; + +typedef struct { + FT_Long font_index; + FT_Open_Args open_args; +} pgFontId; + +typedef struct { + PyObject_HEAD pgFontId id; + PyObject *path; + int is_scalable; + int is_bg_col_set; + + Scale_t face_size; + FT_Int16 style; + FT_Int16 render_flags; + double strength; + double underline_adjustment; + FT_UInt resolution; + Angle_t rotation; + FT_Matrix transform; + FT_Byte fgcolor[4]; + FT_Byte bgcolor[4]; + + struct freetypeinstance_ *freetype; /* Personal reference */ + struct fontinternals_ *_internals; +} pgFontObject; + +#define pgFont_IS_ALIVE(o) (((pgFontObject *)(o))->_internals != 0) + +/* import public API */ +#include "include/pygame_freetype.h" + +#define PYGAMEAPI_FREETYPE_NUMSLOTS 2 + +#endif /* ~_PYGAME_FREETYPE_INTERNAL_H_ */ diff --git a/.venv/Include/site/python3.11/pygame/include/_pygame.h b/.venv/Include/site/python3.11/pygame/include/_pygame.h new file mode 100644 index 0000000..c39ed46 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/_pygame.h @@ -0,0 +1,949 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef _PYGAME_H +#define _PYGAME_H + +/** This header file includes all the definitions for the + ** base pygame extensions. This header only requires + ** Python includes (and SDL.h for functions that use SDL types). + ** The reason for functions prototyped with #define's is + ** to allow for maximum Python portability. It also uses + ** Python as the runtime linker, which allows for late binding. + '' For more information on this style of development, read + ** the Python docs on this subject. + ** http://www.python.org/doc/current/ext/using-cobjects.html + ** + ** If using this to build your own derived extensions, + ** you'll see that the functions available here are mainly + ** used to help convert between python objects and SDL objects. + ** Since this library doesn't add a lot of functionality to + ** the SDL library, it doesn't need to offer a lot either. + ** + ** When initializing your extension module, you must manually + ** import the modules you want to use. (this is the part about + ** using python as the runtime linker). Each module has its + ** own import_xxx() routine. You need to perform this import + ** after you have initialized your own module, and before + ** you call any routines from that module. Since every module + ** in pygame does this, there are plenty of examples. + ** + ** The base module does include some useful conversion routines + ** that you are free to use in your own extension. + **/ + +#include "pgplatform.h" +#include + +/* version macros (defined since version 1.9.5) */ +#define PG_MAJOR_VERSION 2 +#define PG_MINOR_VERSION 5 +#define PG_PATCH_VERSION 2 +#define PG_VERSIONNUM(MAJOR, MINOR, PATCH) \ + (1000 * (MAJOR) + 100 * (MINOR) + (PATCH)) +#define PG_VERSION_ATLEAST(MAJOR, MINOR, PATCH) \ + (PG_VERSIONNUM(PG_MAJOR_VERSION, PG_MINOR_VERSION, PG_PATCH_VERSION) >= \ + PG_VERSIONNUM(MAJOR, MINOR, PATCH)) + +#include "pgcompat.h" + +/* Flag indicating a pg_buffer; used for assertions within callbacks */ +#ifndef NDEBUG +#define PyBUF_PYGAME 0x4000 +#endif +#define PyBUF_HAS_FLAG(f, F) (((f) & (F)) == (F)) + +/* Array information exchange struct C type; inherits from Py_buffer + * + * Pygame uses its own Py_buffer derived C struct as an internal representation + * of an imported array buffer. The extended Py_buffer allows for a + * per-instance release callback, + */ +typedef void (*pybuffer_releaseproc)(Py_buffer *); + +typedef struct pg_bufferinfo_s { + Py_buffer view; + PyObject *consumer; /* Input: Borrowed reference */ + pybuffer_releaseproc release_buffer; +} pg_buffer; + +#include "pgimport.h" + +/* + * BASE module + */ +#ifndef PYGAMEAPI_BASE_INTERNAL +#define pgExc_SDLError ((PyObject *)PYGAMEAPI_GET_SLOT(base, 0)) + +#define pg_RegisterQuit \ + (*(void (*)(void (*)(void)))PYGAMEAPI_GET_SLOT(base, 1)) + +/** + * \brief Convert number like object *obj* to C int and in *val*. + * + * \param obj The Python object to convert. + * \param val A pointer to the C integer to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + * + * \note This function will clear any Python errors. + * \note This function will convert floats to integers. + */ +#define pg_IntFromObj \ + (*(int (*)(PyObject *, int *))PYGAMEAPI_GET_SLOT(base, 2)) + +/** + * \brief Convert number like object at position *i* in sequence *obj* + * to C int and place in argument *val*. + * + * \param obj The Python object to convert. + * \param i The index of the object to convert. + * \param val A pointer to the C integer to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + * + * \note This function will clear any Python errors. + * \note This function will convert floats to integers. + */ +#define pg_IntFromObjIndex \ + (*(int (*)(PyObject *, int, int *))PYGAMEAPI_GET_SLOT(base, 3)) + +/** + * \brief Convert the two number like objects in length 2 sequence *obj* to C + * int and place in arguments *val1* and *val2*. + * + * \param obj The Python two element sequence object to convert. + * \param val A pointer to the C integer to store the result. + * \param val2 A pointer to the C integer to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + * + * \note This function will clear any Python errors. + * \note This function will convert floats to integers. + */ +#define pg_TwoIntsFromObj \ + (*(int (*)(PyObject *, int *, int *))PYGAMEAPI_GET_SLOT(base, 4)) + +/** + * \brief Convert number like object *obj* to C float and in *val*. + * + * \param obj The Python object to convert. + * \param val A pointer to the C float to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + * + * \note This function will clear any Python errors. + */ +#define pg_FloatFromObj \ + (*(int (*)(PyObject *, float *))PYGAMEAPI_GET_SLOT(base, 5)) + +/** + * \brief Convert number like object at position *i* in sequence *obj* to C + * float and place in argument *val*. + * + * \param obj The Python object to convert. + * \param i The index of the object to convert. + * \param val A pointer to the C float to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + * + * \note This function will clear any Python errors. + */ +#define pg_FloatFromObjIndex \ + (*(int (*)(PyObject *, int, float *))PYGAMEAPI_GET_SLOT(base, 6)) + +/** + * \brief Convert the two number like objects in length 2 sequence *obj* to C + * float and place in arguments *val1* and *val2*. + * + * \param obj The Python two element sequence object to convert. + * \param val A pointer to the C float to store the result. + * \param val2 A pointer to the C float to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + * + * \note This function will clear any Python errors. + */ +#define pg_TwoFloatsFromObj \ + (*(int (*)(PyObject *, float *, float *))PYGAMEAPI_GET_SLOT(base, 7)) + +/** + * \brief Convert number like object *obj* to C Uint32 and in *val*. + * + * \param obj The Python object to convert. + * \param val A pointer to the C int to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + */ +#define pg_UintFromObj \ + (*(int (*)(PyObject *, Uint32 *))PYGAMEAPI_GET_SLOT(base, 8)) + +/** + * \brief Convert number like object at position *i* in sequence *obj* to C + * Uint32 and place in argument *val*. + * + * \param obj The Python object to convert. + * \param i The index of the object to convert. + * \param val A pointer to the C int to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + */ +#define pg_UintFromObjIndex \ + (*(int (*)(PyObject *, int, Uint32 *))PYGAMEAPI_GET_SLOT(base, 9)) + +/** + * \brief Initialize all of the pygame modules. + * \returns 1 on success, 0 on failure with PyErr set. + */ +#define pg_mod_autoinit (*(int (*)(const char *))PYGAMEAPI_GET_SLOT(base, 10)) + +/** + * \brief Quit all of the pygame modules. + */ +#define pg_mod_autoquit (*(void (*)(const char *))PYGAMEAPI_GET_SLOT(base, 11)) + +/** + * \brief Convert the color represented by object *obj* into a red, green, + * blue, alpha length 4 C array *RGBA*. + * + * The object must be a length 3 or 4 sequence of numbers having values between + * 0 and 255 inclusive. For a length 3 sequence an alpha value of 255 is + * assumed. + * + * \param obj The Python object to convert. + * \param RGBA A pointer to the C array to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + */ +#define pg_RGBAFromObj \ + (*(int (*)(PyObject *, Uint8 *))PYGAMEAPI_GET_SLOT(base, 12)) + +/** + * \brief Given a Py_buffer, return a python dictionary representing the array + * interface. + * + * \param view_p A pointer to the Py_buffer to convert to a dictionary. + * + * \returns A Python dictionary representing the array interface of the object. + */ +#define pgBuffer_AsArrayInterface \ + (*(PyObject * (*)(Py_buffer *)) PYGAMEAPI_GET_SLOT(base, 13)) + +/** + * \brief Given a Py_buffer, return a python capsule representing the array + * interface. + * + * \param view_p A pointer to the Py_buffer to convert to a capsule. + * + * \returns A Python capsule representing the array interface of the object. + */ +#define pgBuffer_AsArrayStruct \ + (*(PyObject * (*)(Py_buffer *)) PYGAMEAPI_GET_SLOT(base, 14)) + +/** + * \brief Get a buffer object from a given Python object. + * + * \param obj The Python object to get the buffer from. + * \param pg_view_p A pointer to a pg_buffer struct to store the buffer in. + * \param flags The desired buffer access mode. + * + * \returns 0 on success, -1 on failure. + * + * \note This function attempts to get a buffer object from a given Python + * object. If the object supports the buffer protocol, it will be used to + * create the buffer. If not, it will try to get an array interface or + * dictionary representation of the object and use that to create the buffer. + * If none of these methods work, it will raise a ValueError. + * + */ +#define pgObject_GetBuffer \ + (*(int (*)(PyObject *, pg_buffer *, int))PYGAMEAPI_GET_SLOT(base, 15)) + +/** + * \brief Release a pg_buffer object. + * + * \param pg_view_p The pg_buffer object to release. + * + * \note This function releases a pg_buffer object. + * \note some calls to this function expect this function to not clear + * previously set errors. + */ +#define pgBuffer_Release (*(void (*)(pg_buffer *))PYGAMEAPI_GET_SLOT(base, 16)) + +/** + * \brief Write the array interface dictionary buffer description *dict* into a + * Pygame buffer description struct *pg_view_p*. + * + * \param pg_view_p The Pygame buffer description struct to write into. + * \param dict The array interface dictionary to read from. + * \param flags The PyBUF flags describing the view type requested. + * + * \returns 0 on success, or -1 on failure. + */ +#define pgDict_AsBuffer \ + (*(int (*)(pg_buffer *, PyObject *, int))PYGAMEAPI_GET_SLOT(base, 17)) + +#define pgExc_BufferError ((PyObject *)PYGAMEAPI_GET_SLOT(base, 18)) + +/** + * \brief Get the default SDL window created by a pygame.display.set_mode() + * call, or *NULL*. + * + * \return The default window, or *NULL* if no window has been created. + */ +#define pg_GetDefaultWindow \ + (*(SDL_Window * (*)(void)) PYGAMEAPI_GET_SLOT(base, 19)) + +/** + * \brief Set the default SDL window created by a pygame.display.set_mode() + * call. The previous window, if any, is destroyed. Argument *win* may be + * *NULL*. This function is called by pygame.display.set_mode(). + * + * \param win The new default window. May be NULL. + */ +#define pg_SetDefaultWindow \ + (*(void (*)(SDL_Window *))PYGAMEAPI_GET_SLOT(base, 20)) + +/** + * \brief Return a borrowed reference to the Pygame default window display + * surface, or *NULL* if no default window is open. + * + * \return The default renderer, or *NULL* if no renderer has been created. + */ +#define pg_GetDefaultWindowSurface \ + (*(pgSurfaceObject * (*)(void)) PYGAMEAPI_GET_SLOT(base, 21)) + +/** + * \brief Set the Pygame default window display surface. The previous + * surface, if any, is destroyed. Argument *screen* may be *NULL*. This + * function is called by pygame.display.set_mode(). + * + * \param screen The new default window display surface. May be NULL. + */ +#define pg_SetDefaultWindowSurface \ + (*(void (*)(pgSurfaceObject *))PYGAMEAPI_GET_SLOT(base, 22)) + +/** + * \returns NULL if the environment variable PYGAME_BLEND_ALPHA_SDL2 is not + * set, otherwise returns a pointer to the environment variable. + */ +#define pg_EnvShouldBlendAlphaSDL2 \ + (*(char *(*)(void))PYGAMEAPI_GET_SLOT(base, 23)) + +/** + * \brief Convert number like object *obj* to C double and in *val*. + * + * \param obj The Python object to convert. + * \param val A pointer to the C double to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + * + * \note This function will clear any Python errors. + */ +#define pg_DoubleFromObj \ + (*(int (*)(PyObject *, double *))PYGAMEAPI_GET_SLOT(base, 24)) + +/** + * \brief Convert number like object at position *i* in sequence *obj* to C + * double and place in argument *val*. + * + * \param obj The Python object to convert. + * \param i The index of the object to convert. + * \param val A pointer to the C double to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + * + * \note This function will clear any Python errors. + */ +#define pg_DoubleFromObjIndex \ + (*(int (*)(PyObject *, int, double *))PYGAMEAPI_GET_SLOT(base, 25)) + +/** + * \brief Convert the two number like objects in length 2 sequence *obj* to C + * double and place in arguments *val1* and *val2*. + * + * \param obj The Python two element sequence object to convert. + * \param val A pointer to the C double to store the result. + * \param val2 A pointer to the C double to store the result. + * \returns 1 if the conversion was successful, 0 otherwise. + */ +#define pg_TwoDoublesFromObj \ + (*(int (*)(PyObject *, double *, double *))PYGAMEAPI_GET_SLOT(base, 26)) + +#define import_pygame_base() IMPORT_PYGAME_MODULE(base) +#endif /* ~PYGAMEAPI_BASE_INTERNAL */ + +typedef struct { + /** + * \brief The SDL rect wrapped by this object. + */ + PyObject_HEAD SDL_Rect r; + /** + * \brief A list of weak references to this rect. + */ + PyObject *weakreflist; +} pgRectObject; + +/** + * \brief Convert a pgRectObject to an SDL_Rect. + * + * \param obj A pgRectObject instance. + * \returns the SDL_Rect field of *obj*, a pgRect_Type instance. + * + * \note SDL_Rect pgRect_AsRect(PyObject *obj) + */ +#define pgRect_AsRect(x) (((pgRectObject *)x)->r) + +#ifndef PYGAMEAPI_RECT_INTERNAL + +/** + * \brief The Pygame rectangle object type pygame.Rect. + */ +#define pgRect_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(rect, 0)) + +/** + * \brief Check if *obj* is a `pygame.Rect` instance. + * + * \returns true if *obj* is a `pygame.Rect` instance + */ +#define pgRect_Check(obj) ((obj)->ob_type == &pgRect_Type) + +/** + * \brief Create a new `pygame.Rect` instance. + * + * \param r A pointer to an SDL_Rect struct. + * \returns a new `pygame.Rect` object for the SDL_Rect *r*. + * Returns *NULL* on error. + * + * \note PyObject* pgRect_New(SDL_Rect *r) + */ +#define pgRect_New (*(PyObject * (*)(SDL_Rect *)) PYGAMEAPI_GET_SLOT(rect, 1)) + +/** + * \brief Create a new `pygame.Rect` instance from x, y, w, h. + * + * \param x The x coordinate of the rectangle. + * \param y The y coordinate of the rectangle. + * \param w The width of the rectangle. + * \param h The height of the rectangle. + * \returns a new `pygame.Rect` object. Returns *NULL* on error. + * + * \note PyObject* pgRect_New4(int x, int y, int w, int h) + */ +#define pgRect_New4 \ + (*(PyObject * (*)(int, int, int, int)) PYGAMEAPI_GET_SLOT(rect, 2)) + +/** + * \brief Convert a Python object to a `pygame.Rect` instance. + * + * \param obj A Python object. + * A rectangle can be a length 4 sequence integers (x, y, w, h), or a length 2 + * sequence of position (x, y) and size (w, h), or a length 1 tuple containing + * a rectangle representation, or have a method *rect* that returns a + * rectangle. + * + * \param temp A pointer to an SDL_Rect struct to store the result in. + * \returns a pointer to the SDL_Rect field of the `pygame.Rect` instance + * *obj*. Returns *NULL* on error. + * + * \note This function will clear any Python errors. + * \note SDL_Rect* pgRect_FromObject(PyObject *obj, SDL_Rect *temp) + */ +#define pgRect_FromObject \ + (*(SDL_Rect * (*)(PyObject *, SDL_Rect *)) PYGAMEAPI_GET_SLOT(rect, 3)) + +/** + * \brief Normalize a `pygame.Rect` instance. A rect with a negative size + * (negative width and/or height) will be adjusted to have a positive size. + * + * \param rect A pointer to a `pygame.Rect` instance. + * \returns *rect* normalized with positive values only. + * + * \note void pgRect_Normalize(SDL_Rect *rect) + */ +#define pgRect_Normalize (*(void (*)(SDL_Rect *))PYGAMEAPI_GET_SLOT(rect, 4)) + +#define import_pygame_rect() IMPORT_PYGAME_MODULE(rect) +#endif /* ~PYGAMEAPI_RECT_INTERNAL */ + +/* + * JOYSTICK module + */ +typedef struct pgJoystickObject { + PyObject_HEAD int id; + SDL_Joystick *joy; + + /* Joysticks form an intrusive linked list. + * + * Note that we don't maintain refcounts for these so they are weakrefs + * from the Python side. + */ + struct pgJoystickObject *next; + struct pgJoystickObject *prev; +} pgJoystickObject; + +#define pgJoystick_AsID(x) (((pgJoystickObject *)x)->id) +#define pgJoystick_AsSDL(x) (((pgJoystickObject *)x)->joy) + +#ifndef PYGAMEAPI_JOYSTICK_INTERNAL +#define pgJoystick_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(joystick, 0)) + +#define pgJoystick_Check(x) ((x)->ob_type == &pgJoystick_Type) +#define pgJoystick_New (*(PyObject * (*)(int)) PYGAMEAPI_GET_SLOT(joystick, 1)) + +#define import_pygame_joystick() IMPORT_PYGAME_MODULE(joystick) +#endif + +/* + * DISPLAY module + */ + +typedef struct { + Uint32 hw_available : 1; + Uint32 wm_available : 1; + Uint32 blit_hw : 1; + Uint32 blit_hw_CC : 1; + Uint32 blit_hw_A : 1; + Uint32 blit_sw : 1; + Uint32 blit_sw_CC : 1; + Uint32 blit_sw_A : 1; + Uint32 blit_fill : 1; + Uint32 video_mem; + SDL_PixelFormat *vfmt; + SDL_PixelFormat vfmt_data; + int current_w; + int current_h; +} pg_VideoInfo; + +/** + * A pygame object that wraps an SDL_VideoInfo struct. + * The object returned by `pygame.display.Info()` + */ +typedef struct { + PyObject_HEAD pg_VideoInfo info; +} pgVidInfoObject; + +/** + * \brief Convert a pgVidInfoObject to an SDL_VideoInfo. + * + * \note SDL_VideoInfo pgVidInfo_AsVidInfo(PyObject *obj) + * + * \returns the SDL_VideoInfo field of *obj*, a pgVidInfo_Type instance. + * \param obj A pgVidInfo_Type instance. + * + * \note Does not check that *obj* is not `NULL` or an `pgVidInfoObject` + * object. + */ +#define pgVidInfo_AsVidInfo(x) (((pgVidInfoObject *)x)->info) + +#ifndef PYGAMEAPI_DISPLAY_INTERNAL +/** + * \brief The pgVidInfoObject object Python type. + * \note pgVideoInfo_Type is used for the `pygame.display.Info()` object. + */ +#define pgVidInfo_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(display, 0)) + +/** + * \brief Check if *obj* is a pgVidInfoObject. + * + * \returns true if *x* is a `pgVidInfo_Type` instance + * \note Will return false if *x* is a subclass of `pgVidInfo_Type`. + * \note This macro does not check that *x* is not ``NULL``. + * \note int pgVidInfo_Check(PyObject *x) + */ +#define pgVidInfo_Check(x) ((x)->ob_type == &pgVidInfo_Type) + +/** + * \brief Create a new pgVidInfoObject. + * + * \param i A pointer to an SDL_VideoInfo struct. + * \returns a new `pgVidInfoObject` object for the SDL_VideoInfo *i*. + * + * \note PyObject* pgVidInfo_New(SDL_VideoInfo *i) + * \note On failure, raise a Python exception and return `NULL`. + */ +#define pgVidInfo_New \ + (*(PyObject * (*)(pg_VideoInfo *)) PYGAMEAPI_GET_SLOT(display, 1)) + +#define import_pygame_display() IMPORT_PYGAME_MODULE(display) +#endif /* ~PYGAMEAPI_DISPLAY_INTERNAL */ + +/* + * SURFACE module + */ +struct pgSubSurface_Data; +struct SDL_Surface; + +/** + * \brief A pygame object that wraps an SDL_Surface. A `pygame.Surface` + * instance. + */ +typedef struct { + PyObject_HEAD struct SDL_Surface *surf; + /** + * \brief If true, the surface will be freed when the python object is + * destroyed. + */ + int owner; + /** + * \brief The subsurface data for this surface (if a subsurface). + */ + struct pgSubSurface_Data *subsurface; + /** + * \brief A list of weak references to this surface. + */ + PyObject *weakreflist; + /** + * \brief A list of locks for this surface. + */ + PyObject *locklist; + /** + * \brief Usually a buffer object which the surface gets its data from. + */ + PyObject *dependency; +} pgSurfaceObject; + +/** + * \brief Convert a `pygame.Surface` instance to an SDL_Surface. + * + * \param x A `pygame.Surface` instance. + * \returns the SDL_Surface field of *x*, a `pygame.Surface` instance. + * + * \note SDL_Surface* pgSurface_AsSurface(PyObject *x) + */ +#define pgSurface_AsSurface(x) (((pgSurfaceObject *)x)->surf) + +#ifndef PYGAMEAPI_SURFACE_INTERNAL +/** + * \brief The `pygame.Surface` object Python type. + */ +#define pgSurface_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(surface, 0)) + +/** + * \brief Check if *x* is a `pygame.Surface` instance. + * + * \param x The object to check. + * \returns true if *x* is a `pygame.Surface` instance + * + * \note Will return false if *x* is a subclass of `pygame.Surface`. + * \note This macro does not check that *x* is not ``NULL``. + * \note int pgSurface_Check(PyObject *x) + */ +#define pgSurface_Check(x) \ + (PyObject_IsInstance((x), (PyObject *)&pgSurface_Type)) + +/** + * \brief Create a new `pygame.Surface` instance. + * + * \param s The SDL surface to wrap in a python object. + * \param owner If true, the surface will be freed when the python object is + * destroyed. \returns A new new pygame surface instance for SDL surface *s*. + * Returns *NULL* on error. + * + * \note pgSurfaceObject* pgSurface_New2(SDL_Surface *s, int owner) + */ +#define pgSurface_New2 \ + (*(pgSurfaceObject * (*)(SDL_Surface *, int)) \ + PYGAMEAPI_GET_SLOT(surface, 1)) + +/** + * \brief Sets the SDL surface for a `pygame.Surface` instance. + * + * \param self The `pygame.Surface` instance to set the surface for. + * \param s The SDL surface to set. + * \param owner If true, the surface will be freed when the python object is + * destroyed. \returns 0 on success, -1 on failure. + * + * \note int pgSurface_SetSurface(pgSurfaceObject *self, SDL_Surface *s, int + * owner) + */ +#define pgSurface_SetSurface \ + (*(int (*)(pgSurfaceObject *, SDL_Surface *, int))PYGAMEAPI_GET_SLOT( \ + surface, 3)) + +/** + * \brief Blit one surface onto another. + * + * \param dstobj The destination surface. + * \param srcobj The source surface. + * \param dstrect The destination rectangle. + * \param srcrect The source rectangle. + * \param the_args The blit flags. + * \return 0 for success, -1 or -2 for error. + * + * \note Is accessible through the C api. + * \note int pgSurface_Blit(PyObject *dstobj, PyObject *srcobj, SDL_Rect + * *dstrect, SDL_Rect *srcrect, int the_args) + */ +#define pgSurface_Blit \ + (*(int (*)(pgSurfaceObject *, pgSurfaceObject *, SDL_Rect *, SDL_Rect *, \ + int))PYGAMEAPI_GET_SLOT(surface, 2)) + +#define import_pygame_surface() \ + do { \ + IMPORT_PYGAME_MODULE(surface); \ + if (PyErr_Occurred() != NULL) \ + break; \ + IMPORT_PYGAME_MODULE(surflock); \ + } while (0) + +#define pgSurface_New(surface) pgSurface_New2((surface), 1) +#define pgSurface_NewNoOwn(surface) pgSurface_New2((surface), 0) + +#endif /* ~PYGAMEAPI_SURFACE_INTERNAL */ + +/* + * SURFLOCK module + * auto imported/initialized by surface + */ +#ifndef PYGAMEAPI_SURFLOCK_INTERNAL +#define pgLifetimeLock_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(surflock, 0)) + +#define pgLifetimeLock_Check(x) ((x)->ob_type == &pgLifetimeLock_Type) + +#define pgSurface_Prep(x) \ + if ((x)->subsurface) \ + (*(*(void (*)(pgSurfaceObject *))PYGAMEAPI_GET_SLOT(surflock, 1)))(x) + +#define pgSurface_Unprep(x) \ + if ((x)->subsurface) \ + (*(*(void (*)(pgSurfaceObject *))PYGAMEAPI_GET_SLOT(surflock, 2)))(x) + +#define pgSurface_Lock \ + (*(int (*)(pgSurfaceObject *))PYGAMEAPI_GET_SLOT(surflock, 3)) + +#define pgSurface_Unlock \ + (*(int (*)(pgSurfaceObject *))PYGAMEAPI_GET_SLOT(surflock, 4)) + +#define pgSurface_LockBy \ + (*(int (*)(pgSurfaceObject *, PyObject *))PYGAMEAPI_GET_SLOT(surflock, 5)) + +#define pgSurface_UnlockBy \ + (*(int (*)(pgSurfaceObject *, PyObject *))PYGAMEAPI_GET_SLOT(surflock, 6)) + +#define pgSurface_LockLifetime \ + (*(PyObject * (*)(PyObject *, PyObject *)) PYGAMEAPI_GET_SLOT(surflock, 7)) +#endif + +/* + * EVENT module + */ +typedef struct pgEventObject pgEventObject; + +#ifndef PYGAMEAPI_EVENT_INTERNAL +#define pgEvent_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(event, 0)) + +#define pgEvent_Check(x) ((x)->ob_type == &pgEvent_Type) + +#define pgEvent_New \ + (*(PyObject * (*)(SDL_Event *)) PYGAMEAPI_GET_SLOT(event, 1)) + +#define pgEvent_New2 \ + (*(PyObject * (*)(int, PyObject *)) PYGAMEAPI_GET_SLOT(event, 2)) + +#define pgEvent_FillUserEvent \ + (*(int (*)(pgEventObject *, SDL_Event *))PYGAMEAPI_GET_SLOT(event, 3)) + +#define pg_EnableKeyRepeat (*(int (*)(int, int))PYGAMEAPI_GET_SLOT(event, 4)) + +#define pg_GetKeyRepeat (*(void (*)(int *, int *))PYGAMEAPI_GET_SLOT(event, 5)) + +#define import_pygame_event() IMPORT_PYGAME_MODULE(event) +#endif + +/* + * RWOBJECT module + * the rwobject are only needed for C side work, not accessible from python. + */ +#ifndef PYGAMEAPI_RWOBJECT_INTERNAL +#define pgRWops_FromObject \ + (*(SDL_RWops * (*)(PyObject *, char **)) PYGAMEAPI_GET_SLOT(rwobject, 0)) + +#define pgRWops_IsFileObject \ + (*(int (*)(SDL_RWops *))PYGAMEAPI_GET_SLOT(rwobject, 1)) + +#define pg_EncodeFilePath \ + (*(PyObject * (*)(PyObject *, PyObject *)) PYGAMEAPI_GET_SLOT(rwobject, 2)) + +#define pg_EncodeString \ + (*(PyObject * (*)(PyObject *, const char *, const char *, PyObject *)) \ + PYGAMEAPI_GET_SLOT(rwobject, 3)) + +#define pgRWops_FromFileObject \ + (*(SDL_RWops * (*)(PyObject *)) PYGAMEAPI_GET_SLOT(rwobject, 4)) + +#define pgRWops_ReleaseObject \ + (*(int (*)(SDL_RWops *))PYGAMEAPI_GET_SLOT(rwobject, 5)) + +#define import_pygame_rwobject() IMPORT_PYGAME_MODULE(rwobject) + +#endif + +/* + * PixelArray module + */ +#ifndef PYGAMEAPI_PIXELARRAY_INTERNAL +#define PyPixelArray_Type ((PyTypeObject *)PYGAMEAPI_GET_SLOT(pixelarray, 0)) + +#define PyPixelArray_Check(x) ((x)->ob_type == &PyPixelArray_Type) +#define PyPixelArray_New (*(PyObject * (*)) PYGAMEAPI_GET_SLOT(pixelarray, 1)) + +#define import_pygame_pixelarray() IMPORT_PYGAME_MODULE(pixelarray) +#endif /* PYGAMEAPI_PIXELARRAY_INTERNAL */ + +/* + * Color module + */ +typedef struct pgColorObject pgColorObject; + +#ifndef PYGAMEAPI_COLOR_INTERNAL +#define pgColor_Type (*(PyObject *)PYGAMEAPI_GET_SLOT(color, 0)) + +#define pgColor_Check(x) ((x)->ob_type == &pgColor_Type) +#define pgColor_New (*(PyObject * (*)(Uint8 *)) PYGAMEAPI_GET_SLOT(color, 1)) + +#define pgColor_NewLength \ + (*(PyObject * (*)(Uint8 *, Uint8)) PYGAMEAPI_GET_SLOT(color, 3)) + +#define pg_RGBAFromColorObj \ + (*(int (*)(PyObject *, Uint8 *))PYGAMEAPI_GET_SLOT(color, 2)) + +#define pg_RGBAFromFuzzyColorObj \ + (*(int (*)(PyObject *, Uint8 *))PYGAMEAPI_GET_SLOT(color, 4)) + +#define pgColor_AsArray(x) (((pgColorObject *)x)->data) +#define pgColor_NumComponents(x) (((pgColorObject *)x)->len) + +#define import_pygame_color() IMPORT_PYGAME_MODULE(color) +#endif /* PYGAMEAPI_COLOR_INTERNAL */ + +/* + * Math module + */ +#ifndef PYGAMEAPI_MATH_INTERNAL +#define pgVector2_Check(x) \ + ((x)->ob_type == (PyTypeObject *)PYGAMEAPI_GET_SLOT(math, 0)) + +#define pgVector3_Check(x) \ + ((x)->ob_type == (PyTypeObject *)PYGAMEAPI_GET_SLOT(math, 1)) +/* +#define pgVector2_New \ + (*(PyObject*(*)) \ + PYGAMEAPI_GET_SLOT(PyGAME_C_API, 1)) +*/ +#define import_pygame_math() IMPORT_PYGAME_MODULE(math) +#endif /* PYGAMEAPI_MATH_INTERNAL */ + +#define IMPORT_PYGAME_MODULE _IMPORT_PYGAME_MODULE + +/* + * base pygame API slots + * disable slots with NO_PYGAME_C_API + */ +#ifdef PYGAME_H +PYGAMEAPI_DEFINE_SLOTS(base); +PYGAMEAPI_DEFINE_SLOTS(rect); +PYGAMEAPI_DEFINE_SLOTS(cdrom); +PYGAMEAPI_DEFINE_SLOTS(joystick); +PYGAMEAPI_DEFINE_SLOTS(display); +PYGAMEAPI_DEFINE_SLOTS(surface); +PYGAMEAPI_DEFINE_SLOTS(surflock); +PYGAMEAPI_DEFINE_SLOTS(event); +PYGAMEAPI_DEFINE_SLOTS(rwobject); +PYGAMEAPI_DEFINE_SLOTS(pixelarray); +PYGAMEAPI_DEFINE_SLOTS(color); +PYGAMEAPI_DEFINE_SLOTS(math); +#else /* ~PYGAME_H */ +PYGAMEAPI_EXTERN_SLOTS(base); +PYGAMEAPI_EXTERN_SLOTS(rect); +PYGAMEAPI_EXTERN_SLOTS(cdrom); +PYGAMEAPI_EXTERN_SLOTS(joystick); +PYGAMEAPI_EXTERN_SLOTS(display); +PYGAMEAPI_EXTERN_SLOTS(surface); +PYGAMEAPI_EXTERN_SLOTS(surflock); +PYGAMEAPI_EXTERN_SLOTS(event); +PYGAMEAPI_EXTERN_SLOTS(rwobject); +PYGAMEAPI_EXTERN_SLOTS(pixelarray); +PYGAMEAPI_EXTERN_SLOTS(color); +PYGAMEAPI_EXTERN_SLOTS(math); +#endif /* ~PYGAME_H */ + +#endif /* PYGAME_H */ + +/* Use the end of this file for other cross module inline utility + * functions There seems to be no good reason to stick to macro only + * functions in Python 3. + */ + +static PG_INLINE PyObject * +pg_tuple_couple_from_values_int(int val1, int val2) +{ + /* This function turns two input integers into a python tuple object. + * Currently, 5th November 2022, this is faster than using Py_BuildValue + * to do the same thing. + */ + PyObject *tup = PyTuple_New(2); + if (!tup) { + return NULL; + } + + PyObject *tmp = PyLong_FromLong(val1); + if (!tmp) { + Py_DECREF(tup); + return NULL; + } + PyTuple_SET_ITEM(tup, 0, tmp); + + tmp = PyLong_FromLong(val2); + if (!tmp) { + Py_DECREF(tup); + return NULL; + } + PyTuple_SET_ITEM(tup, 1, tmp); + + return tup; +} + +static PG_INLINE PyObject * +pg_tuple_triple_from_values_int(int val1, int val2, int val3) +{ + /* This function turns three input integers into a python tuple object. + * Currently, 5th November 2022, this is faster than using Py_BuildValue + * to do the same thing. + */ + PyObject *tup = PyTuple_New(3); + if (!tup) { + return NULL; + } + + PyObject *tmp = PyLong_FromLong(val1); + if (!tmp) { + Py_DECREF(tup); + return NULL; + } + PyTuple_SET_ITEM(tup, 0, tmp); + + tmp = PyLong_FromLong(val2); + if (!tmp) { + Py_DECREF(tup); + return NULL; + } + PyTuple_SET_ITEM(tup, 1, tmp); + + tmp = PyLong_FromLong(val3); + if (!tmp) { + Py_DECREF(tup); + return NULL; + } + PyTuple_SET_ITEM(tup, 2, tmp); + + return tup; +} diff --git a/.venv/Include/site/python3.11/pygame/include/bitmask.h b/.venv/Include/site/python3.11/pygame/include/bitmask.h new file mode 100644 index 0000000..eee09b7 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/bitmask.h @@ -0,0 +1,171 @@ +/* + Bitmask 1.7 - A pixel-perfect collision detection library. + + Copyright (C) 2002-2005 Ulf Ekstrom except for the bitcount + function which is copyright (C) Donald W. Gillies, 1992. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef BITMASK_H +#define BITMASK_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +/* Define INLINE for different compilers. If your compiler does not + support inlining then there might be a performance hit in + bitmask_overlap_area(). +*/ +#ifndef INLINE +#ifdef __GNUC__ +#define INLINE inline +#else +#ifdef _MSC_VER +#define INLINE __inline +#else +#define INLINE +#endif +#endif +#endif + +#define BITMASK_W unsigned long int +#define BITMASK_W_LEN (sizeof(BITMASK_W) * CHAR_BIT) +#define BITMASK_W_MASK (BITMASK_W_LEN - 1) +#define BITMASK_N(n) ((BITMASK_W)1 << (n)) + +typedef struct bitmask { + int w, h; + BITMASK_W bits[1]; +} bitmask_t; + +/* Creates a bitmask of width w and height h, where + w and h must both be greater than or equal to 0. + The mask is automatically cleared when created. + */ +bitmask_t * +bitmask_create(int w, int h); + +/* Frees all the memory allocated by bitmask_create for m. */ +void +bitmask_free(bitmask_t *m); + +/* Create a copy of the given bitmask. */ +bitmask_t * +bitmask_copy(bitmask_t *m); + +/* Clears all bits in the mask */ +void +bitmask_clear(bitmask_t *m); + +/* Sets all bits in the mask */ +void +bitmask_fill(bitmask_t *m); + +/* Flips all bits in the mask */ +void +bitmask_invert(bitmask_t *m); + +/* Counts the bits in the mask */ +unsigned int +bitmask_count(bitmask_t *m); + +/* Returns nonzero if the bit at (x,y) is set. Coordinates start at + (0,0) */ +static INLINE int +bitmask_getbit(const bitmask_t *m, int x, int y) +{ + return (m->bits[x / BITMASK_W_LEN * m->h + y] & + BITMASK_N(x & BITMASK_W_MASK)) != 0; +} + +/* Sets the bit at (x,y) */ +static INLINE void +bitmask_setbit(bitmask_t *m, int x, int y) +{ + m->bits[x / BITMASK_W_LEN * m->h + y] |= BITMASK_N(x & BITMASK_W_MASK); +} + +/* Clears the bit at (x,y) */ +static INLINE void +bitmask_clearbit(bitmask_t *m, int x, int y) +{ + m->bits[x / BITMASK_W_LEN * m->h + y] &= ~BITMASK_N(x & BITMASK_W_MASK); +} + +/* Returns nonzero if the masks overlap with the given offset. + The overlap tests uses the following offsets (which may be negative): + + +----+----------.. + |A | yoffset + | +-+----------.. + +--|B + |xoffset + | | + : : +*/ +int +bitmask_overlap(const bitmask_t *a, const bitmask_t *b, int xoffset, + int yoffset); + +/* Like bitmask_overlap(), but will also give a point of intersection. + x and y are given in the coordinates of mask a, and are untouched + if there is no overlap. */ +int +bitmask_overlap_pos(const bitmask_t *a, const bitmask_t *b, int xoffset, + int yoffset, int *x, int *y); + +/* Returns the number of overlapping 'pixels' */ +int +bitmask_overlap_area(const bitmask_t *a, const bitmask_t *b, int xoffset, + int yoffset); + +/* Fills a mask with the overlap of two other masks. A bitwise AND. */ +void +bitmask_overlap_mask(const bitmask_t *a, const bitmask_t *b, bitmask_t *c, + int xoffset, int yoffset); + +/* Draws mask b onto mask a (bitwise OR). Can be used to compose large + (game background?) mask from several submasks, which may speed up + the testing. */ + +void +bitmask_draw(bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +void +bitmask_erase(bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +/* Return a new scaled bitmask, with dimensions w*h. The quality of the + scaling may not be perfect for all circumstances, but it should + be reasonable. If either w or h is 0 a clear 1x1 mask is returned. */ +bitmask_t * +bitmask_scale(const bitmask_t *m, int w, int h); + +/* Convolve b into a, drawing the output into o, shifted by offset. If offset + * is 0, then the (x,y) bit will be set if and only if + * bitmask_overlap(a, b, x - b->w - 1, y - b->h - 1) returns true. + * + * Modifies bits o[xoffset ... xoffset + a->w + b->w - 1) + * [yoffset ... yoffset + a->h + b->h - 1). */ +void +bitmask_convolve(const bitmask_t *a, const bitmask_t *b, bitmask_t *o, + int xoffset, int yoffset); + +#ifdef __cplusplus +} /* End of extern "C" { */ +#endif + +#endif diff --git a/.venv/Include/site/python3.11/pygame/include/pgcompat.h b/.venv/Include/site/python3.11/pygame/include/pgcompat.h new file mode 100644 index 0000000..3c09099 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pgcompat.h @@ -0,0 +1,102 @@ +#if !defined(PGCOMPAT_H) +#define PGCOMPAT_H + +#include + +/* In CPython, Py_Exit finalises the python interpreter before calling C exit() + * This does not exist on PyPy, so use exit() directly here */ +#ifdef PYPY_VERSION +#define PG_EXIT(n) exit(n) +#else +#define PG_EXIT(n) Py_Exit(n) +#endif + +/* define common types where SDL is not included */ +#ifndef SDL_VERSION_ATLEAST +#ifdef _MSC_VER +typedef unsigned __int8 uint8_t; +typedef unsigned __int32 uint32_t; +#else +#include +#endif +typedef uint32_t Uint32; +typedef uint8_t Uint8; +#endif /* no SDL */ + +#if defined(SDL_VERSION_ATLEAST) + +#ifndef SDL_WINDOW_VULKAN +#define SDL_WINDOW_VULKAN 0 +#endif + +#ifndef SDL_WINDOW_ALWAYS_ON_TOP +#define SDL_WINDOW_ALWAYS_ON_TOP 0 +#endif + +#ifndef SDL_WINDOW_SKIP_TASKBAR +#define SDL_WINDOW_SKIP_TASKBAR 0 +#endif + +#ifndef SDL_WINDOW_UTILITY +#define SDL_WINDOW_UTILITY 0 +#endif + +#ifndef SDL_WINDOW_TOOLTIP +#define SDL_WINDOW_TOOLTIP 0 +#endif + +#ifndef SDL_WINDOW_POPUP_MENU +#define SDL_WINDOW_POPUP_MENU 0 +#endif + +#ifndef SDL_WINDOW_INPUT_GRABBED +#define SDL_WINDOW_INPUT_GRABBED 0 +#endif + +#ifndef SDL_WINDOW_INPUT_FOCUS +#define SDL_WINDOW_INPUT_FOCUS 0 +#endif + +#ifndef SDL_WINDOW_MOUSE_FOCUS +#define SDL_WINDOW_MOUSE_FOCUS 0 +#endif + +#ifndef SDL_WINDOW_FOREIGN +#define SDL_WINDOW_FOREIGN 0 +#endif + +#ifndef SDL_WINDOW_ALLOW_HIGHDPI +#define SDL_WINDOW_ALLOW_HIGHDPI 0 +#endif + +#ifndef SDL_WINDOW_MOUSE_CAPTURE +#define SDL_WINDOW_MOUSE_CAPTURE 0 +#endif + +#ifndef SDL_WINDOW_ALWAYS_ON_TOP +#define SDL_WINDOW_ALWAYS_ON_TOP 0 +#endif + +#ifndef SDL_WINDOW_SKIP_TASKBAR +#define SDL_WINDOW_SKIP_TASKBAR 0 +#endif + +#ifndef SDL_WINDOW_UTILITY +#define SDL_WINDOW_UTILITY 0 +#endif + +#ifndef SDL_WINDOW_TOOLTIP +#define SDL_WINDOW_TOOLTIP 0 +#endif + +#ifndef SDL_WINDOW_POPUP_MENU +#define SDL_WINDOW_POPUP_MENU 0 +#endif + +#ifndef SDL_MOUSEWHEEL_FLIPPED +#define NO_SDL_MOUSEWHEEL_FLIPPED +#endif + +#endif /* defined(SDL_VERSION_ATLEAST) */ + +#endif /* ~defined(PGCOMPAT_H) */ diff --git a/.venv/Include/site/python3.11/pygame/include/pgimport.h b/.venv/Include/site/python3.11/pygame/include/pgimport.h new file mode 100644 index 0000000..2c2e8cf --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pgimport.h @@ -0,0 +1,67 @@ +#ifndef PGIMPORT_H +#define PGIMPORT_H + +/* Prefix when importing module */ +#define IMPPREFIX "pygame." + +#include "pgcompat.h" + +#define PYGAMEAPI_LOCAL_ENTRY "_PYGAME_C_API" +#define PG_CAPSULE_NAME(m) (IMPPREFIX m "." PYGAMEAPI_LOCAL_ENTRY) + +/* + * fill API slots defined by PYGAMEAPI_DEFINE_SLOTS/PYGAMEAPI_EXTERN_SLOTS + */ +#define _IMPORT_PYGAME_MODULE(module) \ + { \ + PyObject *_mod_##module = PyImport_ImportModule(IMPPREFIX #module); \ + \ + if (_mod_##module != NULL) { \ + PyObject *_c_api = \ + PyObject_GetAttrString(_mod_##module, PYGAMEAPI_LOCAL_ENTRY); \ + \ + Py_DECREF(_mod_##module); \ + if (_c_api != NULL && PyCapsule_CheckExact(_c_api)) { \ + void **localptr = (void **)PyCapsule_GetPointer( \ + _c_api, PG_CAPSULE_NAME(#module)); \ + _PGSLOTS_##module = localptr; \ + } \ + Py_XDECREF(_c_api); \ + } \ + } + +#define PYGAMEAPI_IS_IMPORTED(module) (_PGSLOTS_##module != NULL) + +/* + * source file must include one of these in order to use _IMPORT_PYGAME_MODULE. + * this is set by import_pygame_*() functions. + * disable with NO_PYGAME_C_API + */ +#define PYGAMEAPI_DEFINE_SLOTS(module) void **_PGSLOTS_##module = NULL +#define PYGAMEAPI_EXTERN_SLOTS(module) extern void **_PGSLOTS_##module +#define PYGAMEAPI_GET_SLOT(module, index) _PGSLOTS_##module[(index)] + +/* + * disabled API with NO_PYGAME_C_API; do nothing instead + */ +#ifdef NO_PYGAME_C_API + +#undef PYGAMEAPI_DEFINE_SLOTS +#undef PYGAMEAPI_EXTERN_SLOTS + +#define PYGAMEAPI_DEFINE_SLOTS(module) +#define PYGAMEAPI_EXTERN_SLOTS(module) + +/* intentionally leave this defined to cause a compiler error * +#define PYGAMEAPI_GET_SLOT(api_root, index) +#undef PYGAMEAPI_GET_SLOT*/ + +#undef _IMPORT_PYGAME_MODULE +#define _IMPORT_PYGAME_MODULE(module) + +#endif /* NO_PYGAME_C_API */ + +#define encapsulate_api(ptr, module) \ + PyCapsule_New(ptr, PG_CAPSULE_NAME(module), NULL) + +#endif /* ~PGIMPORT_H */ diff --git a/.venv/Include/site/python3.11/pygame/include/pgplatform.h b/.venv/Include/site/python3.11/pygame/include/pgplatform.h new file mode 100644 index 0000000..4c299da --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pgplatform.h @@ -0,0 +1,87 @@ +/* platform/compiler adjustments */ +#ifndef PG_PLATFORM_H +#define PG_PLATFORM_H + +#if defined(HAVE_SNPRINTF) /* defined in python.h (pyerrors.h) and SDL.h \ + (SDL_config.h) */ +#undef HAVE_SNPRINTF /* remove GCC redefine warning */ +#endif /* HAVE_SNPRINTF */ + +#ifndef PG_INLINE +#if defined(__clang__) +#define PG_INLINE __inline__ __attribute__((__unused__)) +#elif defined(__GNUC__) +#define PG_INLINE __inline__ +#elif defined(_MSC_VER) +#define PG_INLINE __inline +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define PG_INLINE inline +#else +#define PG_INLINE +#endif +#endif /* ~PG_INLINE */ + +// Worth trying this on MSVC/win32 builds to see if provides any speed up +#ifndef PG_FORCEINLINE +#if defined(__clang__) +#define PG_FORCEINLINE __inline__ __attribute__((__unused__)) +#elif defined(__GNUC__) +#define PG_FORCEINLINE __inline__ +#elif defined(_MSC_VER) +#define PG_FORCEINLINE __forceinline +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#define PG_FORCEINLINE inline +#else +#define PG_FORCEINLINE +#endif +#endif /* ~PG_FORCEINLINE */ + +/* This is unconditionally defined in Python.h */ +#if defined(_POSIX_C_SOURCE) +#undef _POSIX_C_SOURCE +#endif + +#if defined(HAVE_SNPRINTF) +#undef HAVE_SNPRINTF +#endif + +/* SDL needs WIN32 */ +#if !defined(WIN32) && \ + (defined(MS_WIN32) || defined(_WIN32) || defined(__WIN32) || \ + defined(__WIN32__) || defined(_WINDOWS)) +#define WIN32 +#endif + +/* Commenting out SSE4_2 stuff because it does not do runtime detection. +#ifndef PG_TARGET_SSE4_2 +#if defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ == 4 && +__GNUC_MINOR__ >= 9) || __GNUC__ >= 5 )) +//The old gcc 4.8 on centos used by manylinux1 does not seem to get sse4.2 +intrinsics #define PG_FUNCTION_TARGET_SSE4_2 __attribute__((target("sse4.2"))) +// No else; we define the fallback later +#endif +#endif +*/ +/* ~PG_TARGET_SSE4_2 */ + +/* +#ifdef PG_FUNCTION_TARGET_SSE4_2 +#if !defined(__SSE4_2__) && !defined(PG_COMPILE_SSE4_2) +#if defined(__x86_64__) || defined(__i386__) +#define PG_COMPILE_SSE4_2 1 +#endif +#endif +#endif +*/ +/* ~PG_TARGET_SSE4_2 */ + +/* Fallback definition of target attribute */ +#ifndef PG_FUNCTION_TARGET_SSE4_2 +#define PG_FUNCTION_TARGET_SSE4_2 +#endif + +#ifndef PG_COMPILE_SSE4_2 +#define PG_COMPILE_SSE4_2 0 +#endif + +#endif /* ~PG_PLATFORM_H */ diff --git a/.venv/Include/site/python3.11/pygame/include/pygame.h b/.venv/Include/site/python3.11/pygame/include/pygame.h new file mode 100644 index 0000000..3772ae6 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pygame.h @@ -0,0 +1,34 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +/* To allow the Pygame C api to be globally shared by all code within an + * extension module built from multiple C files, only include the pygame.h + * header within the top level C file, the one which calls the + * 'import_pygame_*' macros. All other C source files of the module should + * include _pygame.h instead. + */ +#ifndef PYGAME_H +#define PYGAME_H + +#include "_pygame.h" + +#endif diff --git a/.venv/Include/site/python3.11/pygame/include/pygame_bufferproxy.h b/.venv/Include/site/python3.11/pygame/include/pygame_bufferproxy.h new file mode 100644 index 0000000..9284ff2 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pygame_bufferproxy.h @@ -0,0 +1,56 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + Copyright (C) 2007 Rene Dudfield, Richard Goedeken + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +/* Bufferproxy module C api. */ +#if !defined(PG_BUFPROXY_HEADER) +#define PG_BUFPROXY_HEADER + +#include + +typedef PyObject *(*_pgbufproxy_new_t)(PyObject *, getbufferproc); +typedef PyObject *(*_pgbufproxy_get_obj_t)(PyObject *); +typedef int (*_pgbufproxy_trip_t)(PyObject *); + +#ifndef PYGAMEAPI_BUFPROXY_INTERNAL + +#include "pgimport.h" + +PYGAMEAPI_DEFINE_SLOTS(bufferproxy); + +#define pgBufproxy_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(bufferproxy, 0)) + +#define pgBufproxy_Check(x) ((x)->ob_type == &pgBufproxy_Type) + +#define pgBufproxy_New (*(_pgbufproxy_new_t)PYGAMEAPI_GET_SLOT(bufferproxy, 1)) + +#define pgBufproxy_GetParent \ + (*(_pgbufproxy_get_obj_t)PYGAMEAPI_GET_SLOT(bufferproxy, 2)) + +#define pgBufproxy_Trip \ + (*(_pgbufproxy_trip_t)PYGAMEAPI_GET_SLOT(bufferproxy, 3)) + +#define import_pygame_bufferproxy() _IMPORT_PYGAME_MODULE(bufferproxy) + +#endif /* ~PYGAMEAPI_BUFPROXY_INTERNAL */ + +#endif /* ~defined(PG_BUFPROXY_HEADER) */ diff --git a/.venv/Include/site/python3.11/pygame/include/pygame_font.h b/.venv/Include/site/python3.11/pygame/include/pygame_font.h new file mode 100644 index 0000000..aae41bf --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pygame_font.h @@ -0,0 +1,50 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#include +#include "pgplatform.h" + +struct TTF_Font; + +typedef struct { + PyObject_HEAD TTF_Font *font; + PyObject *weakreflist; + unsigned int ttf_init_generation; +} PyFontObject; +#define PyFont_AsFont(x) (((PyFontObject *)x)->font) + +#ifndef PYGAMEAPI_FONT_INTERNAL + +#include "pgimport.h" + +PYGAMEAPI_DEFINE_SLOTS(font); + +#define PyFont_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(font, 0)) +#define PyFont_Check(x) ((x)->ob_type == &PyFont_Type) + +#define PyFont_New (*(PyObject * (*)(TTF_Font *)) PYGAMEAPI_GET_SLOT(font, 1)) + +/*slot 2 taken by FONT_INIT_CHECK*/ + +#define import_pygame_font() _IMPORT_PYGAME_MODULE(font) + +#endif diff --git a/.venv/Include/site/python3.11/pygame/include/pygame_freetype.h b/.venv/Include/site/python3.11/pygame/include/pygame_freetype.h new file mode 100644 index 0000000..90172cc --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pygame_freetype.h @@ -0,0 +1,42 @@ +/* + pygame - Python Game Library + Copyright (C) 2009 Vicent Marti + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ +#ifndef PYGAME_FREETYPE_H_ +#define PYGAME_FREETYPE_H_ + +#include "pgplatform.h" +#include "pgimport.h" +#include "pgcompat.h" + +#ifndef PYGAME_FREETYPE_INTERNAL + +PYGAMEAPI_DEFINE_SLOTS(_freetype); + +#define pgFont_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(_freetype, 0)) + +#define pgFont_Check(x) ((x)->ob_type == &pgFont_Type) + +#define pgFont_New \ + (*(PyObject * (*)(const char *, long)) PYGAMEAPI_GET_SLOT(_freetype, 1)) + +#define import_pygame_freetype() _IMPORT_PYGAME_MODULE(_freetype) + +#endif /* PYGAME_FREETYPE_INTERNAL */ + +#endif /* PYGAME_FREETYPE_H_ */ diff --git a/.venv/Include/site/python3.11/pygame/include/pygame_mask.h b/.venv/Include/site/python3.11/pygame/include/pygame_mask.h new file mode 100644 index 0000000..8dd8f17 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pygame_mask.h @@ -0,0 +1,45 @@ +/* + pygame - Python Game Library + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef PGMASK_H +#define PGMASK_H + +#include +#include "bitmask.h" + +typedef struct { + PyObject_HEAD bitmask_t *mask; + void *bufdata; +} pgMaskObject; + +#define pgMask_AsBitmap(x) (((pgMaskObject *)x)->mask) + +#ifndef PYGAMEAPI_MASK_INTERNAL + +#include "pgimport.h" + +PYGAMEAPI_DEFINE_SLOTS(mask); + +#define pgMask_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(mask, 0)) +#define pgMask_Check(x) ((x)->ob_type == &pgMask_Type) + +#define import_pygame_mask() _IMPORT_PYGAME_MODULE(mask) + +#endif /* ~PYGAMEAPI_MASK_INTERNAL */ + +#endif /* ~PGMASK_H */ diff --git a/.venv/Include/site/python3.11/pygame/include/pygame_mixer.h b/.venv/Include/site/python3.11/pygame/include/pygame_mixer.h new file mode 100644 index 0000000..e19d273 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/pygame_mixer.h @@ -0,0 +1,71 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef PGMIXER_H +#define PGMIXER_H + +#include +#include + +#include "pgcompat.h" + +struct Mix_Chunk; + +typedef struct { + PyObject_HEAD Mix_Chunk *chunk; + Uint8 *mem; + PyObject *weakreflist; +} pgSoundObject; + +typedef struct { + PyObject_HEAD int chan; +} pgChannelObject; + +#define pgSound_AsChunk(x) (((pgSoundObject *)x)->chunk) +#define pgChannel_AsInt(x) (((pgChannelObject *)x)->chan) + +#include "pgimport.h" + +#ifndef PYGAMEAPI_MIXER_INTERNAL + +PYGAMEAPI_DEFINE_SLOTS(mixer); + +#define pgSound_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(mixer, 0)) + +#define pgSound_Check(x) ((x)->ob_type == &pgSound_Type) + +#define pgSound_New \ + (*(PyObject * (*)(Mix_Chunk *)) PYGAMEAPI_GET_SLOT(mixer, 1)) + +#define pgSound_Play \ + (*(PyObject * (*)(PyObject *, PyObject *)) PYGAMEAPI_GET_SLOT(mixer, 2)) + +#define pgChannel_Type (*(PyTypeObject *)PYGAMEAPI_GET_SLOT(mixer, 3)) +#define pgChannel_Check(x) ((x)->ob_type == &pgChannel_Type) + +#define pgChannel_New (*(PyObject * (*)(int)) PYGAMEAPI_GET_SLOT(mixer, 4)) + +#define import_pygame_mixer() _IMPORT_PYGAME_MODULE(mixer) + +#endif /* PYGAMEAPI_MIXER_INTERNAL */ + +#endif /* ~PGMIXER_H */ diff --git a/.venv/Include/site/python3.11/pygame/include/sse2neon.h b/.venv/Include/site/python3.11/pygame/include/sse2neon.h new file mode 100644 index 0000000..a3e3ac0 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/include/sse2neon.h @@ -0,0 +1,6203 @@ +#ifndef SSE2NEON_H +#define SSE2NEON_H + +// This header file provides a simple API translation layer +// between SSE intrinsics to their corresponding Arm/Aarch64 NEON versions +// +// This header file does not yet translate all of the SSE intrinsics. +// +// Contributors to this work are: +// John W. Ratcliff +// Brandon Rowlett +// Ken Fast +// Eric van Beurden +// Alexander Potylitsin +// Hasindu Gamaarachchi +// Jim Huang +// Mark Cheng +// Malcolm James MacLeod +// Devin Hussey (easyaspi314) +// Sebastian Pop +// Developer Ecosystem Engineering +// Danila Kutenin +// François Turban (JishinMaster) +// Pei-Hsuan Hung +// Yang-Hao Yuan + +/* + * sse2neon is freely redistributable under the MIT License. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* Tunable configurations */ + +/* Enable precise implementation of _mm_min_ps and _mm_max_ps + * This would slow down the computation a bit, but gives consistent result with + * x86 SSE2. (e.g. would solve a hole or NaN pixel in the rendering result) + */ +#ifndef SSE2NEON_PRECISE_MINMAX +#define SSE2NEON_PRECISE_MINMAX (0) +#endif + +#if defined(__GNUC__) || defined(__clang__) +#pragma push_macro("FORCE_INLINE") +#pragma push_macro("ALIGN_STRUCT") +#define FORCE_INLINE static inline __attribute__((always_inline)) +#define ALIGN_STRUCT(x) __attribute__((aligned(x))) +#else +#error "Macro name collisions may happen with unsupported compiler." +#ifdef FORCE_INLINE +#undef FORCE_INLINE +#endif +#define FORCE_INLINE static inline +#ifndef ALIGN_STRUCT +#define ALIGN_STRUCT(x) __declspec(align(x)) +#endif +#endif + +#include +#include + +// These cause the build to fail on raspberry pi with 'unsupported target' +// and don't seem to do anything particularly useful +///* Architecture-specific build options */ +///* FIXME: #pragma GCC push_options is only available on GCC */ +//#if defined(__GNUC__) +//#if defined(__arm__) && __ARM_ARCH == 7 +///* According to ARM C Language Extensions Architecture specification, +// * __ARM_NEON is defined to a value indicating the Advanced SIMD (NEON) +// * architecture supported. +// */ +//#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) +//#error "You must enable NEON instructions (e.g. -mfpu=neon) to use SSE2NEON." +//#endif +//#pragma GCC push_options +//#pragma GCC target("fpu=neon") +//#elif defined(__aarch64__) +//#pragma GCC push_options +//#pragma GCC target("+simd") +//#else +//#error "Unsupported target. Must be either ARMv7-A+NEON or ARMv8-A." +//#endif +//#endif + +#include + +/* Rounding functions require either Aarch64 instructions or libm failback */ +#if !defined(__aarch64__) +#include +#endif + +/* "__has_builtin" can be used to query support for built-in functions + * provided by gcc/clang and other compilers that support it. + */ +#ifndef __has_builtin /* GCC prior to 10 or non-clang compilers */ +/* Compatibility with gcc <= 9 */ +#if __GNUC__ <= 9 +#define __has_builtin(x) HAS##x +#define HAS__builtin_popcount 1 +#define HAS__builtin_popcountll 1 +#else +#define __has_builtin(x) 0 +#endif +#endif + +/** + * MACRO for shuffle parameter for _mm_shuffle_ps(). + * Argument fp3 is a digit[0123] that represents the fp from argument "b" + * of mm_shuffle_ps that will be placed in fp3 of result. fp2 is the same + * for fp2 in result. fp1 is a digit[0123] that represents the fp from + * argument "a" of mm_shuffle_ps that will be places in fp1 of result. + * fp0 is the same for fp0 of result. + */ +#define _MM_SHUFFLE(fp3, fp2, fp1, fp0) \ + (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | ((fp0))) + +/* Rounding mode macros. */ +#define _MM_FROUND_TO_NEAREST_INT 0x00 +#define _MM_FROUND_TO_NEG_INF 0x01 +#define _MM_FROUND_TO_POS_INF 0x02 +#define _MM_FROUND_TO_ZERO 0x03 +#define _MM_FROUND_CUR_DIRECTION 0x04 +#define _MM_FROUND_NO_EXC 0x08 + +/* indicate immediate constant argument in a given range */ +#define __constrange(a, b) const + +/* A few intrinsics accept traditional data types like ints or floats, but + * most operate on data types that are specific to SSE. + * If a vector type ends in d, it contains doubles, and if it does not have + * a suffix, it contains floats. An integer vector type can contain any type + * of integer, from chars to shorts to unsigned long longs. + */ +typedef int64x1_t __m64; +typedef float32x4_t __m128; /* 128-bit vector containing 4 floats */ +// On ARM 32-bit architecture, the float64x2_t is not supported. +// The data type __m128d should be represented in a different way for related +// intrinsic conversion. +#if defined(__aarch64__) +typedef float64x2_t __m128d; /* 128-bit vector containing 2 doubles */ +#else +typedef float32x4_t __m128d; +#endif +typedef int64x2_t __m128i; /* 128-bit vector containing integers */ + +/* type-safe casting between types */ + +#define vreinterpretq_m128_f16(x) vreinterpretq_f32_f16(x) +#define vreinterpretq_m128_f32(x) (x) +#define vreinterpretq_m128_f64(x) vreinterpretq_f32_f64(x) + +#define vreinterpretq_m128_u8(x) vreinterpretq_f32_u8(x) +#define vreinterpretq_m128_u16(x) vreinterpretq_f32_u16(x) +#define vreinterpretq_m128_u32(x) vreinterpretq_f32_u32(x) +#define vreinterpretq_m128_u64(x) vreinterpretq_f32_u64(x) + +#define vreinterpretq_m128_s8(x) vreinterpretq_f32_s8(x) +#define vreinterpretq_m128_s16(x) vreinterpretq_f32_s16(x) +#define vreinterpretq_m128_s32(x) vreinterpretq_f32_s32(x) +#define vreinterpretq_m128_s64(x) vreinterpretq_f32_s64(x) + +#define vreinterpretq_f16_m128(x) vreinterpretq_f16_f32(x) +#define vreinterpretq_f32_m128(x) (x) +#define vreinterpretq_f64_m128(x) vreinterpretq_f64_f32(x) + +#define vreinterpretq_u8_m128(x) vreinterpretq_u8_f32(x) +#define vreinterpretq_u16_m128(x) vreinterpretq_u16_f32(x) +#define vreinterpretq_u32_m128(x) vreinterpretq_u32_f32(x) +#define vreinterpretq_u64_m128(x) vreinterpretq_u64_f32(x) + +#define vreinterpretq_s8_m128(x) vreinterpretq_s8_f32(x) +#define vreinterpretq_s16_m128(x) vreinterpretq_s16_f32(x) +#define vreinterpretq_s32_m128(x) vreinterpretq_s32_f32(x) +#define vreinterpretq_s64_m128(x) vreinterpretq_s64_f32(x) + +#define vreinterpretq_m128i_s8(x) vreinterpretq_s64_s8(x) +#define vreinterpretq_m128i_s16(x) vreinterpretq_s64_s16(x) +#define vreinterpretq_m128i_s32(x) vreinterpretq_s64_s32(x) +#define vreinterpretq_m128i_s64(x) (x) + +#define vreinterpretq_m128i_u8(x) vreinterpretq_s64_u8(x) +#define vreinterpretq_m128i_u16(x) vreinterpretq_s64_u16(x) +#define vreinterpretq_m128i_u32(x) vreinterpretq_s64_u32(x) +#define vreinterpretq_m128i_u64(x) vreinterpretq_s64_u64(x) + +#define vreinterpretq_s8_m128i(x) vreinterpretq_s8_s64(x) +#define vreinterpretq_s16_m128i(x) vreinterpretq_s16_s64(x) +#define vreinterpretq_s32_m128i(x) vreinterpretq_s32_s64(x) +#define vreinterpretq_s64_m128i(x) (x) + +#define vreinterpretq_u8_m128i(x) vreinterpretq_u8_s64(x) +#define vreinterpretq_u16_m128i(x) vreinterpretq_u16_s64(x) +#define vreinterpretq_u32_m128i(x) vreinterpretq_u32_s64(x) +#define vreinterpretq_u64_m128i(x) vreinterpretq_u64_s64(x) + +#define vreinterpret_m64_s8(x) vreinterpret_s64_s8(x) +#define vreinterpret_m64_s16(x) vreinterpret_s64_s16(x) +#define vreinterpret_m64_s32(x) vreinterpret_s64_s32(x) +#define vreinterpret_m64_s64(x) (x) + +#define vreinterpret_m64_u8(x) vreinterpret_s64_u8(x) +#define vreinterpret_m64_u16(x) vreinterpret_s64_u16(x) +#define vreinterpret_m64_u32(x) vreinterpret_s64_u32(x) +#define vreinterpret_m64_u64(x) vreinterpret_s64_u64(x) + +#define vreinterpret_m64_f16(x) vreinterpret_s64_f16(x) +#define vreinterpret_m64_f32(x) vreinterpret_s64_f32(x) +#define vreinterpret_m64_f64(x) vreinterpret_s64_f64(x) + +#define vreinterpret_u8_m64(x) vreinterpret_u8_s64(x) +#define vreinterpret_u16_m64(x) vreinterpret_u16_s64(x) +#define vreinterpret_u32_m64(x) vreinterpret_u32_s64(x) +#define vreinterpret_u64_m64(x) vreinterpret_u64_s64(x) + +#define vreinterpret_s8_m64(x) vreinterpret_s8_s64(x) +#define vreinterpret_s16_m64(x) vreinterpret_s16_s64(x) +#define vreinterpret_s32_m64(x) vreinterpret_s32_s64(x) +#define vreinterpret_s64_m64(x) (x) + +#define vreinterpret_f32_m64(x) vreinterpret_f32_s64(x) + +#if defined(__aarch64__) +#define vreinterpretq_m128d_s32(x) vreinterpretq_f64_s32(x) +#define vreinterpretq_m128d_s64(x) vreinterpretq_f64_s64(x) + +#define vreinterpretq_m128d_f64(x) (x) + +#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f64(x) + +#define vreinterpretq_f64_m128d(x) (x) +#else +#define vreinterpretq_m128d_s32(x) vreinterpretq_f32_s32(x) +#define vreinterpretq_m128d_s64(x) vreinterpretq_f32_s64(x) + +#define vreinterpretq_m128d_f32(x) (x) + +#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f32(x) + +#define vreinterpretq_f32_m128d(x) (x) +#endif + +// A struct is defined in this header file called 'SIMDVec' which can be used +// by applications which attempt to access the contents of an _m128 struct +// directly. It is important to note that accessing the __m128 struct directly +// is bad coding practice by Microsoft: @see: +// https://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx +// +// However, some legacy source code may try to access the contents of an __m128 +// struct directly so the developer can use the SIMDVec as an alias for it. Any +// casting must be done manually by the developer, as you cannot cast or +// otherwise alias the base NEON data type for intrinsic operations. +// +// union intended to allow direct access to an __m128 variable using the names +// that the MSVC compiler provides. This union should really only be used when +// trying to access the members of the vector as integer values. GCC/clang +// allow native access to the float members through a simple array access +// operator (in C since 4.6, in C++ since 4.8). +// +// Ideally direct accesses to SIMD vectors should not be used since it can cause +// a performance hit. If it really is needed however, the original __m128 +// variable can be aliased with a pointer to this union and used to access +// individual components. The use of this union should be hidden behind a macro +// that is used throughout the codebase to access the members instead of always +// declaring this type of variable. +typedef union ALIGN_STRUCT(16) SIMDVec { + float m128_f32[4]; // as floats - DON'T USE. Added for convenience. + int8_t m128_i8[16]; // as signed 8-bit integers. + int16_t m128_i16[8]; // as signed 16-bit integers. + int32_t m128_i32[4]; // as signed 32-bit integers. + int64_t m128_i64[2]; // as signed 64-bit integers. + uint8_t m128_u8[16]; // as unsigned 8-bit integers. + uint16_t m128_u16[8]; // as unsigned 16-bit integers. + uint32_t m128_u32[4]; // as unsigned 32-bit integers. + uint64_t m128_u64[2]; // as unsigned 64-bit integers. +} SIMDVec; + +// casting using SIMDVec +#define vreinterpretq_nth_u64_m128i(x, n) (((SIMDVec *) &x)->m128_u64[n]) +#define vreinterpretq_nth_u32_m128i(x, n) (((SIMDVec *) &x)->m128_u32[n]) +#define vreinterpretq_nth_u8_m128i(x, n) (((SIMDVec *) &x)->m128_u8[n]) + +/* Backwards compatibility for compilers with lack of specific type support */ + +// Older gcc does not define vld1q_u8_x4 type +#if defined(__GNUC__) && !defined(__clang__) +#if __GNUC__ <= 9 +FORCE_INLINE uint8x16x4_t vld1q_u8_x4(const uint8_t *p) +{ + uint8x16x4_t ret; + ret.val[0] = vld1q_u8(p + 0); + ret.val[1] = vld1q_u8(p + 16); + ret.val[2] = vld1q_u8(p + 32); + ret.val[3] = vld1q_u8(p + 48); + return ret; +} +#endif +#endif + +/* Function Naming Conventions + * The naming convention of SSE intrinsics is straightforward. A generic SSE + * intrinsic function is given as follows: + * _mm__ + * + * The parts of this format are given as follows: + * 1. describes the operation performed by the intrinsic + * 2. identifies the data type of the function's primary arguments + * + * This last part, , is a little complicated. It identifies the + * content of the input values, and can be set to any of the following values: + * + ps - vectors contain floats (ps stands for packed single-precision) + * + pd - vectors cantain doubles (pd stands for packed double-precision) + * + epi8/epi16/epi32/epi64 - vectors contain 8-bit/16-bit/32-bit/64-bit + * signed integers + * + epu8/epu16/epu32/epu64 - vectors contain 8-bit/16-bit/32-bit/64-bit + * unsigned integers + * + si128 - unspecified 128-bit vector or 256-bit vector + * + m128/m128i/m128d - identifies input vector types when they are different + * than the type of the returned vector + * + * For example, _mm_setzero_ps. The _mm implies that the function returns + * a 128-bit vector. The _ps at the end implies that the argument vectors + * contain floats. + * + * A complete example: Byte Shuffle - pshufb (_mm_shuffle_epi8) + * // Set packed 16-bit integers. 128 bits, 8 short, per 16 bits + * __m128i v_in = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8); + * // Set packed 8-bit integers + * // 128 bits, 16 chars, per 8 bits + * __m128i v_perm = _mm_setr_epi8(1, 0, 2, 3, 8, 9, 10, 11, + * 4, 5, 12, 13, 6, 7, 14, 15); + * // Shuffle packed 8-bit integers + * __m128i v_out = _mm_shuffle_epi8(v_in, v_perm); // pshufb + * + * Data (Number, Binary, Byte Index): + +------+------+-------------+------+------+-------------+ + | 1 | 2 | 3 | 4 | Number + +------+------+------+------+------+------+------+------+ + | 0000 | 0001 | 0000 | 0010 | 0000 | 0011 | 0000 | 0100 | Binary + +------+------+------+------+------+------+------+------+ + | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Index + +------+------+------+------+------+------+------+------+ + + +------+------+------+------+------+------+------+------+ + | 5 | 6 | 7 | 8 | Number + +------+------+------+------+------+------+------+------+ + | 0000 | 0101 | 0000 | 0110 | 0000 | 0111 | 0000 | 1000 | Binary + +------+------+------+------+------+------+------+------+ + | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Index + +------+------+------+------+------+------+------+------+ + * Index (Byte Index): + +------+------+------+------+------+------+------+------+ + | 1 | 0 | 2 | 3 | 8 | 9 | 10 | 11 | + +------+------+------+------+------+------+------+------+ + + +------+------+------+------+------+------+------+------+ + | 4 | 5 | 12 | 13 | 6 | 7 | 14 | 15 | + +------+------+------+------+------+------+------+------+ + * Result: + +------+------+------+------+------+------+------+------+ + | 1 | 0 | 2 | 3 | 8 | 9 | 10 | 11 | Index + +------+------+------+------+------+------+------+------+ + | 0001 | 0000 | 0000 | 0010 | 0000 | 0101 | 0000 | 0110 | Binary + +------+------+------+------+------+------+------+------+ + | 256 | 2 | 5 | 6 | Number + +------+------+------+------+------+------+------+------+ + + +------+------+------+------+------+------+------+------+ + | 4 | 5 | 12 | 13 | 6 | 7 | 14 | 15 | Index + +------+------+------+------+------+------+------+------+ + | 0000 | 0011 | 0000 | 0111 | 0000 | 0100 | 0000 | 1000 | Binary + +------+------+------+------+------+------+------+------+ + | 3 | 7 | 4 | 8 | Number + +------+------+------+------+------+------+-------------+ + */ + +/* Set/get methods */ + +/* Constants for use with _mm_prefetch. */ +enum _mm_hint { + _MM_HINT_NTA = 0, /* load data to L1 and L2 cache, mark it as NTA */ + _MM_HINT_T0 = 1, /* load data to L1 and L2 cache */ + _MM_HINT_T1 = 2, /* load data to L2 cache only */ + _MM_HINT_T2 = 3, /* load data to L2 cache only, mark it as NTA */ + _MM_HINT_ENTA = 4, /* exclusive version of _MM_HINT_NTA */ + _MM_HINT_ET0 = 5, /* exclusive version of _MM_HINT_T0 */ + _MM_HINT_ET1 = 6, /* exclusive version of _MM_HINT_T1 */ + _MM_HINT_ET2 = 7 /* exclusive version of _MM_HINT_T2 */ +}; + +// Loads one cache line of data from address p to a location closer to the +// processor. https://msdn.microsoft.com/en-us/library/84szxsww(v=vs.100).aspx +FORCE_INLINE void _mm_prefetch(const void *p, int i) +{ + (void) i; + __builtin_prefetch(p); +} + +// Copy the lower single-precision (32-bit) floating-point element of a to dst. +// +// dst[31:0] := a[31:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtss_f32 +FORCE_INLINE float _mm_cvtss_f32(__m128 a) +{ + return vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// +// dst[31:0] := Convert_FP32_To_Int32(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtss_si32 +#define _mm_cvtss_si32(a) _mm_cvt_ss2si(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 64-bit integer, and store the result in dst. +// +// dst[63:0] := Convert_FP32_To_Int64(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtss_si64 +FORCE_INLINE int _mm_cvtss_si64(__m128 a) +{ +#if defined(__aarch64__) + return vgetq_lane_s64( + vreinterpretq_s64_s32(vcvtnq_s32_f32(vreinterpretq_f32_m128(a))), 0); +#else + float32_t data = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32_t diff = data - floor(data); + if (diff > 0.5) + return (int64_t) ceil(data); + if (diff == 0.5) { + int64_t f = (int64_t) floor(data); + int64_t c = (int64_t) ceil(data); + return c & 1 ? f : c; + } + return (int64_t) floor(data); +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// +// FOR j := 0 to 1 +// i := 32*j +// dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtt_ps2pi +FORCE_INLINE __m64 _mm_cvtt_ps2pi(__m128 a) +{ + return vreinterpret_m64_s32( + vget_low_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// +// dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtt_ss2si +FORCE_INLINE int _mm_cvtt_ss2si(__m128 a) +{ + return vgetq_lane_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)), 0); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// +// FOR j := 0 to 1 +// i := 32*j +// dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttps_pi32 +#define _mm_cvttps_pi32(a) _mm_cvtt_ps2pi(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// +// dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttss_si32 +#define _mm_cvttss_si32(a) _mm_cvtt_ss2si(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// +// dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttss_si64 +FORCE_INLINE int64_t _mm_cvttss_si64(__m128 a) +{ + return vgetq_lane_s64( + vmovl_s32(vget_low_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)))), 0); +} + +// Sets the 128-bit value to zero +// https://msdn.microsoft.com/en-us/library/vstudio/ys7dw0kh(v=vs.100).aspx +FORCE_INLINE __m128i _mm_setzero_si128(void) +{ + return vreinterpretq_m128i_s32(vdupq_n_s32(0)); +} + +// Clears the four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/vstudio/tk1t2tbz(v=vs.100).aspx +FORCE_INLINE __m128 _mm_setzero_ps(void) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(0)); +} + +// Return vector of type __m128d with all elements set to zero. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_setzero_pd +FORCE_INLINE __m128d _mm_setzero_pd(void) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vdupq_n_f64(0)); +#else + return vreinterpretq_m128d_f32(vdupq_n_f32(0)); +#endif +} + +// Sets the four single-precision, floating-point values to w. +// +// r0 := r1 := r2 := r3 := w +// +// https://msdn.microsoft.com/en-us/library/vstudio/2x1se8ha(v=vs.100).aspx +FORCE_INLINE __m128 _mm_set1_ps(float _w) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(_w)); +} + +// Sets the four single-precision, floating-point values to w. +// https://msdn.microsoft.com/en-us/library/vstudio/2x1se8ha(v=vs.100).aspx +FORCE_INLINE __m128 _mm_set_ps1(float _w) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(_w)); +} + +// Sets the four single-precision, floating-point values to the four inputs. +// https://msdn.microsoft.com/en-us/library/vstudio/afh0zf75(v=vs.100).aspx +FORCE_INLINE __m128 _mm_set_ps(float w, float z, float y, float x) +{ + float ALIGN_STRUCT(16) data[4] = {x, y, z, w}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Copy single-precision (32-bit) floating-point element a to the lower element +// of dst, and zero the upper 3 elements. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set_ss +FORCE_INLINE __m128 _mm_set_ss(float a) +{ + float ALIGN_STRUCT(16) data[4] = {a, 0, 0, 0}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Sets the four single-precision, floating-point values to the four inputs in +// reverse order. +// https://msdn.microsoft.com/en-us/library/vstudio/d2172ct3(v=vs.100).aspx +FORCE_INLINE __m128 _mm_setr_ps(float w, float z, float y, float x) +{ + float ALIGN_STRUCT(16) data[4] = {w, z, y, x}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Sets the 8 signed 16-bit integer values in reverse order. +// +// Return Value +// r0 := w0 +// r1 := w1 +// ... +// r7 := w7 +FORCE_INLINE __m128i _mm_setr_epi16(short w0, + short w1, + short w2, + short w3, + short w4, + short w5, + short w6, + short w7) +{ + int16_t ALIGN_STRUCT(16) data[8] = {w0, w1, w2, w3, w4, w5, w6, w7}; + return vreinterpretq_m128i_s16(vld1q_s16((int16_t *) data)); +} + +// Sets the 4 signed 32-bit integer values in reverse order +// https://technet.microsoft.com/en-us/library/security/27yb3ee5(v=vs.90).aspx +FORCE_INLINE __m128i _mm_setr_epi32(int i3, int i2, int i1, int i0) +{ + int32_t ALIGN_STRUCT(16) data[4] = {i3, i2, i1, i0}; + return vreinterpretq_m128i_s32(vld1q_s32(data)); +} + +// Set packed 64-bit integers in dst with the supplied values in reverse order. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_setr_epi64 +FORCE_INLINE __m128i _mm_setr_epi64(__m64 e1, __m64 e0) +{ + return vreinterpretq_m128i_s64(vcombine_s64(e1, e0)); +} + +// Sets the 16 signed 8-bit integer values to b. +// +// r0 := b +// r1 := b +// ... +// r15 := b +// +// https://msdn.microsoft.com/en-us/library/6e14xhyf(v=vs.100).aspx +FORCE_INLINE __m128i _mm_set1_epi8(signed char w) +{ + return vreinterpretq_m128i_s8(vdupq_n_s8(w)); +} + +// Sets the 8 signed 16-bit integer values to w. +// +// r0 := w +// r1 := w +// ... +// r7 := w +// +// https://msdn.microsoft.com/en-us/library/k0ya3x0e(v=vs.90).aspx +FORCE_INLINE __m128i _mm_set1_epi16(short w) +{ + return vreinterpretq_m128i_s16(vdupq_n_s16(w)); +} + +// Sets the 16 signed 8-bit integer values. +// https://msdn.microsoft.com/en-us/library/x0cx8zd3(v=vs.90).aspx +FORCE_INLINE __m128i _mm_set_epi8(signed char b15, + signed char b14, + signed char b13, + signed char b12, + signed char b11, + signed char b10, + signed char b9, + signed char b8, + signed char b7, + signed char b6, + signed char b5, + signed char b4, + signed char b3, + signed char b2, + signed char b1, + signed char b0) +{ + int8_t ALIGN_STRUCT(16) + data[16] = {(int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, + (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, + (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, + (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; + return (__m128i) vld1q_s8(data); +} + +// Sets the 8 signed 16-bit integer values. +// https://msdn.microsoft.com/en-au/library/3e0fek84(v=vs.90).aspx +FORCE_INLINE __m128i _mm_set_epi16(short i7, + short i6, + short i5, + short i4, + short i3, + short i2, + short i1, + short i0) +{ + int16_t ALIGN_STRUCT(16) data[8] = {i0, i1, i2, i3, i4, i5, i6, i7}; + return vreinterpretq_m128i_s16(vld1q_s16(data)); +} + +// Sets the 16 signed 8-bit integer values in reverse order. +// https://msdn.microsoft.com/en-us/library/2khb9c7k(v=vs.90).aspx +FORCE_INLINE __m128i _mm_setr_epi8(signed char b0, + signed char b1, + signed char b2, + signed char b3, + signed char b4, + signed char b5, + signed char b6, + signed char b7, + signed char b8, + signed char b9, + signed char b10, + signed char b11, + signed char b12, + signed char b13, + signed char b14, + signed char b15) +{ + int8_t ALIGN_STRUCT(16) + data[16] = {(int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, + (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, + (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, + (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; + return (__m128i) vld1q_s8(data); +} + +// Sets the 4 signed 32-bit integer values to i. +// +// r0 := i +// r1 := i +// r2 := i +// r3 := I +// +// https://msdn.microsoft.com/en-us/library/vstudio/h4xscxat(v=vs.100).aspx +FORCE_INLINE __m128i _mm_set1_epi32(int _i) +{ + return vreinterpretq_m128i_s32(vdupq_n_s32(_i)); +} + +// Sets the 2 signed 64-bit integer values to i. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/whtfzhzk(v=vs.100) +FORCE_INLINE __m128i _mm_set1_epi64(__m64 _i) +{ + return vreinterpretq_m128i_s64(vdupq_n_s64((int64_t) _i)); +} + +// Sets the 2 signed 64-bit integer values to i. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set1_epi64x +FORCE_INLINE __m128i _mm_set1_epi64x(int64_t _i) +{ + return vreinterpretq_m128i_s64(vdupq_n_s64(_i)); +} + +// Sets the 4 signed 32-bit integer values. +// https://msdn.microsoft.com/en-us/library/vstudio/019beekt(v=vs.100).aspx +FORCE_INLINE __m128i _mm_set_epi32(int i3, int i2, int i1, int i0) +{ + int32_t ALIGN_STRUCT(16) data[4] = {i0, i1, i2, i3}; + return vreinterpretq_m128i_s32(vld1q_s32(data)); +} + +// Returns the __m128i structure with its two 64-bit integer values +// initialized to the values of the two 64-bit integers passed in. +// https://msdn.microsoft.com/en-us/library/dk2sdw0h(v=vs.120).aspx +FORCE_INLINE __m128i _mm_set_epi64x(int64_t i1, int64_t i2) +{ + int64_t ALIGN_STRUCT(16) data[2] = {i2, i1}; + return vreinterpretq_m128i_s64(vld1q_s64(data)); +} + +// Returns the __m128i structure with its two 64-bit integer values +// initialized to the values of the two 64-bit integers passed in. +// https://msdn.microsoft.com/en-us/library/dk2sdw0h(v=vs.120).aspx +FORCE_INLINE __m128i _mm_set_epi64(__m64 i1, __m64 i2) +{ + return _mm_set_epi64x((int64_t) i1, (int64_t) i2); +} + +// Set packed double-precision (64-bit) floating-point elements in dst with the +// supplied values. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set_pd +FORCE_INLINE __m128d _mm_set_pd(double e1, double e0) +{ + double ALIGN_STRUCT(16) data[2] = {e0, e1}; +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vld1q_f64((float64_t *) data)); +#else + return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) data)); +#endif +} + +// Stores four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/vstudio/s3h4ay6y(v=vs.100).aspx +FORCE_INLINE void _mm_store_ps(float *p, __m128 a) +{ + vst1q_f32(p, vreinterpretq_f32_m128(a)); +} + +// Stores four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/44e30x22(v=vs.100).aspx +FORCE_INLINE void _mm_storeu_ps(float *p, __m128 a) +{ + vst1q_f32(p, vreinterpretq_f32_m128(a)); +} + +// Stores four 32-bit integer values as (as a __m128i value) at the address p. +// https://msdn.microsoft.com/en-us/library/vstudio/edk11s13(v=vs.100).aspx +FORCE_INLINE void _mm_store_si128(__m128i *p, __m128i a) +{ + vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); +} + +// Stores four 32-bit integer values as (as a __m128i value) at the address p. +// https://msdn.microsoft.com/en-us/library/vstudio/edk11s13(v=vs.100).aspx +FORCE_INLINE void _mm_storeu_si128(__m128i *p, __m128i a) +{ + vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); +} + +// Stores the lower single - precision, floating - point value. +// https://msdn.microsoft.com/en-us/library/tzz10fbx(v=vs.100).aspx +FORCE_INLINE void _mm_store_ss(float *p, __m128 a) +{ + vst1q_lane_f32(p, vreinterpretq_f32_m128(a), 0); +} + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary +// or a general-protection exception may be generated. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_store_pd +FORCE_INLINE void _mm_store_pd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) + vst1q_f64((float64_t *) mem_addr, vreinterpretq_f64_m128d(a)); +#else + vst1q_f32((float32_t *) mem_addr, vreinterpretq_f32_m128d(a)); +#endif +} + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory. mem_addr does not need to be aligned on any +// particular boundary. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_storeu_pd +FORCE_INLINE void _mm_storeu_pd(double *mem_addr, __m128d a) +{ + _mm_store_pd(mem_addr, a); +} + +// Reads the lower 64 bits of b and stores them into the lower 64 bits of a. +// https://msdn.microsoft.com/en-us/library/hhwf428f%28v=vs.90%29.aspx +FORCE_INLINE void _mm_storel_epi64(__m128i *a, __m128i b) +{ + uint64x1_t hi = vget_high_u64(vreinterpretq_u64_m128i(*a)); + uint64x1_t lo = vget_low_u64(vreinterpretq_u64_m128i(b)); + *a = vreinterpretq_m128i_u64(vcombine_u64(lo, hi)); +} + +// Stores the lower two single-precision floating point values of a to the +// address p. +// +// *p0 := a0 +// *p1 := a1 +// +// https://msdn.microsoft.com/en-us/library/h54t98ks(v=vs.90).aspx +FORCE_INLINE void _mm_storel_pi(__m64 *p, __m128 a) +{ + *p = vreinterpret_m64_f32(vget_low_f32(a)); +} + +// Stores the upper two single-precision, floating-point values of a to the +// address p. +// +// *p0 := a2 +// *p1 := a3 +// +// https://msdn.microsoft.com/en-us/library/a7525fs8(v%3dvs.90).aspx +FORCE_INLINE void _mm_storeh_pi(__m64 *p, __m128 a) +{ + *p = vreinterpret_m64_f32(vget_high_f32(a)); +} + +// Loads a single single-precision, floating-point value, copying it into all +// four words +// https://msdn.microsoft.com/en-us/library/vstudio/5cdkf716(v=vs.100).aspx +FORCE_INLINE __m128 _mm_load1_ps(const float *p) +{ + return vreinterpretq_m128_f32(vld1q_dup_f32(p)); +} + +// Load a single-precision (32-bit) floating-point element from memory into all +// elements of dst. +// +// dst[31:0] := MEM[mem_addr+31:mem_addr] +// dst[63:32] := MEM[mem_addr+31:mem_addr] +// dst[95:64] := MEM[mem_addr+31:mem_addr] +// dst[127:96] := MEM[mem_addr+31:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_ps1 +#define _mm_load_ps1 _mm_load1_ps + +// Sets the lower two single-precision, floating-point values with 64 +// bits of data loaded from the address p; the upper two values are passed +// through from a. +// +// Return Value +// r0 := *p0 +// r1 := *p1 +// r2 := a2 +// r3 := a3 +// +// https://msdn.microsoft.com/en-us/library/s57cyak2(v=vs.100).aspx +FORCE_INLINE __m128 _mm_loadl_pi(__m128 a, __m64 const *p) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vld1_f32((const float32_t *) p), vget_high_f32(a))); +} + +// Load 4 single-precision (32-bit) floating-point elements from memory into dst +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// +// dst[31:0] := MEM[mem_addr+127:mem_addr+96] +// dst[63:32] := MEM[mem_addr+95:mem_addr+64] +// dst[95:64] := MEM[mem_addr+63:mem_addr+32] +// dst[127:96] := MEM[mem_addr+31:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadr_ps +FORCE_INLINE __m128 _mm_loadr_ps(const float *p) +{ + float32x4_t v = vrev64q_f32(vld1q_f32(p)); + return vreinterpretq_m128_f32(vextq_f32(v, v, 2)); +} + +// Sets the upper two single-precision, floating-point values with 64 +// bits of data loaded from the address p; the lower two values are passed +// through from a. +// +// r0 := a0 +// r1 := a1 +// r2 := *p0 +// r3 := *p1 +// +// https://msdn.microsoft.com/en-us/library/w92wta0x(v%3dvs.100).aspx +FORCE_INLINE __m128 _mm_loadh_pi(__m128 a, __m64 const *p) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vget_low_f32(a), vld1_f32((const float32_t *) p))); +} + +// Loads four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/vstudio/zzd50xxt(v=vs.100).aspx +FORCE_INLINE __m128 _mm_load_ps(const float *p) +{ + return vreinterpretq_m128_f32(vld1q_f32(p)); +} + +// Loads four single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/x1b16s7z%28v=vs.90%29.aspx +FORCE_INLINE __m128 _mm_loadu_ps(const float *p) +{ + // for neon, alignment doesn't matter, so _mm_load_ps and _mm_loadu_ps are + // equivalent for neon + return vreinterpretq_m128_f32(vld1q_f32(p)); +} + +// Load unaligned 16-bit integer from memory into the first element of dst. +// +// dst[15:0] := MEM[mem_addr+15:mem_addr] +// dst[MAX:16] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_si16 +FORCE_INLINE __m128i _mm_loadu_si16(const void *p) +{ + return vreinterpretq_m128i_s16( + vsetq_lane_s16(*(const int16_t *) p, vdupq_n_s16(0), 0)); +} + +// Load unaligned 64-bit integer from memory into the first element of dst. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[MAX:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_si64 +FORCE_INLINE __m128i _mm_loadu_si64(const void *p) +{ + return vreinterpretq_m128i_s64( + vcombine_s64(vld1_s64((const int64_t *) p), vdup_n_s64(0))); +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// lower of dst, and zero the upper element. mem_addr does not need to be +// aligned on any particular boundary. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_sd +FORCE_INLINE __m128d _mm_load_sd(const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vsetq_lane_f64(*p, vdupq_n_f64(0), 0)); +#else + const float *fp = (const float *) p; + float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], 0, 0}; + return vreinterpretq_m128d_f32(vld1q_f32(data)); +#endif +} + +// Loads two double-precision from 16-byte aligned memory, floating-point +// values. +// +// dst[127:0] := MEM[mem_addr+127:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_pd +FORCE_INLINE __m128d _mm_load_pd(const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vld1q_f64(p)); +#else + const float *fp = (const float *) p; + float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], fp[2], fp[3]}; + return vreinterpretq_m128d_f32(vld1q_f32(data)); +#endif +} + +// Loads two double-precision from unaligned memory, floating-point values. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_pd +FORCE_INLINE __m128d _mm_loadu_pd(const double *p) +{ + return _mm_load_pd(p); +} + +// Loads an single - precision, floating - point value into the low word and +// clears the upper three words. +// https://msdn.microsoft.com/en-us/library/548bb9h4%28v=vs.90%29.aspx +FORCE_INLINE __m128 _mm_load_ss(const float *p) +{ + return vreinterpretq_m128_f32(vsetq_lane_f32(*p, vdupq_n_f32(0), 0)); +} + +FORCE_INLINE __m128i _mm_loadl_epi64(__m128i const *p) +{ + /* Load the lower 64 bits of the value pointed to by p into the + * lower 64 bits of the result, zeroing the upper 64 bits of the result. + */ + return vreinterpretq_m128i_s32( + vcombine_s32(vld1_s32((int32_t const *) p), vcreate_s32(0))); +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// lower element of dst, and copy the upper element from a to dst. mem_addr does +// not need to be aligned on any particular boundary. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := a[127:64] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadl_pd +FORCE_INLINE __m128d _mm_loadl_pd(__m128d a, const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vcombine_f64(vld1_f64(p), vget_high_f64(vreinterpretq_f64_m128d(a)))); +#else + return vreinterpretq_m128d_f32( + vcombine_f32(vld1_f32((const float *) p), + vget_high_f32(vreinterpretq_f32_m128d(a)))); +#endif +} + +// Load 2 double-precision (64-bit) floating-point elements from memory into dst +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// +// dst[63:0] := MEM[mem_addr+127:mem_addr+64] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadr_pd +FORCE_INLINE __m128d _mm_loadr_pd(const double *p) +{ +#if defined(__aarch64__) + float64x2_t v = vld1q_f64(p); + return vreinterpretq_m128d_f64(vextq_f64(v, v, 1)); +#else + int64x2_t v = vld1q_s64((const int64_t *) p); + return vreinterpretq_m128d_s64(vextq_s64(v, v, 1)); +#endif +} + +// Sets the low word to the single-precision, floating-point value of b +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/35hdzazd(v=vs.100) +FORCE_INLINE __m128 _mm_move_ss(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32(vgetq_lane_f32(vreinterpretq_f32_m128(b), 0), + vreinterpretq_f32_m128(a), 0)); +} + +// Copy the lower 64-bit integer in a to the lower element of dst, and zero the +// upper element. +// +// dst[63:0] := a[63:0] +// dst[127:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_move_epi64 +FORCE_INLINE __m128i _mm_move_epi64(__m128i a) +{ + return vreinterpretq_m128i_s64( + vsetq_lane_s64(0, vreinterpretq_s64_m128i(a), 1)); +} + +// Return vector of type __m128 with undefined elements. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_undefined_ps +FORCE_INLINE __m128 _mm_undefined_ps(void) +{ + __m128 a; + return a; +} + +/* Logic/Binary operations */ + +// Computes the bitwise AND-NOT of the four single-precision, floating-point +// values of a and b. +// +// r0 := ~a0 & b0 +// r1 := ~a1 & b1 +// r2 := ~a2 & b2 +// r3 := ~a3 & b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/68h7wd02(v=vs.100).aspx +FORCE_INLINE __m128 _mm_andnot_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vbicq_s32(vreinterpretq_s32_m128(b), + vreinterpretq_s32_m128(a))); // *NOTE* argument swap +} + +// Compute the bitwise NOT of packed double-precision (64-bit) floating-point +// elements in a and then AND with b, and store the results in dst. +// +// FOR j := 0 to 1 +// i := j*64 +// dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_andnot_pd +FORCE_INLINE __m128d _mm_andnot_pd(__m128d a, __m128d b) +{ + // *NOTE* argument swap + return vreinterpretq_m128d_s64( + vbicq_s64(vreinterpretq_s64_m128d(b), vreinterpretq_s64_m128d(a))); +} + +// Computes the bitwise AND of the 128-bit value in b and the bitwise NOT of the +// 128-bit value in a. +// +// r := (~a) & b +// +// https://msdn.microsoft.com/en-us/library/vstudio/1beaceh8(v=vs.100).aspx +FORCE_INLINE __m128i _mm_andnot_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vbicq_s32(vreinterpretq_s32_m128i(b), + vreinterpretq_s32_m128i(a))); // *NOTE* argument swap +} + +// Computes the bitwise AND of the 128-bit value in a and the 128-bit value in +// b. +// +// r := a & b +// +// https://msdn.microsoft.com/en-us/library/vstudio/6d1txsa8(v=vs.100).aspx +FORCE_INLINE __m128i _mm_and_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vandq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Computes the bitwise AND of the four single-precision, floating-point values +// of a and b. +// +// r0 := a0 & b0 +// r1 := a1 & b1 +// r2 := a2 & b2 +// r3 := a3 & b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/73ck1xc5(v=vs.100).aspx +FORCE_INLINE __m128 _mm_and_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vandq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Compute the bitwise AND of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// +// FOR j := 0 to 1 +// i := j*64 +// dst[i+63:i] := a[i+63:i] AND b[i+63:i] +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_and_pd +FORCE_INLINE __m128d _mm_and_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + vandq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Computes the bitwise OR of the four single-precision, floating-point values +// of a and b. +// https://msdn.microsoft.com/en-us/library/vstudio/7ctdsyy0(v=vs.100).aspx +FORCE_INLINE __m128 _mm_or_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vorrq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Computes bitwise EXOR (exclusive-or) of the four single-precision, +// floating-point values of a and b. +// https://msdn.microsoft.com/en-us/library/ss6k3wk8(v=vs.100).aspx +FORCE_INLINE __m128 _mm_xor_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + veorq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Compute the bitwise XOR of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// +// FOR j := 0 to 1 +// i := j*64 +// dst[i+63:i] := a[i+63:i] XOR b[i+63:i] +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_xor_pd +FORCE_INLINE __m128d _mm_xor_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + veorq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Computes the bitwise OR of the 128-bit value in a and the 128-bit value in b. +// +// r := a | b +// +// https://msdn.microsoft.com/en-us/library/vstudio/ew8ty0db(v=vs.100).aspx +FORCE_INLINE __m128i _mm_or_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vorrq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Computes the bitwise XOR of the 128-bit value in a and the 128-bit value in +// b. https://msdn.microsoft.com/en-us/library/fzt08www(v=vs.100).aspx +FORCE_INLINE __m128i _mm_xor_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + veorq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Duplicate odd-indexed single-precision (32-bit) floating-point elements +// from a, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_movehdup_ps +FORCE_INLINE __m128 _mm_movehdup_ps(__m128 a) +{ +#if __has_builtin(__builtin_shufflevector) + return vreinterpretq_m128_f32(__builtin_shufflevector( + vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 1, 1, 3, 3)); +#else + float32_t a1 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); + float32_t a3 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 3); + float ALIGN_STRUCT(16) data[4] = {a1, a1, a3, a3}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +#endif +} + +// Duplicate even-indexed single-precision (32-bit) floating-point elements +// from a, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_moveldup_ps +FORCE_INLINE __m128 _mm_moveldup_ps(__m128 a) +{ +#if __has_builtin(__builtin_shufflevector) + return vreinterpretq_m128_f32(__builtin_shufflevector( + vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 0, 0, 2, 2)); +#else + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32_t a2 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 2); + float ALIGN_STRUCT(16) data[4] = {a0, a0, a2, a2}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +#endif +} + +// Moves the upper two values of B into the lower two values of A. +// +// r3 := a3 +// r2 := a2 +// r1 := b3 +// r0 := b2 +FORCE_INLINE __m128 _mm_movehl_ps(__m128 __A, __m128 __B) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(__A)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(__B)); + return vreinterpretq_m128_f32(vcombine_f32(b32, a32)); +} + +// Moves the lower two values of B into the upper two values of A. +// +// r3 := b1 +// r2 := b0 +// r1 := a1 +// r0 := a0 +FORCE_INLINE __m128 _mm_movelh_ps(__m128 __A, __m128 __B) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(__A)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(__B)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); +} + +// Compute the absolute value of packed signed 32-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 3 +// i := j*32 +// dst[i+31:i] := ABS(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_epi32 +FORCE_INLINE __m128i _mm_abs_epi32(__m128i a) +{ + return vreinterpretq_m128i_s32(vabsq_s32(vreinterpretq_s32_m128i(a))); +} + +// Compute the absolute value of packed signed 16-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 7 +// i := j*16 +// dst[i+15:i] := ABS(a[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_epi16 +FORCE_INLINE __m128i _mm_abs_epi16(__m128i a) +{ + return vreinterpretq_m128i_s16(vabsq_s16(vreinterpretq_s16_m128i(a))); +} + +// Compute the absolute value of packed signed 8-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 15 +// i := j*8 +// dst[i+7:i] := ABS(a[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_epi8 +FORCE_INLINE __m128i _mm_abs_epi8(__m128i a) +{ + return vreinterpretq_m128i_s8(vabsq_s8(vreinterpretq_s8_m128i(a))); +} + +// Compute the absolute value of packed signed 32-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 1 +// i := j*32 +// dst[i+31:i] := ABS(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_pi32 +FORCE_INLINE __m64 _mm_abs_pi32(__m64 a) +{ + return vreinterpret_m64_s32(vabs_s32(vreinterpret_s32_m64(a))); +} + +// Compute the absolute value of packed signed 16-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := ABS(a[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_pi16 +FORCE_INLINE __m64 _mm_abs_pi16(__m64 a) +{ + return vreinterpret_m64_s16(vabs_s16(vreinterpret_s16_m64(a))); +} + +// Compute the absolute value of packed signed 8-bit integers in a, and store +// the unsigned results in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := ABS(a[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_pi8 +FORCE_INLINE __m64 _mm_abs_pi8(__m64 a) +{ + return vreinterpret_m64_s8(vabs_s8(vreinterpret_s8_m64(a))); +} + +// Takes the upper 64 bits of a and places it in the low end of the result +// Takes the lower 64 bits of b and places it into the high end of the result. +FORCE_INLINE __m128 _mm_shuffle_ps_1032(__m128 a, __m128 b) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a32, b10)); +} + +// takes the lower two 32-bit values from a and swaps them and places in high +// end of result takes the higher two 32 bit values from b and swaps them and +// places in low end of result. +FORCE_INLINE __m128 _mm_shuffle_ps_2301(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b23 = vrev64_f32(vget_high_f32(vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vcombine_f32(a01, b23)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0321(__m128 a, __m128 b) +{ + float32x2_t a21 = vget_high_f32( + vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); + float32x2_t b03 = vget_low_f32( + vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); + return vreinterpretq_m128_f32(vcombine_f32(a21, b03)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2103(__m128 a, __m128 b) +{ + float32x2_t a03 = vget_low_f32( + vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); + float32x2_t b21 = vget_high_f32( + vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); + return vreinterpretq_m128_f32(vcombine_f32(a03, b21)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1010(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1001(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a01, b10)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0101(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vcombine_f32(a01, b01)); +} + +// keeps the low 64 bits of b in the low and puts the high 64 bits of a in the +// high +FORCE_INLINE __m128 _mm_shuffle_ps_3210(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b32)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0011(__m128 a, __m128 b) +{ + float32x2_t a11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 1); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a11, b00)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0022(__m128 a, __m128 b) +{ + float32x2_t a22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a22, b00)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2200(__m128 a, __m128 b) +{ + float32x2_t a00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t b22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a00, b22)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_3202(__m128 a, __m128 b) +{ + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32x2_t a22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t a02 = vset_lane_f32(a0, a22, 1); /* TODO: use vzip ?*/ + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a02, b32)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1133(__m128 a, __m128 b) +{ + float32x2_t a33 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 1); + float32x2_t b11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 1); + return vreinterpretq_m128_f32(vcombine_f32(a33, b11)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2010(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32_t b2 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a10, b20)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2001(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32_t b2 = vgetq_lane_f32(b, 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a01, b20)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2032(__m128 a, __m128 b) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32_t b2 = vgetq_lane_f32(b, 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a32, b20)); +} + +// NEON does not support a general purpose permute intrinsic +// Selects four specific single-precision, floating-point values from a and b, +// based on the mask i. +// +// C equivalent: +// __m128 _mm_shuffle_ps_default(__m128 a, __m128 b, +// __constrange(0, 255) int imm) { +// __m128 ret; +// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; +// ret[2] = b[(imm >> 4) & 0x03]; ret[3] = b[(imm >> 6) & 0x03]; +// return ret; +// } +// +// https://msdn.microsoft.com/en-us/library/vstudio/5f0858x0(v=vs.100).aspx +#define _mm_shuffle_ps_default(a, b, imm) \ + __extension__({ \ + float32x4_t ret; \ + ret = vmovq_n_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(a), (imm) & (0x3))); \ + ret = vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(a), ((imm) >> 2) & 0x3), \ + ret, 1); \ + ret = vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 4) & 0x3), \ + ret, 2); \ + ret = vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 6) & 0x3), \ + ret, 3); \ + vreinterpretq_m128_f32(ret); \ + }) + +// FORCE_INLINE __m128 _mm_shuffle_ps(__m128 a, __m128 b, __constrange(0,255) +// int imm) +#if __has_builtin(__builtin_shufflevector) +#define _mm_shuffle_ps(a, b, imm) \ + __extension__({ \ + float32x4_t _input1 = vreinterpretq_f32_m128(a); \ + float32x4_t _input2 = vreinterpretq_f32_m128(b); \ + float32x4_t _shuf = __builtin_shufflevector( \ + _input1, _input2, (imm) & (0x3), ((imm) >> 2) & 0x3, \ + (((imm) >> 4) & 0x3) + 4, (((imm) >> 6) & 0x3) + 4); \ + vreinterpretq_m128_f32(_shuf); \ + }) +#else // generic +#define _mm_shuffle_ps(a, b, imm) \ + __extension__({ \ + __m128 ret; \ + switch (imm) { \ + case _MM_SHUFFLE(1, 0, 3, 2): \ + ret = _mm_shuffle_ps_1032((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 3, 0, 1): \ + ret = _mm_shuffle_ps_2301((a), (b)); \ + break; \ + case _MM_SHUFFLE(0, 3, 2, 1): \ + ret = _mm_shuffle_ps_0321((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 1, 0, 3): \ + ret = _mm_shuffle_ps_2103((a), (b)); \ + break; \ + case _MM_SHUFFLE(1, 0, 1, 0): \ + ret = _mm_movelh_ps((a), (b)); \ + break; \ + case _MM_SHUFFLE(1, 0, 0, 1): \ + ret = _mm_shuffle_ps_1001((a), (b)); \ + break; \ + case _MM_SHUFFLE(0, 1, 0, 1): \ + ret = _mm_shuffle_ps_0101((a), (b)); \ + break; \ + case _MM_SHUFFLE(3, 2, 1, 0): \ + ret = _mm_shuffle_ps_3210((a), (b)); \ + break; \ + case _MM_SHUFFLE(0, 0, 1, 1): \ + ret = _mm_shuffle_ps_0011((a), (b)); \ + break; \ + case _MM_SHUFFLE(0, 0, 2, 2): \ + ret = _mm_shuffle_ps_0022((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 2, 0, 0): \ + ret = _mm_shuffle_ps_2200((a), (b)); \ + break; \ + case _MM_SHUFFLE(3, 2, 0, 2): \ + ret = _mm_shuffle_ps_3202((a), (b)); \ + break; \ + case _MM_SHUFFLE(3, 2, 3, 2): \ + ret = _mm_movehl_ps((b), (a)); \ + break; \ + case _MM_SHUFFLE(1, 1, 3, 3): \ + ret = _mm_shuffle_ps_1133((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 0, 1, 0): \ + ret = _mm_shuffle_ps_2010((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 0, 0, 1): \ + ret = _mm_shuffle_ps_2001((a), (b)); \ + break; \ + case _MM_SHUFFLE(2, 0, 3, 2): \ + ret = _mm_shuffle_ps_2032((a), (b)); \ + break; \ + default: \ + ret = _mm_shuffle_ps_default((a), (b), (imm)); \ + break; \ + } \ + ret; \ + }) +#endif + +// Takes the upper 64 bits of a and places it in the low end of the result +// Takes the lower 64 bits of a and places it into the high end of the result. +FORCE_INLINE __m128i _mm_shuffle_epi_1032(__m128i a) +{ + int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a32, a10)); +} + +// takes the lower two 32-bit values from a and swaps them and places in low end +// of result takes the higher two 32 bit values from a and swaps them and places +// in high end of result. +FORCE_INLINE __m128i _mm_shuffle_epi_2301(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + int32x2_t a23 = vrev64_s32(vget_high_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a23)); +} + +// rotates the least significant 32 bits into the most signficant 32 bits, and +// shifts the rest down +FORCE_INLINE __m128i _mm_shuffle_epi_0321(__m128i a) +{ + return vreinterpretq_m128i_s32( + vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 1)); +} + +// rotates the most significant 32 bits into the least signficant 32 bits, and +// shifts the rest up +FORCE_INLINE __m128i _mm_shuffle_epi_2103(__m128i a) +{ + return vreinterpretq_m128i_s32( + vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 3)); +} + +// gets the lower 64 bits of a, and places it in the upper 64 bits +// gets the lower 64 bits of a and places it in the lower 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_1010(__m128i a) +{ + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a10, a10)); +} + +// gets the lower 64 bits of a, swaps the 0 and 1 elements, and places it in the +// lower 64 bits gets the lower 64 bits of a, and places it in the upper 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_1001(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a10)); +} + +// gets the lower 64 bits of a, swaps the 0 and 1 elements and places it in the +// upper 64 bits gets the lower 64 bits of a, swaps the 0 and 1 elements, and +// places it in the lower 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_0101(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a01)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_2211(__m128i a) +{ + int32x2_t a11 = vdup_lane_s32(vget_low_s32(vreinterpretq_s32_m128i(a)), 1); + int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); + return vreinterpretq_m128i_s32(vcombine_s32(a11, a22)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_0122(__m128i a) +{ + int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a22, a01)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_3332(__m128i a) +{ + int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t a33 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 1); + return vreinterpretq_m128i_s32(vcombine_s32(a32, a33)); +} + +// Shuffle packed 8-bit integers in a according to shuffle control mask in the +// corresponding 8-bit element of b, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_shuffle_epi8 +FORCE_INLINE __m128i _mm_shuffle_epi8(__m128i a, __m128i b) +{ + int8x16_t tbl = vreinterpretq_s8_m128i(a); // input a + uint8x16_t idx = vreinterpretq_u8_m128i(b); // input b + uint8x16_t idx_masked = + vandq_u8(idx, vdupq_n_u8(0x8F)); // avoid using meaningless bits +#if defined(__aarch64__) + return vreinterpretq_m128i_s8(vqtbl1q_s8(tbl, idx_masked)); +#elif defined(__GNUC__) + int8x16_t ret; + // %e and %f represent the even and odd D registers + // respectively. + __asm__ __volatile__( + "vtbl.8 %e[ret], {%e[tbl], %f[tbl]}, %e[idx]\n" + "vtbl.8 %f[ret], {%e[tbl], %f[tbl]}, %f[idx]\n" + : [ret] "=&w"(ret) + : [tbl] "w"(tbl), [idx] "w"(idx_masked)); + return vreinterpretq_m128i_s8(ret); +#else + // use this line if testing on aarch64 + int8x8x2_t a_split = {vget_low_s8(tbl), vget_high_s8(tbl)}; + return vreinterpretq_m128i_s8( + vcombine_s8(vtbl2_s8(a_split, vget_low_u8(idx_masked)), + vtbl2_s8(a_split, vget_high_u8(idx_masked)))); +#endif +} + +// C equivalent: +// __m128i _mm_shuffle_epi32_default(__m128i a, +// __constrange(0, 255) int imm) { +// __m128i ret; +// ret[0] = a[imm & 0x3]; ret[1] = a[(imm >> 2) & 0x3]; +// ret[2] = a[(imm >> 4) & 0x03]; ret[3] = a[(imm >> 6) & 0x03]; +// return ret; +// } +#define _mm_shuffle_epi32_default(a, imm) \ + __extension__({ \ + int32x4_t ret; \ + ret = vmovq_n_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm) & (0x3))); \ + ret = vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 2) & 0x3), \ + ret, 1); \ + ret = vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 4) & 0x3), \ + ret, 2); \ + ret = vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 6) & 0x3), \ + ret, 3); \ + vreinterpretq_m128i_s32(ret); \ + }) + +// FORCE_INLINE __m128i _mm_shuffle_epi32_splat(__m128i a, __constrange(0,255) +// int imm) +#if defined(__aarch64__) +#define _mm_shuffle_epi32_splat(a, imm) \ + __extension__({ \ + vreinterpretq_m128i_s32( \ + vdupq_laneq_s32(vreinterpretq_s32_m128i(a), (imm))); \ + }) +#else +#define _mm_shuffle_epi32_splat(a, imm) \ + __extension__({ \ + vreinterpretq_m128i_s32( \ + vdupq_n_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)))); \ + }) +#endif + +// Shuffles the 4 signed or unsigned 32-bit integers in a as specified by imm. +// https://msdn.microsoft.com/en-us/library/56f67xbk%28v=vs.90%29.aspx +// FORCE_INLINE __m128i _mm_shuffle_epi32(__m128i a, +// __constrange(0,255) int imm) +#if __has_builtin(__builtin_shufflevector) +#define _mm_shuffle_epi32(a, imm) \ + __extension__({ \ + int32x4_t _input = vreinterpretq_s32_m128i(a); \ + int32x4_t _shuf = __builtin_shufflevector( \ + _input, _input, (imm) & (0x3), ((imm) >> 2) & 0x3, \ + ((imm) >> 4) & 0x3, ((imm) >> 6) & 0x3); \ + vreinterpretq_m128i_s32(_shuf); \ + }) +#else // generic +#define _mm_shuffle_epi32(a, imm) \ + __extension__({ \ + __m128i ret; \ + switch (imm) { \ + case _MM_SHUFFLE(1, 0, 3, 2): \ + ret = _mm_shuffle_epi_1032((a)); \ + break; \ + case _MM_SHUFFLE(2, 3, 0, 1): \ + ret = _mm_shuffle_epi_2301((a)); \ + break; \ + case _MM_SHUFFLE(0, 3, 2, 1): \ + ret = _mm_shuffle_epi_0321((a)); \ + break; \ + case _MM_SHUFFLE(2, 1, 0, 3): \ + ret = _mm_shuffle_epi_2103((a)); \ + break; \ + case _MM_SHUFFLE(1, 0, 1, 0): \ + ret = _mm_shuffle_epi_1010((a)); \ + break; \ + case _MM_SHUFFLE(1, 0, 0, 1): \ + ret = _mm_shuffle_epi_1001((a)); \ + break; \ + case _MM_SHUFFLE(0, 1, 0, 1): \ + ret = _mm_shuffle_epi_0101((a)); \ + break; \ + case _MM_SHUFFLE(2, 2, 1, 1): \ + ret = _mm_shuffle_epi_2211((a)); \ + break; \ + case _MM_SHUFFLE(0, 1, 2, 2): \ + ret = _mm_shuffle_epi_0122((a)); \ + break; \ + case _MM_SHUFFLE(3, 3, 3, 2): \ + ret = _mm_shuffle_epi_3332((a)); \ + break; \ + case _MM_SHUFFLE(0, 0, 0, 0): \ + ret = _mm_shuffle_epi32_splat((a), 0); \ + break; \ + case _MM_SHUFFLE(1, 1, 1, 1): \ + ret = _mm_shuffle_epi32_splat((a), 1); \ + break; \ + case _MM_SHUFFLE(2, 2, 2, 2): \ + ret = _mm_shuffle_epi32_splat((a), 2); \ + break; \ + case _MM_SHUFFLE(3, 3, 3, 3): \ + ret = _mm_shuffle_epi32_splat((a), 3); \ + break; \ + default: \ + ret = _mm_shuffle_epi32_default((a), (imm)); \ + break; \ + } \ + ret; \ + }) +#endif + +// Shuffles the lower 4 signed or unsigned 16-bit integers in a as specified +// by imm. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/y41dkk37(v=vs.100) +// FORCE_INLINE __m128i _mm_shufflelo_epi16_function(__m128i a, +// __constrange(0,255) int +// imm) +#define _mm_shufflelo_epi16_function(a, imm) \ + __extension__({ \ + int16x8_t ret = vreinterpretq_s16_m128i(a); \ + int16x4_t lowBits = vget_low_s16(ret); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, (imm) & (0x3)), ret, 0); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 2) & 0x3), ret, \ + 1); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 4) & 0x3), ret, \ + 2); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 6) & 0x3), ret, \ + 3); \ + vreinterpretq_m128i_s16(ret); \ + }) + +// FORCE_INLINE __m128i _mm_shufflelo_epi16(__m128i a, +// __constrange(0,255) int imm) +#if __has_builtin(__builtin_shufflevector) +#define _mm_shufflelo_epi16(a, imm) \ + __extension__({ \ + int16x8_t _input = vreinterpretq_s16_m128i(a); \ + int16x8_t _shuf = __builtin_shufflevector( \ + _input, _input, ((imm) & (0x3)), (((imm) >> 2) & 0x3), \ + (((imm) >> 4) & 0x3), (((imm) >> 6) & 0x3), 4, 5, 6, 7); \ + vreinterpretq_m128i_s16(_shuf); \ + }) +#else // generic +#define _mm_shufflelo_epi16(a, imm) _mm_shufflelo_epi16_function((a), (imm)) +#endif + +// Shuffles the upper 4 signed or unsigned 16-bit integers in a as specified +// by imm. +// https://msdn.microsoft.com/en-us/library/13ywktbs(v=vs.100).aspx +// FORCE_INLINE __m128i _mm_shufflehi_epi16_function(__m128i a, +// __constrange(0,255) int +// imm) +#define _mm_shufflehi_epi16_function(a, imm) \ + __extension__({ \ + int16x8_t ret = vreinterpretq_s16_m128i(a); \ + int16x4_t highBits = vget_high_s16(ret); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, (imm) & (0x3)), ret, 4); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 2) & 0x3), ret, \ + 5); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 4) & 0x3), ret, \ + 6); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 6) & 0x3), ret, \ + 7); \ + vreinterpretq_m128i_s16(ret); \ + }) + +// FORCE_INLINE __m128i _mm_shufflehi_epi16(__m128i a, +// __constrange(0,255) int imm) +#if __has_builtin(__builtin_shufflevector) +#define _mm_shufflehi_epi16(a, imm) \ + __extension__({ \ + int16x8_t _input = vreinterpretq_s16_m128i(a); \ + int16x8_t _shuf = __builtin_shufflevector( \ + _input, _input, 0, 1, 2, 3, ((imm) & (0x3)) + 4, \ + (((imm) >> 2) & 0x3) + 4, (((imm) >> 4) & 0x3) + 4, \ + (((imm) >> 6) & 0x3) + 4); \ + vreinterpretq_m128i_s16(_shuf); \ + }) +#else // generic +#define _mm_shufflehi_epi16(a, imm) _mm_shufflehi_epi16_function((a), (imm)) +#endif + +// Blend packed 16-bit integers from a and b using control mask imm8, and store +// the results in dst. +// +// FOR j := 0 to 7 +// i := j*16 +// IF imm8[j] +// dst[i+15:i] := b[i+15:i] +// ELSE +// dst[i+15:i] := a[i+15:i] +// FI +// ENDFOR +// FORCE_INLINE __m128i _mm_blend_epi16(__m128i a, __m128i b, +// __constrange(0,255) int imm) +#define _mm_blend_epi16(a, b, imm) \ + __extension__({ \ + const uint16_t _mask[8] = {((imm) & (1 << 0)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 1)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 2)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 3)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 4)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 5)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 6)) ? 0xFFFF : 0x0000, \ + ((imm) & (1 << 7)) ? 0xFFFF : 0x0000}; \ + uint16x8_t _mask_vec = vld1q_u16(_mask); \ + uint16x8_t _a = vreinterpretq_u16_m128i(a); \ + uint16x8_t _b = vreinterpretq_u16_m128i(b); \ + vreinterpretq_m128i_u16(vbslq_u16(_mask_vec, _b, _a)); \ + }) + +// Blend packed 8-bit integers from a and b using mask, and store the results in +// dst. +// +// FOR j := 0 to 15 +// i := j*8 +// IF mask[i+7] +// dst[i+7:i] := b[i+7:i] +// ELSE +// dst[i+7:i] := a[i+7:i] +// FI +// ENDFOR +FORCE_INLINE __m128i _mm_blendv_epi8(__m128i _a, __m128i _b, __m128i _mask) +{ + // Use a signed shift right to create a mask with the sign bit + uint8x16_t mask = + vreinterpretq_u8_s8(vshrq_n_s8(vreinterpretq_s8_m128i(_mask), 7)); + uint8x16_t a = vreinterpretq_u8_m128i(_a); + uint8x16_t b = vreinterpretq_u8_m128i(_b); + return vreinterpretq_m128i_u8(vbslq_u8(mask, b, a)); +} + +/* Shifts */ + + +// Shift packed 16-bit integers in a right by imm while shifting in sign +// bits, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srai_epi16 +FORCE_INLINE __m128i _mm_srai_epi16(__m128i a, int imm) +{ + const int count = (imm & ~15) ? 15 : imm; + return (__m128i) vshlq_s16((int16x8_t) a, vdupq_n_s16(-count)); +} + +// Shifts the 8 signed or unsigned 16-bit integers in a left by count bits while +// shifting in zeros. +// +// r0 := a0 << count +// r1 := a1 << count +// ... +// r7 := a7 << count +// +// https://msdn.microsoft.com/en-us/library/es73bcsy(v=vs.90).aspx +#define _mm_slli_epi16(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) <= 0) { \ + ret = a; \ + } else if ((imm) > 15) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_s16( \ + vshlq_n_s16(vreinterpretq_s16_m128i(a), (imm))); \ + } \ + ret; \ + }) + +// Shifts the 4 signed or unsigned 32-bit integers in a left by count bits while +// shifting in zeros. : +// https://msdn.microsoft.com/en-us/library/z2k3bbtb%28v=vs.90%29.aspx +// FORCE_INLINE __m128i _mm_slli_epi32(__m128i a, __constrange(0,255) int imm) +FORCE_INLINE __m128i _mm_slli_epi32(__m128i a, int imm) +{ + if (imm <= 0) /* TODO: add constant range macro: [0, 255] */ + return a; + if (imm > 31) /* TODO: add unlikely macro */ + return _mm_setzero_si128(); + return vreinterpretq_m128i_s32( + vshlq_s32(vreinterpretq_s32_m128i(a), vdupq_n_s32(imm))); +} + +// Shift packed 64-bit integers in a left by imm8 while shifting in zeros, and +// store the results in dst. +FORCE_INLINE __m128i _mm_slli_epi64(__m128i a, int imm) +{ + if (imm <= 0) /* TODO: add constant range macro: [0, 255] */ + return a; + if (imm > 63) /* TODO: add unlikely macro */ + return _mm_setzero_si128(); + return vreinterpretq_m128i_s64( + vshlq_s64(vreinterpretq_s64_m128i(a), vdupq_n_s64(imm))); +} + +// Shift packed 16-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// +// FOR j := 0 to 7 +// i := j*16 +// IF imm8[7:0] > 15 +// dst[i+15:i] := 0 +// ELSE +// dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0]) +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srli_epi16 +#define _mm_srli_epi16(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) == 0) { \ + ret = a; \ + } else if (0 < (imm) && (imm) < 16) { \ + ret = vreinterpretq_m128i_u16( \ + vshlq_u16(vreinterpretq_u16_m128i(a), vdupq_n_s16(-imm))); \ + } else { \ + ret = _mm_setzero_si128(); \ + } \ + ret; \ + }) + +// Shift packed 32-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// +// FOR j := 0 to 3 +// i := j*32 +// IF imm8[7:0] > 31 +// dst[i+31:i] := 0 +// ELSE +// dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0]) +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srli_epi32 +// FORCE_INLINE __m128i _mm_srli_epi32(__m128i a, __constrange(0,255) int imm) +#define _mm_srli_epi32(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) == 0) { \ + ret = a; \ + } else if (0 < (imm) && (imm) < 32) { \ + ret = vreinterpretq_m128i_u32( \ + vshlq_u32(vreinterpretq_u32_m128i(a), vdupq_n_s32(-imm))); \ + } else { \ + ret = _mm_setzero_si128(); \ + } \ + ret; \ + }) + +// Shift packed 64-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// +// FOR j := 0 to 1 +// i := j*64 +// IF imm8[7:0] > 63 +// dst[i+63:i] := 0 +// ELSE +// dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0]) +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srli_epi64 +#define _mm_srli_epi64(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) == 0) { \ + ret = a; \ + } else if (0 < (imm) && (imm) < 64) { \ + ret = vreinterpretq_m128i_u64( \ + vshlq_u64(vreinterpretq_u64_m128i(a), vdupq_n_s64(-imm))); \ + } else { \ + ret = _mm_setzero_si128(); \ + } \ + ret; \ + }) + +// Shift packed 32-bit integers in a right by imm8 while shifting in sign bits, +// and store the results in dst. +// +// FOR j := 0 to 3 +// i := j*32 +// IF imm8[7:0] > 31 +// dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0) +// ELSE +// dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0]) +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_srai_epi32 +// FORCE_INLINE __m128i _mm_srai_epi32(__m128i a, __constrange(0,255) int imm) +#define _mm_srai_epi32(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) == 0) { \ + ret = a; \ + } else if (0 < (imm) && (imm) < 32) { \ + ret = vreinterpretq_m128i_s32( \ + vshlq_s32(vreinterpretq_s32_m128i(a), vdupq_n_s32(-imm))); \ + } else { \ + ret = vreinterpretq_m128i_s32( \ + vshrq_n_s32(vreinterpretq_s32_m128i(a), 31)); \ + } \ + ret; \ + }) + +// Shifts the 128 - bit value in a right by imm bytes while shifting in +// zeros.imm must be an immediate. +// +// r := srl(a, imm*8) +// +// https://msdn.microsoft.com/en-us/library/305w28yz(v=vs.100).aspx +// FORCE_INLINE _mm_srli_si128(__m128i a, __constrange(0,255) int imm) +#define _mm_srli_si128(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) <= 0) { \ + ret = a; \ + } else if ((imm) > 15) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_s8( \ + vextq_s8(vreinterpretq_s8_m128i(a), vdupq_n_s8(0), (imm))); \ + } \ + ret; \ + }) + +// Shifts the 128-bit value in a left by imm bytes while shifting in zeros. imm +// must be an immediate. +// +// r := a << (imm * 8) +// +// https://msdn.microsoft.com/en-us/library/34d3k2kt(v=vs.100).aspx +// FORCE_INLINE __m128i _mm_slli_si128(__m128i a, __constrange(0,255) int imm) +#define _mm_slli_si128(a, imm) \ + __extension__({ \ + __m128i ret; \ + if ((imm) <= 0) { \ + ret = a; \ + } else if ((imm) > 15) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_s8(vextq_s8( \ + vdupq_n_s8(0), vreinterpretq_s8_m128i(a), 16 - (imm))); \ + } \ + ret; \ + }) + +// Shifts the 8 signed or unsigned 16-bit integers in a left by count bits while +// shifting in zeros. +// +// r0 := a0 << count +// r1 := a1 << count +// ... +// r7 := a7 << count +// +// https://msdn.microsoft.com/en-us/library/c79w388h(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_sll_epi16(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 15) + return _mm_setzero_si128(); + + int16x8_t vc = vdupq_n_s16((int16_t) c); + return vreinterpretq_m128i_s16(vshlq_s16(vreinterpretq_s16_m128i(a), vc)); +} + +// Shifts the 4 signed or unsigned 32-bit integers in a left by count bits while +// shifting in zeros. +// +// r0 := a0 << count +// r1 := a1 << count +// r2 := a2 << count +// r3 := a3 << count +// +// https://msdn.microsoft.com/en-us/library/6fe5a6s9(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_sll_epi32(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 31) + return _mm_setzero_si128(); + + int32x4_t vc = vdupq_n_s32((int32_t) c); + return vreinterpretq_m128i_s32(vshlq_s32(vreinterpretq_s32_m128i(a), vc)); +} + +// Shifts the 2 signed or unsigned 64-bit integers in a left by count bits while +// shifting in zeros. +// +// r0 := a0 << count +// r1 := a1 << count +// +// https://msdn.microsoft.com/en-us/library/6ta9dffd(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_sll_epi64(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 63) + return _mm_setzero_si128(); + + int64x2_t vc = vdupq_n_s64((int64_t) c); + return vreinterpretq_m128i_s64(vshlq_s64(vreinterpretq_s64_m128i(a), vc)); +} + +// Shifts the 8 signed or unsigned 16-bit integers in a right by count bits +// while shifting in zeros. +// +// r0 := srl(a0, count) +// r1 := srl(a1, count) +// ... +// r7 := srl(a7, count) +// +// https://msdn.microsoft.com/en-us/library/wd5ax830(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_srl_epi16(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 15) + return _mm_setzero_si128(); + + int16x8_t vc = vdupq_n_s16(-(int16_t) c); + return vreinterpretq_m128i_u16(vshlq_u16(vreinterpretq_u16_m128i(a), vc)); +} + +// Shifts the 4 signed or unsigned 32-bit integers in a right by count bits +// while shifting in zeros. +// +// r0 := srl(a0, count) +// r1 := srl(a1, count) +// r2 := srl(a2, count) +// r3 := srl(a3, count) +// +// https://msdn.microsoft.com/en-us/library/a9cbttf4(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_srl_epi32(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 31) + return _mm_setzero_si128(); + + int32x4_t vc = vdupq_n_s32(-(int32_t) c); + return vreinterpretq_m128i_u32(vshlq_u32(vreinterpretq_u32_m128i(a), vc)); +} + +// Shifts the 2 signed or unsigned 64-bit integers in a right by count bits +// while shifting in zeros. +// +// r0 := srl(a0, count) +// r1 := srl(a1, count) +// +// https://msdn.microsoft.com/en-us/library/yf6cf9k8(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_srl_epi64(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (c > 63) + return _mm_setzero_si128(); + + int64x2_t vc = vdupq_n_s64(-(int64_t) c); + return vreinterpretq_m128i_u64(vshlq_u64(vreinterpretq_u64_m128i(a), vc)); +} + +// NEON does not provide a version of this function. +// Creates a 16-bit mask from the most significant bits of the 16 signed or +// unsigned 8-bit integers in a and zero extends the upper bits. +// https://msdn.microsoft.com/en-us/library/vstudio/s090c8fk(v=vs.100).aspx +FORCE_INLINE int _mm_movemask_epi8(__m128i a) +{ +#if defined(__aarch64__) + uint8x16_t input = vreinterpretq_u8_m128i(a); + const int8_t ALIGN_STRUCT(16) + xr[16] = {-7, -6, -5, -4, -3, -2, -1, 0, -7, -6, -5, -4, -3, -2, -1, 0}; + const uint8x16_t mask_and = vdupq_n_u8(0x80); + const int8x16_t mask_shift = vld1q_s8(xr); + const uint8x16_t mask_result = + vshlq_u8(vandq_u8(input, mask_and), mask_shift); + uint8x8_t lo = vget_low_u8(mask_result); + uint8x8_t hi = vget_high_u8(mask_result); + + return vaddv_u8(lo) + (vaddv_u8(hi) << 8); +#else + // Use increasingly wide shifts+adds to collect the sign bits + // together. + // Since the widening shifts would be rather confusing to follow in little + // endian, everything will be illustrated in big endian order instead. This + // has a different result - the bits would actually be reversed on a big + // endian machine. + + // Starting input (only half the elements are shown): + // 89 ff 1d c0 00 10 99 33 + uint8x16_t input = vreinterpretq_u8_m128i(a); + + // Shift out everything but the sign bits with an unsigned shift right. + // + // Bytes of the vector:: + // 89 ff 1d c0 00 10 99 33 + // \ \ \ \ \ \ \ \ high_bits = (uint16x4_t)(input >> 7) + // | | | | | | | | + // 01 01 00 01 00 00 01 00 + // + // Bits of first important lane(s): + // 10001001 (89) + // \______ + // | + // 00000001 (01) + uint16x8_t high_bits = vreinterpretq_u16_u8(vshrq_n_u8(input, 7)); + + // Merge the even lanes together with a 16-bit unsigned shift right + add. + // 'xx' represents garbage data which will be ignored in the final result. + // In the important bytes, the add functions like a binary OR. + // + // 01 01 00 01 00 00 01 00 + // \_ | \_ | \_ | \_ | paired16 = (uint32x4_t)(input + (input >> 7)) + // \| \| \| \| + // xx 03 xx 01 xx 00 xx 02 + // + // 00000001 00000001 (01 01) + // \_______ | + // \| + // xxxxxxxx xxxxxx11 (xx 03) + uint32x4_t paired16 = + vreinterpretq_u32_u16(vsraq_n_u16(high_bits, high_bits, 7)); + + // Repeat with a wider 32-bit shift + add. + // xx 03 xx 01 xx 00 xx 02 + // \____ | \____ | paired32 = (uint64x1_t)(paired16 + (paired16 >> + // 14)) + // \| \| + // xx xx xx 0d xx xx xx 02 + // + // 00000011 00000001 (03 01) + // \\_____ || + // '----.\|| + // xxxxxxxx xxxx1101 (xx 0d) + uint64x2_t paired32 = + vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14)); + + // Last, an even wider 64-bit shift + add to get our result in the low 8 bit + // lanes. xx xx xx 0d xx xx xx 02 + // \_________ | paired64 = (uint8x8_t)(paired32 + (paired32 >> + // 28)) + // \| + // xx xx xx xx xx xx xx d2 + // + // 00001101 00000010 (0d 02) + // \ \___ | | + // '---. \| | + // xxxxxxxx 11010010 (xx d2) + uint8x16_t paired64 = + vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28)); + + // Extract the low 8 bits from each 64-bit lane with 2 8-bit extracts. + // xx xx xx xx xx xx xx d2 + // || return paired64[0] + // d2 + // Note: Little endian would return the correct value 4b (01001011) instead. + return vgetq_lane_u8(paired64, 0) | ((int) vgetq_lane_u8(paired64, 8) << 8); +#endif +} + +// Copy the lower 64-bit integer in a to dst. +// +// dst[63:0] := a[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_movepi64_pi64 +FORCE_INLINE __m64 _mm_movepi64_pi64(__m128i a) +{ + return vreinterpret_m64_s64(vget_low_s64(vreinterpretq_s64_m128i(a))); +} + +// Copy the 64-bit integer a to the lower element of dst, and zero the upper +// element. +// +// dst[63:0] := a[63:0] +// dst[127:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_movpi64_epi64 +FORCE_INLINE __m128i _mm_movpi64_epi64(__m64 a) +{ + return vreinterpretq_m128i_s64( + vcombine_s64(vreinterpret_s64_m64(a), vdup_n_s64(0))); +} + +// NEON does not provide this method +// Creates a 4-bit mask from the most significant bits of the four +// single-precision, floating-point values. +// https://msdn.microsoft.com/en-us/library/vstudio/4490ys29(v=vs.100).aspx +FORCE_INLINE int _mm_movemask_ps(__m128 a) +{ + uint32x4_t input = vreinterpretq_u32_m128(a); +#if defined(__aarch64__) + static const int32x4_t shift = {0, 1, 2, 3}; + uint32x4_t tmp = vshrq_n_u32(input, 31); + return vaddvq_u32(vshlq_u32(tmp, shift)); +#else + // Uses the exact same method as _mm_movemask_epi8, see that for details. + // Shift out everything but the sign bits with a 32-bit unsigned shift + // right. + uint64x2_t high_bits = vreinterpretq_u64_u32(vshrq_n_u32(input, 31)); + // Merge the two pairs together with a 64-bit unsigned shift right + add. + uint8x16_t paired = + vreinterpretq_u8_u64(vsraq_n_u64(high_bits, high_bits, 31)); + // Extract the result. + return vgetq_lane_u8(paired, 0) | (vgetq_lane_u8(paired, 8) << 2); +#endif +} + +// Compute the bitwise NOT of a and then AND with a 128-bit vector containing +// all 1's, and return 1 if the result is zero, otherwise return 0. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_test_all_ones +FORCE_INLINE int _mm_test_all_ones(__m128i a) +{ + return (uint64_t)(vgetq_lane_s64(a, 0) & vgetq_lane_s64(a, 1)) == + ~(uint64_t) 0; +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and +// mask, and return 1 if the result is zero, otherwise return 0. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_test_all_zeros +FORCE_INLINE int _mm_test_all_zeros(__m128i a, __m128i mask) +{ + int64x2_t a_and_mask = + vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(mask)); + return (vgetq_lane_s64(a_and_mask, 0) | vgetq_lane_s64(a_and_mask, 1)) ? 0 + : 1; +} + +/* Math operations */ + +// Subtracts the four single-precision, floating-point values of a and b. +// +// r0 := a0 - b0 +// r1 := a1 - b1 +// r2 := a2 - b2 +// r3 := a3 - b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/1zad2k61(v=vs.100).aspx +FORCE_INLINE __m128 _mm_sub_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vsubq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Subtract the lower single-precision (32-bit) floating-point element in b from +// the lower single-precision (32-bit) floating-point element in a, store the +// result in the lower element of dst, and copy the upper 3 packed elements from +// a to the upper elements of dst. +// +// dst[31:0] := a[31:0] - b[31:0] +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sub_ss +FORCE_INLINE __m128 _mm_sub_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_sub_ps(a, b)); +} + +// Subtract 2 packed 64-bit integers in b from 2 packed 64-bit integers in a, +// and store the results in dst. +// r0 := a0 - b0 +// r1 := a1 - b1 +FORCE_INLINE __m128i _mm_sub_epi64(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s64( + vsubq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +} + +// Subtracts the 4 signed or unsigned 32-bit integers of b from the 4 signed or +// unsigned 32-bit integers of a. +// +// r0 := a0 - b0 +// r1 := a1 - b1 +// r2 := a2 - b2 +// r3 := a3 - b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/fhh866h0(v=vs.100).aspx +FORCE_INLINE __m128i _mm_sub_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vsubq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +FORCE_INLINE __m128i _mm_sub_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +FORCE_INLINE __m128i _mm_sub_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Subtract 64-bit integer b from 64-bit integer a, and store the result in dst. +// +// dst[63:0] := a[63:0] - b[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sub_si64 +FORCE_INLINE __m64 _mm_sub_si64(__m64 a, __m64 b) +{ + return vreinterpret_m64_s64( + vsub_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); +} + +// Subtracts the 8 unsigned 16-bit integers of bfrom the 8 unsigned 16-bit +// integers of a and saturates.. +// https://technet.microsoft.com/en-us/subscriptions/index/f44y0s19(v=vs.90).aspx +FORCE_INLINE __m128i _mm_subs_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vqsubq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Subtracts the 16 unsigned 8-bit integers of b from the 16 unsigned 8-bit +// integers of a and saturates. +// +// r0 := UnsignedSaturate(a0 - b0) +// r1 := UnsignedSaturate(a1 - b1) +// ... +// r15 := UnsignedSaturate(a15 - b15) +// +// https://technet.microsoft.com/en-us/subscriptions/yadkxc18(v=vs.90) +FORCE_INLINE __m128i _mm_subs_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vqsubq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Subtracts the 16 signed 8-bit integers of b from the 16 signed 8-bit integers +// of a and saturates. +// +// r0 := SignedSaturate(a0 - b0) +// r1 := SignedSaturate(a1 - b1) +// ... +// r15 := SignedSaturate(a15 - b15) +// +// https://technet.microsoft.com/en-us/subscriptions/by7kzks1(v=vs.90) +FORCE_INLINE __m128i _mm_subs_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vqsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Subtracts the 8 signed 16-bit integers of b from the 8 signed 16-bit integers +// of a and saturates. +// +// r0 := SignedSaturate(a0 - b0) +// r1 := SignedSaturate(a1 - b1) +// ... +// r7 := SignedSaturate(a7 - b7) +// +// https://technet.microsoft.com/en-us/subscriptions/3247z5b8(v=vs.90) +FORCE_INLINE __m128i _mm_subs_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vqsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +FORCE_INLINE __m128i _mm_adds_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vqaddq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Negate packed 8-bit integers in a when the corresponding signed +// 8-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// +// for i in 0..15 +// if b[i] < 0 +// r[i] := -a[i] +// else if b[i] == 0 +// r[i] := 0 +// else +// r[i] := a[i] +// fi +// done +FORCE_INLINE __m128i _mm_sign_epi8(__m128i _a, __m128i _b) +{ + int8x16_t a = vreinterpretq_s8_m128i(_a); + int8x16_t b = vreinterpretq_s8_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFF : 0 + uint8x16_t ltMask = vreinterpretq_u8_s8(vshrq_n_s8(b, 7)); + + // (b == 0) ? 0xFF : 0 +#if defined(__aarch64__) + int8x16_t zeroMask = vreinterpretq_s8_u8(vceqzq_s8(b)); +#else + int8x16_t zeroMask = vreinterpretq_s8_u8(vceqq_s8(b, vdupq_n_s8(0))); +#endif + + // bitwise select either a or nagative 'a' (vnegq_s8(a) return nagative 'a') + // based on ltMask + int8x16_t masked = vbslq_s8(ltMask, vnegq_s8(a), a); + // res = masked & (~zeroMask) + int8x16_t res = vbicq_s8(masked, zeroMask); + + return vreinterpretq_m128i_s8(res); +} + +// Negate packed 16-bit integers in a when the corresponding signed +// 16-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// +// for i in 0..7 +// if b[i] < 0 +// r[i] := -a[i] +// else if b[i] == 0 +// r[i] := 0 +// else +// r[i] := a[i] +// fi +// done +FORCE_INLINE __m128i _mm_sign_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFF : 0 + uint16x8_t ltMask = vreinterpretq_u16_s16(vshrq_n_s16(b, 15)); + // (b == 0) ? 0xFFFF : 0 +#if defined(__aarch64__) + int16x8_t zeroMask = vreinterpretq_s16_u16(vceqzq_s16(b)); +#else + int16x8_t zeroMask = vreinterpretq_s16_u16(vceqq_s16(b, vdupq_n_s16(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s16(a) equals to negative + // 'a') based on ltMask + int16x8_t masked = vbslq_s16(ltMask, vnegq_s16(a), a); + // res = masked & (~zeroMask) + int16x8_t res = vbicq_s16(masked, zeroMask); + return vreinterpretq_m128i_s16(res); +} + +// Negate packed 32-bit integers in a when the corresponding signed +// 32-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// +// for i in 0..3 +// if b[i] < 0 +// r[i] := -a[i] +// else if b[i] == 0 +// r[i] := 0 +// else +// r[i] := a[i] +// fi +// done +FORCE_INLINE __m128i _mm_sign_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFFFFFF : 0 + uint32x4_t ltMask = vreinterpretq_u32_s32(vshrq_n_s32(b, 31)); + + // (b == 0) ? 0xFFFFFFFF : 0 +#if defined(__aarch64__) + int32x4_t zeroMask = vreinterpretq_s32_u32(vceqzq_s32(b)); +#else + int32x4_t zeroMask = vreinterpretq_s32_u32(vceqq_s32(b, vdupq_n_s32(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s32(a) equals to negative + // 'a') based on ltMask + int32x4_t masked = vbslq_s32(ltMask, vnegq_s32(a), a); + // res = masked & (~zeroMask) + int32x4_t res = vbicq_s32(masked, zeroMask); + return vreinterpretq_m128i_s32(res); +} + +// Negate packed 16-bit integers in a when the corresponding signed 16-bit +// integer in b is negative, and store the results in dst. Element in dst are +// zeroed out when the corresponding element in b is zero. +// +// FOR j := 0 to 3 +// i := j*16 +// IF b[i+15:i] < 0 +// dst[i+15:i] := -(a[i+15:i]) +// ELSE IF b[i+15:i] == 0 +// dst[i+15:i] := 0 +// ELSE +// dst[i+15:i] := a[i+15:i] +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sign_pi16 +FORCE_INLINE __m64 _mm_sign_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFF : 0 + uint16x4_t ltMask = vreinterpret_u16_s16(vshr_n_s16(b, 15)); + + // (b == 0) ? 0xFFFF : 0 +#if defined(__aarch64__) + int16x4_t zeroMask = vreinterpret_s16_u16(vceqz_s16(b)); +#else + int16x4_t zeroMask = vreinterpret_s16_u16(vceq_s16(b, vdup_n_s16(0))); +#endif + + // bitwise select either a or nagative 'a' (vneg_s16(a) return nagative 'a') + // based on ltMask + int16x4_t masked = vbsl_s16(ltMask, vneg_s16(a), a); + // res = masked & (~zeroMask) + int16x4_t res = vbic_s16(masked, zeroMask); + + return vreinterpret_m64_s16(res); +} + +// Negate packed 32-bit integers in a when the corresponding signed 32-bit +// integer in b is negative, and store the results in dst. Element in dst are +// zeroed out when the corresponding element in b is zero. +// +// FOR j := 0 to 1 +// i := j*32 +// IF b[i+31:i] < 0 +// dst[i+31:i] := -(a[i+31:i]) +// ELSE IF b[i+31:i] == 0 +// dst[i+31:i] := 0 +// ELSE +// dst[i+31:i] := a[i+31:i] +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sign_pi32 +FORCE_INLINE __m64 _mm_sign_pi32(__m64 _a, __m64 _b) +{ + int32x2_t a = vreinterpret_s32_m64(_a); + int32x2_t b = vreinterpret_s32_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFFFFFF : 0 + uint32x2_t ltMask = vreinterpret_u32_s32(vshr_n_s32(b, 31)); + + // (b == 0) ? 0xFFFFFFFF : 0 +#if defined(__aarch64__) + int32x2_t zeroMask = vreinterpret_s32_u32(vceqz_s32(b)); +#else + int32x2_t zeroMask = vreinterpret_s32_u32(vceq_s32(b, vdup_n_s32(0))); +#endif + + // bitwise select either a or nagative 'a' (vneg_s32(a) return nagative 'a') + // based on ltMask + int32x2_t masked = vbsl_s32(ltMask, vneg_s32(a), a); + // res = masked & (~zeroMask) + int32x2_t res = vbic_s32(masked, zeroMask); + + return vreinterpret_m64_s32(res); +} + +// Negate packed 8-bit integers in a when the corresponding signed 8-bit integer +// in b is negative, and store the results in dst. Element in dst are zeroed out +// when the corresponding element in b is zero. +// +// FOR j := 0 to 7 +// i := j*8 +// IF b[i+7:i] < 0 +// dst[i+7:i] := -(a[i+7:i]) +// ELSE IF b[i+7:i] == 0 +// dst[i+7:i] := 0 +// ELSE +// dst[i+7:i] := a[i+7:i] +// FI +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sign_pi8 +FORCE_INLINE __m64 _mm_sign_pi8(__m64 _a, __m64 _b) +{ + int8x8_t a = vreinterpret_s8_m64(_a); + int8x8_t b = vreinterpret_s8_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFF : 0 + uint8x8_t ltMask = vreinterpret_u8_s8(vshr_n_s8(b, 7)); + + // (b == 0) ? 0xFF : 0 +#if defined(__aarch64__) + int8x8_t zeroMask = vreinterpret_s8_u8(vceqz_s8(b)); +#else + int8x8_t zeroMask = vreinterpret_s8_u8(vceq_s8(b, vdup_n_s8(0))); +#endif + + // bitwise select either a or nagative 'a' (vneg_s8(a) return nagative 'a') + // based on ltMask + int8x8_t masked = vbsl_s8(ltMask, vneg_s8(a), a); + // res = masked & (~zeroMask) + int8x8_t res = vbic_s8(masked, zeroMask); + + return vreinterpret_m64_s8(res); +} + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1 +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_avg_pu16 +FORCE_INLINE __m64 _mm_avg_pu16(__m64 a, __m64 b) +{ + return vreinterpret_m64_u16( + vrhadd_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b))); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1 +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_avg_pu8 +FORCE_INLINE __m64 _mm_avg_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vrhadd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1 +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_pavgb +#define _m_pavgb(a, b) _mm_avg_pu8(a, b) + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1 +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_pavgw +#define _m_pavgw(a, b) _mm_avg_pu16(a, b) + +// Computes the average of the 16 unsigned 8-bit integers in a and the 16 +// unsigned 8-bit integers in b and rounds. +// +// r0 := (a0 + b0) / 2 +// r1 := (a1 + b1) / 2 +// ... +// r15 := (a15 + b15) / 2 +// +// https://msdn.microsoft.com/en-us/library/vstudio/8zwh554a(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_avg_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vrhaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Computes the average of the 8 unsigned 16-bit integers in a and the 8 +// unsigned 16-bit integers in b and rounds. +// +// r0 := (a0 + b0) / 2 +// r1 := (a1 + b1) / 2 +// ... +// r7 := (a7 + b7) / 2 +// +// https://msdn.microsoft.com/en-us/library/vstudio/y13ca3c8(v=vs.90).aspx +FORCE_INLINE __m128i _mm_avg_epu16(__m128i a, __m128i b) +{ + return (__m128i) vrhaddq_u16(vreinterpretq_u16_m128i(a), + vreinterpretq_u16_m128i(b)); +} + +// Adds the four single-precision, floating-point values of a and b. +// +// r0 := a0 + b0 +// r1 := a1 + b1 +// r2 := a2 + b2 +// r3 := a3 + b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/c9848chc(v=vs.100).aspx +FORCE_INLINE __m128 _mm_add_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Add packed double-precision (64-bit) floating-point elements in a and b, and +// store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_add_pd +FORCE_INLINE __m128d _mm_add_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double *da = (double *) &a; + double *db = (double *) &b; + double c[2]; + c[0] = da[0] + db[0]; + c[1] = da[1] + db[1]; + return vld1q_f32((float32_t *) c); +#endif +} + +// Add 64-bit integers a and b, and store the result in dst. +// +// dst[63:0] := a[63:0] + b[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_add_si64 +FORCE_INLINE __m64 _mm_add_si64(__m64 a, __m64 b) +{ + return vreinterpret_m64_s64( + vadd_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); +} + +// adds the scalar single-precision floating point values of a and b. +// https://msdn.microsoft.com/en-us/library/be94x2y6(v=vs.100).aspx +FORCE_INLINE __m128 _mm_add_ss(__m128 a, __m128 b) +{ + float32_t b0 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); + float32x4_t value = vsetq_lane_f32(b0, vdupq_n_f32(0), 0); + // the upper values in the result must be the remnants of . + return vreinterpretq_m128_f32(vaddq_f32(a, value)); +} + +// Adds the 4 signed or unsigned 64-bit integers in a to the 4 signed or +// unsigned 32-bit integers in b. +// https://msdn.microsoft.com/en-us/library/vstudio/09xs4fkk(v=vs.100).aspx +FORCE_INLINE __m128i _mm_add_epi64(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s64( + vaddq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +} + +// Adds the 4 signed or unsigned 32-bit integers in a to the 4 signed or +// unsigned 32-bit integers in b. +// +// r0 := a0 + b0 +// r1 := a1 + b1 +// r2 := a2 + b2 +// r3 := a3 + b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/09xs4fkk(v=vs.100).aspx +FORCE_INLINE __m128i _mm_add_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vaddq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Adds the 8 signed or unsigned 16-bit integers in a to the 8 signed or +// unsigned 16-bit integers in b. +// https://msdn.microsoft.com/en-us/library/fceha5k4(v=vs.100).aspx +FORCE_INLINE __m128i _mm_add_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Adds the 16 signed or unsigned 8-bit integers in a to the 16 signed or +// unsigned 8-bit integers in b. +// https://technet.microsoft.com/en-us/subscriptions/yc7tcyzs(v=vs.90) +FORCE_INLINE __m128i _mm_add_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Adds the 8 signed 16-bit integers in a to the 8 signed 16-bit integers in b +// and saturates. +// +// r0 := SignedSaturate(a0 + b0) +// r1 := SignedSaturate(a1 + b1) +// ... +// r7 := SignedSaturate(a7 + b7) +// +// https://msdn.microsoft.com/en-us/library/1a306ef8(v=vs.100).aspx +FORCE_INLINE __m128i _mm_adds_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vqaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Add packed signed 8-bit integers in a and b using saturation, and store the +// results in dst. +// +// FOR j := 0 to 15 +// i := j*8 +// dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] ) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_adds_epi8 +FORCE_INLINE __m128i _mm_adds_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vqaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Adds the 16 unsigned 8-bit integers in a to the 16 unsigned 8-bit integers in +// b and saturates.. +// https://msdn.microsoft.com/en-us/library/9hahyddy(v=vs.100).aspx +FORCE_INLINE __m128i _mm_adds_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vqaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Multiplies the 8 signed or unsigned 16-bit integers from a by the 8 signed or +// unsigned 16-bit integers from b. +// +// r0 := (a0 * b0)[15:0] +// r1 := (a1 * b1)[15:0] +// ... +// r7 := (a7 * b7)[15:0] +// +// https://msdn.microsoft.com/en-us/library/vstudio/9ks1472s(v=vs.100).aspx +FORCE_INLINE __m128i _mm_mullo_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vmulq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Multiplies the 4 signed or unsigned 32-bit integers from a by the 4 signed or +// unsigned 32-bit integers from b. +// https://msdn.microsoft.com/en-us/library/vstudio/bb531409(v=vs.100).aspx +FORCE_INLINE __m128i _mm_mullo_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vmulq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// tmp[31:0] := a[i+15:i] * b[i+15:i] +// dst[i+15:i] := tmp[31:16] +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_pmulhuw +#define _m_pmulhuw(a, b) _mm_mulhi_pu16(a, b) + +// Multiplies the four single-precision, floating-point values of a and b. +// +// r0 := a0 * b0 +// r1 := a1 * b1 +// r2 := a2 * b2 +// r3 := a3 * b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/22kbk6t9(v=vs.100).aspx +FORCE_INLINE __m128 _mm_mul_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vmulq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Multiply packed double-precision (64-bit) floating-point elements in a and b, +// and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_pd +FORCE_INLINE __m128d _mm_mul_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vmulq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double *da = (double *) &a; + double *db = (double *) &b; + double c[2]; + c[0] = da[0] * db[0]; + c[1] = da[1] * db[1]; + return vld1q_f32((float32_t *) c); +#endif +} + +// Multiply the lower single-precision (32-bit) floating-point element in a and +// b, store the result in the lower element of dst, and copy the upper 3 packed +// elements from a to the upper elements of dst. +// +// dst[31:0] := a[31:0] * b[31:0] +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_ss +FORCE_INLINE __m128 _mm_mul_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_mul_ps(a, b)); +} + +// Multiply the low unsigned 32-bit integers from each packed 64-bit element in +// a and b, and store the unsigned 64-bit results in dst. +// +// r0 := (a0 & 0xFFFFFFFF) * (b0 & 0xFFFFFFFF) +// r1 := (a2 & 0xFFFFFFFF) * (b2 & 0xFFFFFFFF) +FORCE_INLINE __m128i _mm_mul_epu32(__m128i a, __m128i b) +{ + // vmull_u32 upcasts instead of masking, so we downcast. + uint32x2_t a_lo = vmovn_u64(vreinterpretq_u64_m128i(a)); + uint32x2_t b_lo = vmovn_u64(vreinterpretq_u64_m128i(b)); + return vreinterpretq_m128i_u64(vmull_u32(a_lo, b_lo)); +} + +// Multiply the low unsigned 32-bit integers from a and b, and store the +// unsigned 64-bit result in dst. +// +// dst[63:0] := a[31:0] * b[31:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_su32 +FORCE_INLINE __m64 _mm_mul_su32(__m64 a, __m64 b) +{ + return vreinterpret_m64_u64(vget_low_u64( + vmull_u32(vreinterpret_u32_m64(a), vreinterpret_u32_m64(b)))); +} + +// Multiply the low signed 32-bit integers from each packed 64-bit element in +// a and b, and store the signed 64-bit results in dst. +// +// r0 := (int64_t)(int32_t)a0 * (int64_t)(int32_t)b0 +// r1 := (int64_t)(int32_t)a2 * (int64_t)(int32_t)b2 +FORCE_INLINE __m128i _mm_mul_epi32(__m128i a, __m128i b) +{ + // vmull_s32 upcasts instead of masking, so we downcast. + int32x2_t a_lo = vmovn_s64(vreinterpretq_s64_m128i(a)); + int32x2_t b_lo = vmovn_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vmull_s32(a_lo, b_lo)); +} + +// Multiplies the 8 signed 16-bit integers from a by the 8 signed 16-bit +// integers from b. +// +// r0 := (a0 * b0) + (a1 * b1) +// r1 := (a2 * b2) + (a3 * b3) +// r2 := (a4 * b4) + (a5 * b5) +// r3 := (a6 * b6) + (a7 * b7) +// https://msdn.microsoft.com/en-us/library/yht36sa6(v=vs.90).aspx +FORCE_INLINE __m128i _mm_madd_epi16(__m128i a, __m128i b) +{ + int32x4_t low = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), + vget_low_s16(vreinterpretq_s16_m128i(b))); + int32x4_t high = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), + vget_high_s16(vreinterpretq_s16_m128i(b))); + + int32x2_t low_sum = vpadd_s32(vget_low_s32(low), vget_high_s32(low)); + int32x2_t high_sum = vpadd_s32(vget_low_s32(high), vget_high_s32(high)); + + return vreinterpretq_m128i_s32(vcombine_s32(low_sum, high_sum)); +} + +// Multiply packed signed 16-bit integers in a and b, producing intermediate +// signed 32-bit integers. Shift right by 15 bits while rounding up, and store +// the packed 16-bit integers in dst. +// +// r0 := Round(((int32_t)a0 * (int32_t)b0) >> 15) +// r1 := Round(((int32_t)a1 * (int32_t)b1) >> 15) +// r2 := Round(((int32_t)a2 * (int32_t)b2) >> 15) +// ... +// r7 := Round(((int32_t)a7 * (int32_t)b7) >> 15) +FORCE_INLINE __m128i _mm_mulhrs_epi16(__m128i a, __m128i b) +{ + // Has issues due to saturation + // return vreinterpretq_m128i_s16(vqrdmulhq_s16(a, b)); + + // Multiply + int32x4_t mul_lo = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), + vget_low_s16(vreinterpretq_s16_m128i(b))); + int32x4_t mul_hi = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), + vget_high_s16(vreinterpretq_s16_m128i(b))); + + // Rounding narrowing shift right + // narrow = (int16_t)((mul + 16384) >> 15); + int16x4_t narrow_lo = vrshrn_n_s32(mul_lo, 15); + int16x4_t narrow_hi = vrshrn_n_s32(mul_hi, 15); + + // Join together + return vreinterpretq_m128i_s16(vcombine_s16(narrow_lo, narrow_hi)); +} + +// Vertically multiply each unsigned 8-bit integer from a with the corresponding +// signed 8-bit integer from b, producing intermediate signed 16-bit integers. +// Horizontally add adjacent pairs of intermediate signed 16-bit integers, +// and pack the saturated results in dst. +// +// FOR j := 0 to 7 +// i := j*16 +// dst[i+15:i] := Saturate_To_Int16( a[i+15:i+8]*b[i+15:i+8] + +// a[i+7:i]*b[i+7:i] ) +// ENDFOR +FORCE_INLINE __m128i _mm_maddubs_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) + uint8x16_t a = vreinterpretq_u8_m128i(_a); + int8x16_t b = vreinterpretq_s8_m128i(_b); + int16x8_t tl = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(a))), + vmovl_s8(vget_low_s8(b))); + int16x8_t th = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(a))), + vmovl_s8(vget_high_s8(b))); + return vreinterpretq_m128i_s16( + vqaddq_s16(vuzp1q_s16(tl, th), vuzp2q_s16(tl, th))); +#else + // This would be much simpler if x86 would choose to zero extend OR sign + // extend, not both. This could probably be optimized better. + uint16x8_t a = vreinterpretq_u16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + + // Zero extend a + int16x8_t a_odd = vreinterpretq_s16_u16(vshrq_n_u16(a, 8)); + int16x8_t a_even = vreinterpretq_s16_u16(vbicq_u16(a, vdupq_n_u16(0xff00))); + + // Sign extend by shifting left then shifting right. + int16x8_t b_even = vshrq_n_s16(vshlq_n_s16(b, 8), 8); + int16x8_t b_odd = vshrq_n_s16(b, 8); + + // multiply + int16x8_t prod1 = vmulq_s16(a_even, b_even); + int16x8_t prod2 = vmulq_s16(a_odd, b_odd); + + // saturated add + return vreinterpretq_m128i_s16(vqaddq_s16(prod1, prod2)); +#endif +} + +// Computes the fused multiple add product of 32-bit floating point numbers. +// +// Return Value +// Multiplies A and B, and adds C to the temporary result before returning it. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmadd +FORCE_INLINE __m128 _mm_fmadd_ps(__m128 a, __m128 b, __m128 c) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32(vfmaq_f32(vreinterpretq_f32_m128(c), + vreinterpretq_f32_m128(b), + vreinterpretq_f32_m128(a))); +#else + return _mm_add_ps(_mm_mul_ps(a, b), c); +#endif +} + +// Alternatively add and subtract packed single-precision (32-bit) +// floating-point elements in a to/from packed elements in b, and store the +// results in dst. +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=addsub_ps +FORCE_INLINE __m128 _mm_addsub_ps(__m128 a, __m128 b) +{ + __m128 mask = {-1.0f, 1.0f, -1.0f, 1.0f}; + return _mm_fmadd_ps(b, mask, a); +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce two +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of 64-bit elements in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sad_epu8 +FORCE_INLINE __m128i _mm_sad_epu8(__m128i a, __m128i b) +{ + uint16x8_t t = vpaddlq_u8(vabdq_u8((uint8x16_t) a, (uint8x16_t) b)); + uint16_t r0 = t[0] + t[1] + t[2] + t[3]; + uint16_t r4 = t[4] + t[5] + t[6] + t[7]; + uint16x8_t r = vsetq_lane_u16(r0, vdupq_n_u16(0), 0); + return (__m128i) vsetq_lane_u16(r4, r, 4); +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce four +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sad_pu8 +FORCE_INLINE __m64 _mm_sad_pu8(__m64 a, __m64 b) +{ + uint16x4_t t = + vpaddl_u8(vabd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); + uint16_t r0 = t[0] + t[1] + t[2] + t[3]; + return vreinterpret_m64_u16(vset_lane_u16(r0, vdup_n_u16(0), 0)); +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce four +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of dst. +// +// FOR j := 0 to 7 +// i := j*8 +// tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i]) +// ENDFOR +// dst[15:0] := tmp[7:0] + tmp[15:8] + tmp[23:16] + tmp[31:24] + tmp[39:32] + +// tmp[47:40] + tmp[55:48] + tmp[63:56] dst[63:16] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_psadbw +#define _m_psadbw(a, b) _mm_sad_pu8(a, b) + +// Divides the four single-precision, floating-point values of a and b. +// +// r0 := a0 / b0 +// r1 := a1 / b1 +// r2 := a2 / b2 +// r3 := a3 / b3 +// +// https://msdn.microsoft.com/en-us/library/edaw8147(v=vs.100).aspx +FORCE_INLINE __m128 _mm_div_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vdivq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x4_t recip0 = vrecpeq_f32(vreinterpretq_f32_m128(b)); + float32x4_t recip1 = + vmulq_f32(recip0, vrecpsq_f32(recip0, vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(a), recip1)); +#endif +} + +// Divides the scalar single-precision floating point value of a by b. +// https://msdn.microsoft.com/en-us/library/4y73xa49(v=vs.100).aspx +FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) +{ + float32_t value = + vgetq_lane_f32(vreinterpretq_f32_m128(_mm_div_ps(a, b)), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Compute the approximate reciprocal of packed single-precision (32-bit) +// floating-point elements in a, and store the results in dst. The maximum +// relative error for this approximation is less than 1.5*2^-12. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rcp_ps +FORCE_INLINE __m128 _mm_rcp_ps(__m128 in) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vdivq_f32(vdupq_n_f32(1.0f), vreinterpretq_f32_m128(in))); +#else + float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(in)); + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); + return vreinterpretq_m128_f32(recip); +#endif +} + +// Compute the approximate reciprocal of the lower single-precision (32-bit) +// floating-point element in a, store the result in the lower element of dst, +// and copy the upper 3 packed elements from a to the upper elements of dst. The +// maximum relative error for this approximation is less than 1.5*2^-12. +// +// dst[31:0] := (1.0 / a[31:0]) +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rcp_ss +FORCE_INLINE __m128 _mm_rcp_ss(__m128 a) +{ + return _mm_move_ss(a, _mm_rcp_ps(a)); +} + +// Computes the approximations of square roots of the four single-precision, +// floating-point values of a. First computes reciprocal square roots and then +// reciprocals of the four values. +// +// r0 := sqrt(a0) +// r1 := sqrt(a1) +// r2 := sqrt(a2) +// r3 := sqrt(a3) +// +// https://msdn.microsoft.com/en-us/library/vstudio/8z67bwwk(v=vs.100).aspx +FORCE_INLINE __m128 _mm_sqrt_ps(__m128 in) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32(vsqrtq_f32(vreinterpretq_f32_m128(in))); +#else + float32x4_t recipsq = vrsqrteq_f32(vreinterpretq_f32_m128(in)); + float32x4_t sq = vrecpeq_f32(recipsq); + // ??? use step versions of both sqrt and recip for better accuracy? + return vreinterpretq_m128_f32(sq); +#endif +} + +// Computes the approximation of the square root of the scalar single-precision +// floating point value of in. +// https://msdn.microsoft.com/en-us/library/ahfsc22d(v=vs.100).aspx +FORCE_INLINE __m128 _mm_sqrt_ss(__m128 in) +{ + float32_t value = + vgetq_lane_f32(vreinterpretq_f32_m128(_mm_sqrt_ps(in)), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(in), 0)); +} + +// Computes the approximations of the reciprocal square roots of the four +// single-precision floating point values of in. +// https://msdn.microsoft.com/en-us/library/22hfsh53(v=vs.100).aspx +FORCE_INLINE __m128 _mm_rsqrt_ps(__m128 in) +{ + return vreinterpretq_m128_f32(vrsqrteq_f32(vreinterpretq_f32_m128(in))); +} + +// Compute the approximate reciprocal square root of the lower single-precision +// (32-bit) floating-point element in a, store the result in the lower element +// of dst, and copy the upper 3 packed elements from a to the upper elements of +// dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rsqrt_ss +FORCE_INLINE __m128 _mm_rsqrt_ss(__m128 in) +{ + return vsetq_lane_f32(vgetq_lane_f32(_mm_rsqrt_ps(in), 0), in, 0); +} + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := MAX(a[i+15:i], b[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_pi16 +FORCE_INLINE __m64 _mm_max_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vmax_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := MAX(a[i+15:i], b[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_pi16 +#define _m_pmaxsw(a, b) _mm_max_pi16(a, b) + +// Computes the maximums of the four single-precision, floating-point values of +// a and b. +// https://msdn.microsoft.com/en-us/library/vstudio/ff5d607a(v=vs.100).aspx +FORCE_INLINE __m128 _mm_max_ps(__m128 a, __m128 b) +{ +#if SSE2NEON_PRECISE_MINMAX + float32x4_t _a = vreinterpretq_f32_m128(a); + float32x4_t _b = vreinterpretq_f32_m128(b); + return vbslq_f32(vcltq_f32(_b, _a), _a, _b); +#else + return vreinterpretq_m128_f32( + vmaxq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#endif +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := MAX(a[i+7:i], b[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_pu8 +FORCE_INLINE __m64 _mm_max_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vmax_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := MAX(a[i+7:i], b[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_pu8 +#define _m_pmaxub(a, b) _mm_max_pu8(a, b) + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := MIN(a[i+15:i], b[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_pi16 +FORCE_INLINE __m64 _mm_min_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vmin_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// dst[i+15:i] := MIN(a[i+15:i], b[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_pi16 +#define _m_pminsw(a, b) _mm_min_pi16(a, b) + +// Computes the minima of the four single-precision, floating-point values of a +// and b. +// https://msdn.microsoft.com/en-us/library/vstudio/wh13kadz(v=vs.100).aspx +FORCE_INLINE __m128 _mm_min_ps(__m128 a, __m128 b) +{ +#if SSE2NEON_PRECISE_MINMAX + float32x4_t _a = vreinterpretq_f32_m128(a); + float32x4_t _b = vreinterpretq_f32_m128(b); + return vbslq_f32(vcltq_f32(_a, _b), _a, _b); +#else + return vreinterpretq_m128_f32( + vminq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#endif +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := MIN(a[i+7:i], b[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_pu8 +FORCE_INLINE __m64 _mm_min_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vmin_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// +// FOR j := 0 to 7 +// i := j*8 +// dst[i+7:i] := MIN(a[i+7:i], b[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_pu8 +#define _m_pminub(a, b) _mm_min_pu8(a, b) + +// Computes the maximum of the two lower scalar single-precision floating point +// values of a and b. +// https://msdn.microsoft.com/en-us/library/s6db5esz(v=vs.100).aspx +FORCE_INLINE __m128 _mm_max_ss(__m128 a, __m128 b) +{ + float32_t value = vgetq_lane_f32(_mm_max_ps(a, b), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Computes the minimum of the two lower scalar single-precision floating point +// values of a and b. +// https://msdn.microsoft.com/en-us/library/0a9y7xaa(v=vs.100).aspx +FORCE_INLINE __m128 _mm_min_ss(__m128 a, __m128 b) +{ + float32_t value = vgetq_lane_f32(_mm_min_ps(a, b), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Computes the pairwise maxima of the 16 unsigned 8-bit integers from a and the +// 16 unsigned 8-bit integers from b. +// https://msdn.microsoft.com/en-us/library/st6634za(v=vs.100).aspx +FORCE_INLINE __m128i _mm_max_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vmaxq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Computes the pairwise minima of the 16 unsigned 8-bit integers from a and the +// 16 unsigned 8-bit integers from b. +// https://msdn.microsoft.com/ko-kr/library/17k8cf58(v=vs.100).aspxx +FORCE_INLINE __m128i _mm_min_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vminq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Computes the pairwise minima of the 8 signed 16-bit integers from a and the 8 +// signed 16-bit integers from b. +// https://msdn.microsoft.com/en-us/library/vstudio/6te997ew(v=vs.100).aspx +FORCE_INLINE __m128i _mm_min_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vminq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_epi8 +FORCE_INLINE __m128i _mm_max_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vmaxq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed unsigned 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_epu16 +FORCE_INLINE __m128i _mm_max_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vmaxq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_epi8 +FORCE_INLINE __m128i _mm_min_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vminq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed unsigned 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_epu16 +FORCE_INLINE __m128i _mm_min_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vminq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Computes the pairwise maxima of the 8 signed 16-bit integers from a and the 8 +// signed 16-bit integers from b. +// https://msdn.microsoft.com/en-us/LIBRary/3x060h7c(v=vs.100).aspx +FORCE_INLINE __m128i _mm_max_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vmaxq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// epi versions of min/max +// Computes the pariwise maximums of the four signed 32-bit integer values of a +// and b. +// +// A 128-bit parameter that can be defined with the following equations: +// r0 := (a0 > b0) ? a0 : b0 +// r1 := (a1 > b1) ? a1 : b1 +// r2 := (a2 > b2) ? a2 : b2 +// r3 := (a3 > b3) ? a3 : b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/bb514055(v=vs.100).aspx +FORCE_INLINE __m128i _mm_max_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vmaxq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Computes the pariwise minima of the four signed 32-bit integer values of a +// and b. +// +// A 128-bit parameter that can be defined with the following equations: +// r0 := (a0 < b0) ? a0 : b0 +// r1 := (a1 < b1) ? a1 : b1 +// r2 := (a2 < b2) ? a2 : b2 +// r3 := (a3 < b3) ? a3 : b3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/bb531476(v=vs.100).aspx +FORCE_INLINE __m128i _mm_min_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vminq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed unsigned 32-bit integers in a and b, and store packed maximum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_epu32 +FORCE_INLINE __m128i _mm_max_epu32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vmaxq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); +} + +// Compare packed unsigned 32-bit integers in a and b, and store packed minimum +// values in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_epu32 +FORCE_INLINE __m128i _mm_min_epu32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vminq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mulhi_pu16 +FORCE_INLINE __m64 _mm_mulhi_pu16(__m64 a, __m64 b) +{ + return vreinterpret_m64_u16(vshrn_n_u32( + vmull_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b)), 16)); +} + +// Multiplies the 8 signed 16-bit integers from a by the 8 signed 16-bit +// integers from b. +// +// r0 := (a0 * b0)[31:16] +// r1 := (a1 * b1)[31:16] +// ... +// r7 := (a7 * b7)[31:16] +// +// https://msdn.microsoft.com/en-us/library/vstudio/59hddw1d(v=vs.100).aspx +FORCE_INLINE __m128i _mm_mulhi_epi16(__m128i a, __m128i b) +{ + /* FIXME: issue with large values because of result saturation */ + // int16x8_t ret = vqdmulhq_s16(vreinterpretq_s16_m128i(a), + // vreinterpretq_s16_m128i(b)); /* =2*a*b */ return + // vreinterpretq_m128i_s16(vshrq_n_s16(ret, 1)); + int16x4_t a3210 = vget_low_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b3210 = vget_low_s16(vreinterpretq_s16_m128i(b)); + int32x4_t ab3210 = vmull_s16(a3210, b3210); /* 3333222211110000 */ + int16x4_t a7654 = vget_high_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b7654 = vget_high_s16(vreinterpretq_s16_m128i(b)); + int32x4_t ab7654 = vmull_s16(a7654, b7654); /* 7777666655554444 */ + uint16x8x2_t r = + vuzpq_u16(vreinterpretq_u16_s32(ab3210), vreinterpretq_u16_s32(ab7654)); + return vreinterpretq_m128i_u16(r.val[1]); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mulhi_epu16 +FORCE_INLINE __m128i _mm_mulhi_epu16(__m128i a, __m128i b) +{ + uint16x4_t a3210 = vget_low_u16(vreinterpretq_u16_m128i(a)); + uint16x4_t b3210 = vget_low_u16(vreinterpretq_u16_m128i(b)); + uint32x4_t ab3210 = vmull_u16(a3210, b3210); +#if defined(__aarch64__) + uint32x4_t ab7654 = + vmull_high_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); + uint16x8_t r = vuzp2q_u16(vreinterpretq_u16_u32(ab3210), + vreinterpretq_u16_u32(ab7654)); + return vreinterpretq_m128i_u16(r); +#else + uint16x4_t a7654 = vget_high_u16(vreinterpretq_u16_m128i(a)); + uint16x4_t b7654 = vget_high_u16(vreinterpretq_u16_m128i(b)); + uint32x4_t ab7654 = vmull_u16(a7654, b7654); + uint16x8x2_t r = + vuzpq_u16(vreinterpretq_u16_u32(ab3210), vreinterpretq_u16_u32(ab7654)); + return vreinterpretq_m128i_u16(r.val[1]); +#endif +} + +// Computes pairwise add of each argument as single-precision, floating-point +// values a and b. +// https://msdn.microsoft.com/en-us/library/yd9wecaa.aspx +FORCE_INLINE __m128 _mm_hadd_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vpaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32( + vcombine_f32(vpadd_f32(a10, a32), vpadd_f32(b10, b32))); +#endif +} + +// Computes pairwise add of each argument as a 16-bit signed or unsigned integer +// values a and b. +FORCE_INLINE __m128i _mm_hadd_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); +#if defined(__aarch64__) + return vreinterpretq_m128i_s16(vpaddq_s16(a, b)); +#else + return vreinterpretq_m128i_s16( + vcombine_s16(vpadd_s16(vget_low_s16(a), vget_high_s16(a)), + vpadd_s16(vget_low_s16(b), vget_high_s16(b)))); +#endif +} + +// Horizontally substract adjacent pairs of single-precision (32-bit) +// floating-point elements in a and b, and pack the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_hsub_ps +FORCE_INLINE __m128 _mm_hsub_ps(__m128 _a, __m128 _b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32(vsubq_f32( + vuzp1q_f32(vreinterpretq_f32_m128(_a), vreinterpretq_f32_m128(_b)), + vuzp2q_f32(vreinterpretq_f32_m128(_a), vreinterpretq_f32_m128(_b)))); +#else + float32x4x2_t c = + vuzpq_f32(vreinterpretq_f32_m128(_a), vreinterpretq_f32_m128(_b)); + return vreinterpretq_m128_f32(vsubq_f32(c.val[0], c.val[1])); +#endif +} + +// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the +// signed 16-bit results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_hadd_pi16 +FORCE_INLINE __m64 _mm_hadd_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vpadd_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the +// signed 32-bit results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_hadd_pi32 +FORCE_INLINE __m64 _mm_hadd_pi32(__m64 a, __m64 b) +{ + return vreinterpret_m64_s32( + vpadd_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b))); +} + +// Computes pairwise difference of each argument as a 16-bit signed or unsigned +// integer values a and b. +FORCE_INLINE __m128i _mm_hsub_epi16(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|a4|a6|b0|b2|b4|b6] + // [a1|a3|a5|a7|b1|b3|b5|b7] + int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); + int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); + // Subtract + return vreinterpretq_m128i_s16(vsubq_s16(ab0246, ab1357)); +} + +// Computes saturated pairwise sub of each argument as a 16-bit signed +// integer values a and b. +FORCE_INLINE __m128i _mm_hadds_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + return vreinterpretq_s64_s16( + vqaddq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|a4|a6|b0|b2|b4|b6] + // [a1|a3|a5|a7|b1|b3|b5|b7] + int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); + int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); + // Saturated add + return vreinterpretq_m128i_s16(vqaddq_s16(ab0246, ab1357)); +#endif +} + +// Computes saturated pairwise difference of each argument as a 16-bit signed +// integer values a and b. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_hsubs_epi16 +FORCE_INLINE __m128i _mm_hsubs_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + return vreinterpretq_s64_s16( + vqsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|a4|a6|b0|b2|b4|b6] + // [a1|a3|a5|a7|b1|b3|b5|b7] + int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); + int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); + // Saturated subtract + return vreinterpretq_m128i_s16(vqsubq_s16(ab0246, ab1357)); +#endif +} + +// Computes pairwise add of each argument as a 32-bit signed or unsigned integer +// values a and b. +FORCE_INLINE __m128i _mm_hadd_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + return vreinterpretq_m128i_s32( + vcombine_s32(vpadd_s32(vget_low_s32(a), vget_high_s32(a)), + vpadd_s32(vget_low_s32(b), vget_high_s32(b)))); +} + +// Computes pairwise difference of each argument as a 32-bit signed or unsigned +// integer values a and b. +FORCE_INLINE __m128i _mm_hsub_epi32(__m128i _a, __m128i _b) +{ + int64x2_t a = vreinterpretq_s64_m128i(_a); + int64x2_t b = vreinterpretq_s64_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|b0|b2] + // [a1|a2|b1|b3] + int32x4_t ab02 = vcombine_s32(vmovn_s64(a), vmovn_s64(b)); + int32x4_t ab13 = vcombine_s32(vshrn_n_s64(a, 32), vshrn_n_s64(b, 32)); + // Subtract + return vreinterpretq_m128i_s32(vsubq_s32(ab02, ab13)); +} + +// Kahan summation for accurate summation of floating-point numbers. +// http://blog.zachbjornson.com/2019/08/11/fast-float-summation.html +FORCE_INLINE void sse2neon_kadd_f32(float *sum, float *c, float y) +{ + y -= *c; + float t = *sum + y; + *c = (t - *sum) - y; + *sum = t; +} + +// Conditionally multiply the packed single-precision (32-bit) floating-point +// elements in a and b using the high 4 bits in imm8, sum the four products, +// and conditionally store the sum in dst using the low 4 bits of imm. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dp_ps +FORCE_INLINE __m128 _mm_dp_ps(__m128 a, __m128 b, const int imm) +{ +#if defined(__aarch64__) + /* shortcuts */ + if (imm == 0xFF) { + return _mm_set1_ps(vaddvq_f32(_mm_mul_ps(a, b))); + } + if (imm == 0x7F) { + float32x4_t m = _mm_mul_ps(a, b); + m[3] = 0; + return _mm_set1_ps(vaddvq_f32(m)); + } +#endif + + float s = 0, c = 0; + float32x4_t f32a = vreinterpretq_f32_m128(a); + float32x4_t f32b = vreinterpretq_f32_m128(b); + + /* To improve the accuracy of floating-point summation, Kahan algorithm + * is used for each operation. + */ + if (imm & (1 << 4)) + sse2neon_kadd_f32(&s, &c, f32a[0] * f32b[0]); + if (imm & (1 << 5)) + sse2neon_kadd_f32(&s, &c, f32a[1] * f32b[1]); + if (imm & (1 << 6)) + sse2neon_kadd_f32(&s, &c, f32a[2] * f32b[2]); + if (imm & (1 << 7)) + sse2neon_kadd_f32(&s, &c, f32a[3] * f32b[3]); + s += c; + + float32x4_t res = { + (imm & 0x1) ? s : 0, + (imm & 0x2) ? s : 0, + (imm & 0x4) ? s : 0, + (imm & 0x8) ? s : 0, + }; + return vreinterpretq_m128_f32(res); +} + +/* Compare operations */ + +// Compares for less than +// https://msdn.microsoft.com/en-us/library/vstudio/f330yhc8(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmplt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for less than +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/fy94wye7(v=vs.100) +FORCE_INLINE __m128 _mm_cmplt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmplt_ps(a, b)); +} + +// Compares for greater than. +// +// r0 := (a0 > b0) ? 0xffffffff : 0x0 +// r1 := (a1 > b1) ? 0xffffffff : 0x0 +// r2 := (a2 > b2) ? 0xffffffff : 0x0 +// r3 := (a3 > b3) ? 0xffffffff : 0x0 +// +// https://msdn.microsoft.com/en-us/library/vstudio/11dy102s(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmpgt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for greater than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/1xyyyy9e(v=vs.100) +FORCE_INLINE __m128 _mm_cmpgt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpgt_ps(a, b)); +} + +// Compares for greater than or equal. +// https://msdn.microsoft.com/en-us/library/vstudio/fs813y2t(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmpge_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for greater than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/kesh3ddc(v=vs.100) +FORCE_INLINE __m128 _mm_cmpge_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpge_ps(a, b)); +} + +// Compares for less than or equal. +// +// r0 := (a0 <= b0) ? 0xffffffff : 0x0 +// r1 := (a1 <= b1) ? 0xffffffff : 0x0 +// r2 := (a2 <= b2) ? 0xffffffff : 0x0 +// r3 := (a3 <= b3) ? 0xffffffff : 0x0 +// +// https://msdn.microsoft.com/en-us/library/vstudio/1s75w83z(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmple_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for less than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/a7x0hbhw(v=vs.100) +FORCE_INLINE __m128 _mm_cmple_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmple_ps(a, b)); +} + +// Compares for equality. +// https://msdn.microsoft.com/en-us/library/vstudio/36aectz5(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmpeq_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compares for equality. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/k423z28e(v=vs.100) +FORCE_INLINE __m128 _mm_cmpeq_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpeq_ps(a, b)); +} + +// Compares for inequality. +// https://msdn.microsoft.com/en-us/library/sf44thbx(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cmpneq_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compares for inequality. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/ekya8fh4(v=vs.100) +FORCE_INLINE __m128 _mm_cmpneq_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpneq_ps(a, b)); +} + +// Compares for not greater than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/wsexys62(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnge_ps(__m128 a, __m128 b) +{ + return _mm_cmplt_ps(a, b); +} + +// Compares for not greater than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/fk2y80s8(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnge_ss(__m128 a, __m128 b) +{ + return _mm_cmplt_ss(a, b); +} + +// Compares for not greater than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/d0xh7w0s(v=vs.100) +FORCE_INLINE __m128 _mm_cmpngt_ps(__m128 a, __m128 b) +{ + return _mm_cmple_ps(a, b); +} + +// Compares for not greater than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/z7x9ydwh(v=vs.100) +FORCE_INLINE __m128 _mm_cmpngt_ss(__m128 a, __m128 b) +{ + return _mm_cmple_ss(a, b); +} + +// Compares for not less than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/6a330kxw(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnle_ps(__m128 a, __m128 b) +{ + return _mm_cmpgt_ps(a, b); +} + +// Compares for not less than or equal. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/z7x9ydwh(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnle_ss(__m128 a, __m128 b) +{ + return _mm_cmpgt_ss(a, b); +} + +// Compares for not less than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/4686bbdw(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnlt_ps(__m128 a, __m128 b) +{ + return _mm_cmpge_ps(a, b); +} + +// Compares for not less than. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/56b9z2wf(v=vs.100) +FORCE_INLINE __m128 _mm_cmpnlt_ss(__m128 a, __m128 b) +{ + return _mm_cmpge_ss(a, b); +} + +// Compares the 16 signed or unsigned 8-bit integers in a and the 16 signed or +// unsigned 8-bit integers in b for equality. +// https://msdn.microsoft.com/en-us/library/windows/desktop/bz5xk21a(v=vs.90).aspx +FORCE_INLINE __m128i _mm_cmpeq_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vceqq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compares the 8 signed or unsigned 16-bit integers in a and the 8 signed or +// unsigned 16-bit integers in b for equality. +// https://msdn.microsoft.com/en-us/library/2ay060te(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmpeq_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vceqq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed 32-bit integers in a and b for equality, and store the results +// in dst +FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vceqq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed 64-bit integers in a and b for equality, and store the results +// in dst +FORCE_INLINE __m128i _mm_cmpeq_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_u64( + vceqq_u64(vreinterpretq_u64_m128i(a), vreinterpretq_u64_m128i(b))); +#else + // ARMv7 lacks vceqq_u64 + // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) + uint32x4_t cmp = + vceqq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b)); + uint32x4_t swapped = vrev64q_u32(cmp); + return vreinterpretq_m128i_u32(vandq_u32(cmp, swapped)); +#endif +} + +// Compares the 16 signed 8-bit integers in a and the 16 signed 8-bit integers +// in b for lesser than. +// https://msdn.microsoft.com/en-us/library/windows/desktop/9s46csht(v=vs.90).aspx +FORCE_INLINE __m128i _mm_cmplt_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vcltq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compares the 16 signed 8-bit integers in a and the 16 signed 8-bit integers +// in b for greater than. +// +// r0 := (a0 > b0) ? 0xff : 0x0 +// r1 := (a1 > b1) ? 0xff : 0x0 +// ... +// r15 := (a15 > b15) ? 0xff : 0x0 +// +// https://msdn.microsoft.com/zh-tw/library/wf45zt2b(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmpgt_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vcgtq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compares the 8 signed 16-bit integers in a and the 8 signed 16-bit integers +// in b for less than. +// +// r0 := (a0 < b0) ? 0xffff : 0x0 +// r1 := (a1 < b1) ? 0xffff : 0x0 +// ... +// r7 := (a7 < b7) ? 0xffff : 0x0 +// +// https://technet.microsoft.com/en-us/library/t863edb2(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmplt_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcltq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compares the 8 signed 16-bit integers in a and the 8 signed 16-bit integers +// in b for greater than. +// +// r0 := (a0 > b0) ? 0xffff : 0x0 +// r1 := (a1 > b1) ? 0xffff : 0x0 +// ... +// r7 := (a7 > b7) ? 0xffff : 0x0 +// +// https://technet.microsoft.com/en-us/library/xd43yfsa(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmpgt_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcgtq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + + +// Compares the 4 signed 32-bit integers in a and the 4 signed 32-bit integers +// in b for less than. +// https://msdn.microsoft.com/en-us/library/vstudio/4ak0bf5d(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmplt_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vcltq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compares the 4 signed 32-bit integers in a and the 4 signed 32-bit integers +// in b for greater than. +// https://msdn.microsoft.com/en-us/library/vstudio/1s9f2z0y(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cmpgt_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vcgtq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compares the 2 signed 64-bit integers in a and the 2 signed 64-bit integers +// in b for greater than. +FORCE_INLINE __m128i _mm_cmpgt_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_u64( + vcgtq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +#else + // ARMv7 lacks vcgtq_s64. + // This is based off of Clang's SSE2 polyfill: + // (a > b) -> ((a_hi > b_hi) || (a_lo > b_lo && a_hi == b_hi)) + + // Mask the sign bit out since we need a signed AND an unsigned comparison + // and it is ugly to try and split them. + int32x4_t mask = vreinterpretq_s32_s64(vdupq_n_s64(0x80000000ull)); + int32x4_t a_mask = veorq_s32(vreinterpretq_s32_m128i(a), mask); + int32x4_t b_mask = veorq_s32(vreinterpretq_s32_m128i(b), mask); + // Check if a > b + int64x2_t greater = vreinterpretq_s64_u32(vcgtq_s32(a_mask, b_mask)); + // Copy upper mask to lower mask + // a_hi > b_hi + int64x2_t gt_hi = vshrq_n_s64(greater, 63); + // Copy lower mask to upper mask + // a_lo > b_lo + int64x2_t gt_lo = vsliq_n_s64(greater, greater, 32); + // Compare for equality + int64x2_t equal = vreinterpretq_s64_u32(vceqq_s32(a_mask, b_mask)); + // Copy upper mask to lower mask + // a_hi == b_hi + int64x2_t eq_hi = vshrq_n_s64(equal, 63); + // a_hi > b_hi || (a_lo > b_lo && a_hi == b_hi) + int64x2_t ret = vorrq_s64(gt_hi, vandq_s64(gt_lo, eq_hi)); + return vreinterpretq_m128i_s64(ret); +#endif +} + +// Compares the four 32-bit floats in a and b to check if any values are NaN. +// Ordered compare between each value returns true for "orderable" and false for +// "not orderable" (NaN). +// https://msdn.microsoft.com/en-us/library/vstudio/0h9w00fx(v=vs.100).aspx see +// also: +// http://stackoverflow.com/questions/8627331/what-does-ordered-unordered-comparison-mean +// http://stackoverflow.com/questions/29349621/neon-isnanval-intrinsics +FORCE_INLINE __m128 _mm_cmpord_ps(__m128 a, __m128 b) +{ + // Note: NEON does not have ordered compare builtin + // Need to compare a eq a and b eq b to check for NaN + // Do AND of results to get final + uint32x4_t ceqaa = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t ceqbb = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_u32(vandq_u32(ceqaa, ceqbb)); +} + +// Compares for ordered. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/343t62da(v=vs.100) +FORCE_INLINE __m128 _mm_cmpord_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpord_ps(a, b)); +} + +// Compares for unordered. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/khy6fk1t(v=vs.100) +FORCE_INLINE __m128 _mm_cmpunord_ps(__m128 a, __m128 b) +{ + uint32x4_t f32a = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t f32b = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_u32(vmvnq_u32(vandq_u32(f32a, f32b))); +} + +// Compares for unordered. +// https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/2as2387b(v=vs.100) +FORCE_INLINE __m128 _mm_cmpunord_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpunord_ps(a, b)); +} + +// Compares the lower single-precision floating point scalar values of a and b +// using a less than operation. : +// https://msdn.microsoft.com/en-us/library/2kwe606b(v=vs.90).aspx Important +// note!! The documentation on MSDN is incorrect! If either of the values is a +// NAN the docs say you will get a one, but in fact, it will return a zero!! +FORCE_INLINE int _mm_comilt_ss(__m128 a, __m128 b) +{ + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_lt_b = + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_lt_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using a greater than operation. : +// https://msdn.microsoft.com/en-us/library/b0738e0t(v=vs.100).aspx +FORCE_INLINE int _mm_comigt_ss(__m128 a, __m128 b) +{ + // return vgetq_lane_u32(vcgtq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_gt_b = + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_gt_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using a less than or equal operation. : +// https://msdn.microsoft.com/en-us/library/1w4t7c57(v=vs.90).aspx +FORCE_INLINE int _mm_comile_ss(__m128 a, __m128 b) +{ + // return vgetq_lane_u32(vcleq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_le_b = + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_le_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using a greater than or equal operation. : +// https://msdn.microsoft.com/en-us/library/8t80des6(v=vs.100).aspx +FORCE_INLINE int _mm_comige_ss(__m128 a, __m128 b) +{ + // return vgetq_lane_u32(vcgeq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_ge_b = + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_ge_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using an equality operation. : +// https://msdn.microsoft.com/en-us/library/93yx2h2b(v=vs.100).aspx +FORCE_INLINE int _mm_comieq_ss(__m128 a, __m128 b) +{ + // return vgetq_lane_u32(vceqq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_eq_b = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return (vgetq_lane_u32(vandq_u32(a_and_b_not_nan, a_eq_b), 0) != 0) ? 1 : 0; +} + +// Compares the lower single-precision floating point scalar values of a and b +// using an inequality operation. : +// https://msdn.microsoft.com/en-us/library/bafh5e0a(v=vs.90).aspx +FORCE_INLINE int _mm_comineq_ss(__m128 a, __m128 b) +{ + // return !vgetq_lane_u32(vceqq_f32(vreinterpretq_f32_m128(a), + // vreinterpretq_f32_m128(b)), 0); + uint32x4_t a_not_nan = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t b_not_nan = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + uint32x4_t a_or_b_nan = vmvnq_u32(vandq_u32(a_not_nan, b_not_nan)); + uint32x4_t a_neq_b = vmvnq_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); + return (vgetq_lane_u32(vorrq_u32(a_or_b_nan, a_neq_b), 0) != 0) ? 1 : 0; +} + +// according to the documentation, these intrinsics behave the same as the +// non-'u' versions. We'll just alias them here. +#define _mm_ucomilt_ss _mm_comilt_ss +#define _mm_ucomile_ss _mm_comile_ss +#define _mm_ucomigt_ss _mm_comigt_ss +#define _mm_ucomige_ss _mm_comige_ss +#define _mm_ucomieq_ss _mm_comieq_ss +#define _mm_ucomineq_ss _mm_comineq_ss + +/* Conversions */ + +// Convert packed signed 32-bit integers in b to packed single-precision +// (32-bit) floating-point elements, store the results in the lower 2 elements +// of dst, and copy the upper 2 packed elements from a to the upper elements of +// dst. +// +// dst[31:0] := Convert_Int32_To_FP32(b[31:0]) +// dst[63:32] := Convert_Int32_To_FP32(b[63:32]) +// dst[95:64] := a[95:64] +// dst[127:96] := a[127:96] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_pi2ps +FORCE_INLINE __m128 _mm_cvt_pi2ps(__m128 a, __m64 b) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), + vget_high_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert the signed 32-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// +// dst[31:0] := Convert_Int32_To_FP32(b[31:0]) +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_si2ss +FORCE_INLINE __m128 _mm_cvt_si2ss(__m128 a, int b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); +} + +// Convert the signed 32-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// +// dst[31:0] := Convert_Int32_To_FP32(b[31:0]) +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi32_ss +#define _mm_cvtsi32_ss(a, b) _mm_cvt_si2ss(a, b) + +// Convert the signed 64-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// +// dst[31:0] := Convert_Int64_To_FP32(b[63:0]) +// dst[127:32] := a[127:32] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi64_ss +FORCE_INLINE __m128 _mm_cvtsi64_ss(__m128 a, int64_t b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_ss2si +FORCE_INLINE int _mm_cvt_ss2si(__m128 a) +{ +#if defined(__aarch64__) + return vgetq_lane_s32(vcvtnq_s32_f32(vreinterpretq_f32_m128(a)), 0); +#else + float32_t data = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32_t diff = data - floor(data); + if (diff > 0.5) + return (int32_t) ceil(data); + if (diff == 0.5) { + int32_t f = (int32_t) floor(data); + int32_t c = (int32_t) ceil(data); + return c & 1 ? f : c; + } + return (int32_t) floor(data); +#endif +} + +// Convert packed 16-bit integers in a to packed single-precision (32-bit) +// floating-point elements, and store the results in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// m := j*32 +// dst[m+31:m] := Convert_Int16_To_FP32(a[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpi16_ps +FORCE_INLINE __m128 _mm_cvtpi16_ps(__m64 a) +{ + return vreinterpretq_m128_f32( + vcvtq_f32_s32(vmovl_s16(vreinterpret_s16_m64(a)))); +} + +// Convert packed 32-bit integers in b to packed single-precision (32-bit) +// floating-point elements, store the results in the lower 2 elements of dst, +// and copy the upper 2 packed elements from a to the upper elements of dst. +// +// dst[31:0] := Convert_Int32_To_FP32(b[31:0]) +// dst[63:32] := Convert_Int32_To_FP32(b[63:32]) +// dst[95:64] := a[95:64] +// dst[127:96] := a[127:96] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpi32_ps +FORCE_INLINE __m128 _mm_cvtpi32_ps(__m128 a, __m64 b) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), + vget_high_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert packed signed 32-bit integers in a to packed single-precision +// (32-bit) floating-point elements, store the results in the lower 2 elements +// of dst, then covert the packed signed 32-bit integers in b to +// single-precision (32-bit) floating-point element, and store the results in +// the upper 2 elements of dst. +// +// dst[31:0] := Convert_Int32_To_FP32(a[31:0]) +// dst[63:32] := Convert_Int32_To_FP32(a[63:32]) +// dst[95:64] := Convert_Int32_To_FP32(b[31:0]) +// dst[127:96] := Convert_Int32_To_FP32(b[63:32]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpi32x2_ps +FORCE_INLINE __m128 _mm_cvtpi32x2_ps(__m64 a, __m64 b) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32( + vcombine_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b)))); +} + +// Convert the lower packed 8-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// +// FOR j := 0 to 3 +// i := j*8 +// m := j*32 +// dst[m+31:m] := Convert_Int8_To_FP32(a[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpi8_ps +FORCE_INLINE __m128 _mm_cvtpi8_ps(__m64 a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32( + vmovl_s16(vget_low_s16(vmovl_s8(vreinterpret_s8_m64(a)))))); +} + +// Convert packed unsigned 16-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// +// FOR j := 0 to 3 +// i := j*16 +// m := j*32 +// dst[m+31:m] := Convert_UInt16_To_FP32(a[i+15:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpu16_ps +FORCE_INLINE __m128 _mm_cvtpu16_ps(__m64 a) +{ + return vreinterpretq_m128_f32( + vcvtq_f32_u32(vmovl_u16(vreinterpret_u16_m64(a)))); +} + +// Convert the lower packed unsigned 8-bit integers in a to packed +// single-precision (32-bit) floating-point elements, and store the results in +// dst. +// +// FOR j := 0 to 3 +// i := j*8 +// m := j*32 +// dst[m+31:m] := Convert_UInt8_To_FP32(a[i+7:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpu8_ps +FORCE_INLINE __m128 _mm_cvtpu8_ps(__m64 a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_u32( + vmovl_u16(vget_low_u16(vmovl_u8(vreinterpret_u8_m64(a)))))); +} + +// Converts the four single-precision, floating-point values of a to signed +// 32-bit integer values using truncate. +// https://msdn.microsoft.com/en-us/library/vstudio/1h005y6x(v=vs.100).aspx +FORCE_INLINE __m128i _mm_cvttps_epi32(__m128 a) +{ + return vreinterpretq_m128i_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a))); +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// +// dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttsd_si64 +FORCE_INLINE int64_t _mm_cvttsd_si64(__m128d a) +{ +#if defined(__aarch64__) + return vgetq_lane_s64(vcvtq_s64_f64(vreinterpretq_f64_m128d(a)), 0); +#else + double ret = *((double *) &a); + return (int64_t) ret; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// +// dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0]) +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttsd_si64x +#define _mm_cvttsd_si64x(a) _mm_cvttsd_si64(a) + +// Converts the four signed 32-bit integer values of a to single-precision, +// floating-point values +// https://msdn.microsoft.com/en-us/library/vstudio/36bwxcx5(v=vs.100).aspx +FORCE_INLINE __m128 _mm_cvtepi32_ps(__m128i a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32(vreinterpretq_s32_m128i(a))); +} + +// Converts the four unsigned 8-bit integers in the lower 16 bits to four +// unsigned 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepu8_epi16(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx DCBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + return vreinterpretq_m128i_u16(u16x8); +} + +// Converts the four unsigned 8-bit integers in the lower 32 bits to four +// unsigned 32-bit integers. +// https://msdn.microsoft.com/en-us/library/bb531467%28v=vs.100%29.aspx +FORCE_INLINE __m128i _mm_cvtepu8_epi32(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx DCBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000D 000C 000B 000A */ + return vreinterpretq_m128i_u32(u32x4); +} + +// Converts the two unsigned 8-bit integers in the lower 16 bits to two +// unsigned 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepu8_epi64(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx xxBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0x0x 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ + uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_u64(u64x2); +} + +// Converts the four unsigned 8-bit integers in the lower 16 bits to four +// unsigned 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepi8_epi16(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + return vreinterpretq_m128i_s16(s16x8); +} + +// Converts the four unsigned 8-bit integers in the lower 32 bits to four +// unsigned 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepi8_epi32(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000D 000C 000B 000A */ + return vreinterpretq_m128i_s32(s32x4); +} + +// Converts the two signed 8-bit integers in the lower 32 bits to four +// signed 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepi8_epi64(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx xxBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0x0x 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ + int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_s64(s64x2); +} + +// Converts the four signed 16-bit integers in the lower 64 bits to four signed +// 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepi16_epi32(__m128i a) +{ + return vreinterpretq_m128i_s32( + vmovl_s16(vget_low_s16(vreinterpretq_s16_m128i(a)))); +} + +// Converts the two signed 16-bit integers in the lower 32 bits two signed +// 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepi16_epi64(__m128i a) +{ + int16x8_t s16x8 = vreinterpretq_s16_m128i(a); /* xxxx xxxx xxxx 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ + int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_s64(s64x2); +} + +// Converts the four unsigned 16-bit integers in the lower 64 bits to four +// unsigned 32-bit integers. +FORCE_INLINE __m128i _mm_cvtepu16_epi32(__m128i a) +{ + return vreinterpretq_m128i_u32( + vmovl_u16(vget_low_u16(vreinterpretq_u16_m128i(a)))); +} + +// Converts the two unsigned 16-bit integers in the lower 32 bits to two +// unsigned 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepu16_epi64(__m128i a) +{ + uint16x8_t u16x8 = vreinterpretq_u16_m128i(a); /* xxxx xxxx xxxx 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ + uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_u64(u64x2); +} + +// Converts the two unsigned 32-bit integers in the lower 64 bits to two +// unsigned 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepu32_epi64(__m128i a) +{ + return vreinterpretq_m128i_u64( + vmovl_u32(vget_low_u32(vreinterpretq_u32_m128i(a)))); +} + +// Converts the two signed 32-bit integers in the lower 64 bits to two signed +// 64-bit integers. +FORCE_INLINE __m128i _mm_cvtepi32_epi64(__m128i a) +{ + return vreinterpretq_m128i_s64( + vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a)))); +} + +// Converts the four single-precision, floating-point values of a to signed +// 32-bit integer values. +// +// r0 := (int) a0 +// r1 := (int) a1 +// r2 := (int) a2 +// r3 := (int) a3 +// +// https://msdn.microsoft.com/en-us/library/vstudio/xdc42k5e(v=vs.100).aspx +// *NOTE*. The default rounding mode on SSE is 'round to even', which ARMv7-A +// does not support! It is supported on ARMv8-A however. +FORCE_INLINE __m128i _mm_cvtps_epi32(__m128 a) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s32(vcvtnq_s32_f32(a)); +#else + uint32x4_t signmask = vdupq_n_u32(0x80000000); + float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), + vdupq_n_f32(0.5f)); /* +/- 0.5 */ + int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( + vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ + int32x4_t r_trunc = + vcvtq_s32_f32(vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ + int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( + vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ + int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), + vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ + float32x4_t delta = vsubq_f32( + vreinterpretq_f32_m128(a), + vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ + uint32x4_t is_delta_half = vceqq_f32(delta, half); /* delta == +/- 0.5 */ + return vreinterpretq_m128i_s32(vbslq_s32(is_delta_half, r_even, r_normal)); +#endif +} + +// Copy the lower 32-bit integer in a to dst. +// +// dst[31:0] := a[31:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi128_si32 +FORCE_INLINE int _mm_cvtsi128_si32(__m128i a) +{ + return vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); +} + +// Copy the lower 64-bit integer in a to dst. +// +// dst[63:0] := a[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi128_si64 +FORCE_INLINE int64_t _mm_cvtsi128_si64(__m128i a) +{ + return vgetq_lane_s64(vreinterpretq_s64_m128i(a), 0); +} + +// Copy the lower 64-bit integer in a to dst. +// +// dst[63:0] := a[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi128_si64x +#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) + +// Moves 32-bit integer a to the least significant 32 bits of an __m128 object, +// zero extending the upper bits. +// +// r0 := a +// r1 := 0x0 +// r2 := 0x0 +// r3 := 0x0 +// +// https://msdn.microsoft.com/en-us/library/ct3539ha%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_cvtsi32_si128(int a) +{ + return vreinterpretq_m128i_s32(vsetq_lane_s32(a, vdupq_n_s32(0), 0)); +} + +// Moves 64-bit integer a to the least significant 64 bits of an __m128 object, +// zero extending the upper bits. +// +// r0 := a +// r1 := 0x0 +FORCE_INLINE __m128i _mm_cvtsi64_si128(int64_t a) +{ + return vreinterpretq_m128i_s64(vsetq_lane_s64(a, vdupq_n_s64(0), 0)); +} + +// Cast vector of type __m128 to type __m128d. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castps_pd +FORCE_INLINE __m128d _mm_castps_pd(__m128 a) +{ + return vreinterpretq_m128d_s32(vreinterpretq_s32_m128(a)); +} + +// Applies a type cast to reinterpret four 32-bit floating point values passed +// in as a 128-bit parameter as packed 32-bit integers. +// https://msdn.microsoft.com/en-us/library/bb514099.aspx +FORCE_INLINE __m128i _mm_castps_si128(__m128 a) +{ + return vreinterpretq_m128i_s32(vreinterpretq_s32_m128(a)); +} + +// Applies a type cast to reinterpret four 32-bit integers passed in as a +// 128-bit parameter as packed 32-bit floating point values. +// https://msdn.microsoft.com/en-us/library/bb514029.aspx +FORCE_INLINE __m128 _mm_castsi128_ps(__m128i a) +{ + return vreinterpretq_m128_s32(vreinterpretq_s32_m128i(a)); +} + +// Loads 128-bit value. : +// https://msdn.microsoft.com/en-us/library/atzzad1h(v=vs.80).aspx +FORCE_INLINE __m128i _mm_load_si128(const __m128i *p) +{ + return vreinterpretq_m128i_s32(vld1q_s32((const int32_t *) p)); +} + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load1_pd +FORCE_INLINE __m128d _mm_load1_pd(const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64(vld1q_dup_f64(p)); +#else + return vreinterpretq_m128d_s64(vdupq_n_s64(*(const int64_t *) p)); +#endif +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// upper element of dst, and copy the lower element from a to dst. mem_addr does +// not need to be aligned on any particular boundary. +// +// dst[63:0] := a[63:0] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadh_pd +FORCE_INLINE __m128d _mm_loadh_pd(__m128d a, const double *p) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vcombine_f64(vget_low_f64(vreinterpretq_f64_m128d(a)), vld1_f64(p))); +#else + return vreinterpretq_m128d_f32(vcombine_f32( + vget_low_f32(vreinterpretq_f32_m128d(a)), vld1_f32((const float *) p))); +#endif +} + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_pd1 +#define _mm_load_pd1 _mm_load1_pd + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// +// dst[63:0] := MEM[mem_addr+63:mem_addr] +// dst[127:64] := MEM[mem_addr+63:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loaddup_pd +#define _mm_loaddup_pd _mm_load1_pd + +// Loads 128-bit value. : +// https://msdn.microsoft.com/zh-cn/library/f4k12ae8(v=vs.90).aspx +FORCE_INLINE __m128i _mm_loadu_si128(const __m128i *p) +{ + return vreinterpretq_m128i_s32(vld1q_s32((const int32_t *) p)); +} + +// Load unaligned 32-bit integer from memory into the first element of dst. +// +// dst[31:0] := MEM[mem_addr+31:mem_addr] +// dst[MAX:32] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_si32 +FORCE_INLINE __m128i _mm_loadu_si32(const void *p) +{ + return vreinterpretq_m128i_s32( + vsetq_lane_s32(*(const int32_t *) p, vdupq_n_s32(0), 0)); +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed single-precision (32-bit) floating-point elements, and store the +// results in dst. +// +// FOR j := 0 to 1 +// i := 32*j +// k := 64*j +// dst[i+31:i] := Convert_FP64_To_FP32(a[k+64:k]) +// ENDFOR +// dst[127:64] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpd_ps +FORCE_INLINE __m128 _mm_cvtpd_ps(__m128d a) +{ +#if defined(__aarch64__) + float32x2_t tmp = vcvt_f32_f64(vreinterpretq_f64_m128d(a)); + return vreinterpretq_m128_f32(vcombine_f32(tmp, vdup_n_f32(0))); +#else + float a0 = (float) ((double *) &a)[0]; + float a1 = (float) ((double *) &a)[1]; + return _mm_set_ps(0, 0, a1, a0); +#endif +} + +// Copy the lower double-precision (64-bit) floating-point element of a to dst. +// +// dst[63:0] := a[63:0] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsd_f64 +FORCE_INLINE double _mm_cvtsd_f64(__m128d a) +{ +#if defined(__aarch64__) + return (double) vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0); +#else + return ((double *) &a)[0]; +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed double-precision (64-bit) floating-point elements, and store the +// results in dst. +// +// FOR j := 0 to 1 +// i := 64*j +// k := 32*j +// dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtps_pd +FORCE_INLINE __m128d _mm_cvtps_pd(__m128 a) +{ +#if defined(__aarch64__) + return vreinterpretq_m128d_f64( + vcvt_f64_f32(vget_low_f32(vreinterpretq_f32_m128(a)))); +#else + double a0 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + double a1 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); + return _mm_set_pd(a1, a0); +#endif +} + +// Cast vector of type __m128d to type __m128i. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castpd_si128 +FORCE_INLINE __m128i _mm_castpd_si128(__m128d a) +{ + return vreinterpretq_m128i_s64(vreinterpretq_s64_m128d(a)); +} + +// Blend packed single-precision (32-bit) floating-point elements from a and b +// using mask, and store the results in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_blendv_ps +FORCE_INLINE __m128 _mm_blendv_ps(__m128 a, __m128 b, __m128 mask) +{ + return vreinterpretq_m128_f32(vbslq_f32(vreinterpretq_u32_m128(mask), + vreinterpretq_f32_m128(b), + vreinterpretq_f32_m128(a))); +} + +// Round the packed single-precision (32-bit) floating-point elements in a using +// the rounding parameter, and store the results as packed single-precision +// floating-point elements in dst. +// software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_round_ps +FORCE_INLINE __m128 _mm_round_ps(__m128 a, int rounding) +{ +#if defined(__aarch64__) + switch (rounding) { + case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndnq_f32(vreinterpretq_f32_m128(a))); + case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndmq_f32(vreinterpretq_f32_m128(a))); + case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndpq_f32(vreinterpretq_f32_m128(a))); + case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndq_f32(vreinterpretq_f32_m128(a))); + default: //_MM_FROUND_CUR_DIRECTION + return vreinterpretq_m128_f32(vrndiq_f32(vreinterpretq_f32_m128(a))); + } +#else + float *v_float = (float *) &a; + __m128 zero, neg_inf, pos_inf; + + switch (rounding) { + case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): + return _mm_cvtepi32_ps(_mm_cvtps_epi32(a)); + case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): + return (__m128){floorf(v_float[0]), floorf(v_float[1]), + floorf(v_float[2]), floorf(v_float[3])}; + case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): + return (__m128){ceilf(v_float[0]), ceilf(v_float[1]), ceilf(v_float[2]), + ceilf(v_float[3])}; + case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): + zero = _mm_set_ps(0.0f, 0.0f, 0.0f, 0.0f); + neg_inf = _mm_set_ps(floorf(v_float[0]), floorf(v_float[1]), + floorf(v_float[2]), floorf(v_float[3])); + pos_inf = _mm_set_ps(ceilf(v_float[0]), ceilf(v_float[1]), + ceilf(v_float[2]), ceilf(v_float[3])); + return _mm_blendv_ps(pos_inf, neg_inf, _mm_cmple_ps(a, zero)); + default: //_MM_FROUND_CUR_DIRECTION + return (__m128){roundf(v_float[0]), roundf(v_float[1]), + roundf(v_float[2]), roundf(v_float[3])}; + } +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// +// FOR j := 0 to 1 +// i := 32*j +// dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i]) +// ENDFOR +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_ps2pi +FORCE_INLINE __m64 _mm_cvt_ps2pi(__m128 a) +{ +#if defined(__aarch64__) + return vreinterpret_m64_s32( + vget_low_s32(vcvtnq_s32_f32(vreinterpretq_f32_m128(a)))); +#else + return vreinterpret_m64_s32( + vcvt_s32_f32(vget_low_f32(vreinterpretq_f32_m128( + _mm_round_ps(a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC))))); +#endif +} + +// Round the packed single-precision (32-bit) floating-point elements in a up to +// an integer value, and store the results as packed single-precision +// floating-point elements in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_ceil_ps +FORCE_INLINE __m128 _mm_ceil_ps(__m128 a) +{ + return _mm_round_ps(a, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); +} + +// Round the packed single-precision (32-bit) floating-point elements in a down +// to an integer value, and store the results as packed single-precision +// floating-point elements in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_floor_ps +FORCE_INLINE __m128 _mm_floor_ps(__m128 a) +{ + return _mm_round_ps(a, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC); +} + + +// Load 128-bits of integer data from unaligned memory into dst. This intrinsic +// may perform better than _mm_loadu_si128 when the data crosses a cache line +// boundary. +// +// dst[127:0] := MEM[mem_addr+127:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_lddqu_si128 +#define _mm_lddqu_si128 _mm_loadu_si128 + +/* Miscellaneous Operations */ + +// Shifts the 8 signed 16-bit integers in a right by count bits while shifting +// in the sign bit. +// +// r0 := a0 >> count +// r1 := a1 >> count +// ... +// r7 := a7 >> count +// +// https://msdn.microsoft.com/en-us/library/3c9997dk(v%3dvs.90).aspx +FORCE_INLINE __m128i _mm_sra_epi16(__m128i a, __m128i count) +{ + int64_t c = (int64_t) vget_low_s64((int64x2_t) count); + if (c > 15) + return _mm_cmplt_epi16(a, _mm_setzero_si128()); + return vreinterpretq_m128i_s16(vshlq_s16((int16x8_t) a, vdupq_n_s16(-c))); +} + +// Shifts the 4 signed 32-bit integers in a right by count bits while shifting +// in the sign bit. +// +// r0 := a0 >> count +// r1 := a1 >> count +// r2 := a2 >> count +// r3 := a3 >> count +// +// https://msdn.microsoft.com/en-us/library/ce40009e(v%3dvs.100).aspx +FORCE_INLINE __m128i _mm_sra_epi32(__m128i a, __m128i count) +{ + int64_t c = (int64_t) vget_low_s64((int64x2_t) count); + if (c > 31) + return _mm_cmplt_epi32(a, _mm_setzero_si128()); + return vreinterpretq_m128i_s32(vshlq_s32((int32x4_t) a, vdupq_n_s32(-c))); +} + +// Packs the 16 signed 16-bit integers from a and b into 8-bit integers and +// saturates. +// https://msdn.microsoft.com/en-us/library/k4y4f7w5%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_packs_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vcombine_s8(vqmovn_s16(vreinterpretq_s16_m128i(a)), + vqmovn_s16(vreinterpretq_s16_m128i(b)))); +} + +// Packs the 16 signed 16 - bit integers from a and b into 8 - bit unsigned +// integers and saturates. +// +// r0 := UnsignedSaturate(a0) +// r1 := UnsignedSaturate(a1) +// ... +// r7 := UnsignedSaturate(a7) +// r8 := UnsignedSaturate(b0) +// r9 := UnsignedSaturate(b1) +// ... +// r15 := UnsignedSaturate(b7) +// +// https://msdn.microsoft.com/en-us/library/07ad1wx4(v=vs.100).aspx +FORCE_INLINE __m128i _mm_packus_epi16(const __m128i a, const __m128i b) +{ + return vreinterpretq_m128i_u8( + vcombine_u8(vqmovun_s16(vreinterpretq_s16_m128i(a)), + vqmovun_s16(vreinterpretq_s16_m128i(b)))); +} + +// Packs the 8 signed 32-bit integers from a and b into signed 16-bit integers +// and saturates. +// +// r0 := SignedSaturate(a0) +// r1 := SignedSaturate(a1) +// r2 := SignedSaturate(a2) +// r3 := SignedSaturate(a3) +// r4 := SignedSaturate(b0) +// r5 := SignedSaturate(b1) +// r6 := SignedSaturate(b2) +// r7 := SignedSaturate(b3) +// +// https://msdn.microsoft.com/en-us/library/393t56f9%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_packs_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vcombine_s16(vqmovn_s32(vreinterpretq_s32_m128i(a)), + vqmovn_s32(vreinterpretq_s32_m128i(b)))); +} + +// Packs the 8 unsigned 32-bit integers from a and b into unsigned 16-bit +// integers and saturates. +// +// r0 := UnsignedSaturate(a0) +// r1 := UnsignedSaturate(a1) +// r2 := UnsignedSaturate(a2) +// r3 := UnsignedSaturate(a3) +// r4 := UnsignedSaturate(b0) +// r5 := UnsignedSaturate(b1) +// r6 := UnsignedSaturate(b2) +// r7 := UnsignedSaturate(b3) +FORCE_INLINE __m128i _mm_packus_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcombine_u16(vqmovun_s32(vreinterpretq_s32_m128i(a)), + vqmovun_s32(vreinterpretq_s32_m128i(b)))); +} + +// Interleaves the lower 8 signed or unsigned 8-bit integers in a with the lower +// 8 signed or unsigned 8-bit integers in b. +// +// r0 := a0 +// r1 := b0 +// r2 := a1 +// r3 := b1 +// ... +// r14 := a7 +// r15 := b7 +// +// https://msdn.microsoft.com/en-us/library/xf7k860c%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_unpacklo_epi8(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s8( + vzip1q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +#else + int8x8_t a1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(a))); + int8x8_t b1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(b))); + int8x8x2_t result = vzip_s8(a1, b1); + return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); +#endif +} + +// Interleaves the lower 4 signed or unsigned 16-bit integers in a with the +// lower 4 signed or unsigned 16-bit integers in b. +// +// r0 := a0 +// r1 := b0 +// r2 := a1 +// r3 := b1 +// r4 := a2 +// r5 := b2 +// r6 := a3 +// r7 := b3 +// +// https://msdn.microsoft.com/en-us/library/btxb17bw%28v=vs.90%29.aspx +FORCE_INLINE __m128i _mm_unpacklo_epi16(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s16( + vzip1q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +#else + int16x4_t a1 = vget_low_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b1 = vget_low_s16(vreinterpretq_s16_m128i(b)); + int16x4x2_t result = vzip_s16(a1, b1); + return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); +#endif +} + +// Interleaves the lower 2 signed or unsigned 32 - bit integers in a with the +// lower 2 signed or unsigned 32 - bit integers in b. +// +// r0 := a0 +// r1 := b0 +// r2 := a1 +// r3 := b1 +// +// https://msdn.microsoft.com/en-us/library/x8atst9d(v=vs.100).aspx +FORCE_INLINE __m128i _mm_unpacklo_epi32(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s32( + vzip1q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +#else + int32x2_t a1 = vget_low_s32(vreinterpretq_s32_m128i(a)); + int32x2_t b1 = vget_low_s32(vreinterpretq_s32_m128i(b)); + int32x2x2_t result = vzip_s32(a1, b1); + return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); +#endif +} + +FORCE_INLINE __m128i _mm_unpacklo_epi64(__m128i a, __m128i b) +{ + int64x1_t a_l = vget_low_s64(vreinterpretq_s64_m128i(a)); + int64x1_t b_l = vget_low_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vcombine_s64(a_l, b_l)); +} + +// Selects and interleaves the lower two single-precision, floating-point values +// from a and b. +// +// r0 := a0 +// r1 := b0 +// r2 := a1 +// r3 := b1 +// +// https://msdn.microsoft.com/en-us/library/25st103b%28v=vs.90%29.aspx +FORCE_INLINE __m128 _mm_unpacklo_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vzip1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a1 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b1 = vget_low_f32(vreinterpretq_f32_m128(b)); + float32x2x2_t result = vzip_f32(a1, b1); + return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); +#endif +} + +// Selects and interleaves the upper two single-precision, floating-point values +// from a and b. +// +// r0 := a2 +// r1 := b2 +// r2 := a3 +// r3 := b3 +// +// https://msdn.microsoft.com/en-us/library/skccxx7d%28v=vs.90%29.aspx +FORCE_INLINE __m128 _mm_unpackhi_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128_f32( + vzip2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a1 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b1 = vget_high_f32(vreinterpretq_f32_m128(b)); + float32x2x2_t result = vzip_f32(a1, b1); + return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); +#endif +} + +// Interleaves the upper 8 signed or unsigned 8-bit integers in a with the upper +// 8 signed or unsigned 8-bit integers in b. +// +// r0 := a8 +// r1 := b8 +// r2 := a9 +// r3 := b9 +// ... +// r14 := a15 +// r15 := b15 +// +// https://msdn.microsoft.com/en-us/library/t5h7783k(v=vs.100).aspx +FORCE_INLINE __m128i _mm_unpackhi_epi8(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s8( + vzip2q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +#else + int8x8_t a1 = + vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(a))); + int8x8_t b1 = + vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(b))); + int8x8x2_t result = vzip_s8(a1, b1); + return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); +#endif +} + +// Interleaves the upper 4 signed or unsigned 16-bit integers in a with the +// upper 4 signed or unsigned 16-bit integers in b. +// +// r0 := a4 +// r1 := b4 +// r2 := a5 +// r3 := b5 +// r4 := a6 +// r5 := b6 +// r6 := a7 +// r7 := b7 +// +// https://msdn.microsoft.com/en-us/library/03196cz7(v=vs.100).aspx +FORCE_INLINE __m128i _mm_unpackhi_epi16(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s16( + vzip2q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +#else + int16x4_t a1 = vget_high_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b1 = vget_high_s16(vreinterpretq_s16_m128i(b)); + int16x4x2_t result = vzip_s16(a1, b1); + return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); +#endif +} + +// Interleaves the upper 2 signed or unsigned 32-bit integers in a with the +// upper 2 signed or unsigned 32-bit integers in b. +// https://msdn.microsoft.com/en-us/library/65sa7cbs(v=vs.100).aspx +FORCE_INLINE __m128i _mm_unpackhi_epi32(__m128i a, __m128i b) +{ +#if defined(__aarch64__) + return vreinterpretq_m128i_s32( + vzip2q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +#else + int32x2_t a1 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t b1 = vget_high_s32(vreinterpretq_s32_m128i(b)); + int32x2x2_t result = vzip_s32(a1, b1); + return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); +#endif +} + +// Interleaves the upper signed or unsigned 64-bit integer in a with the +// upper signed or unsigned 64-bit integer in b. +// +// r0 := a1 +// r1 := b1 +FORCE_INLINE __m128i _mm_unpackhi_epi64(__m128i a, __m128i b) +{ + int64x1_t a_h = vget_high_s64(vreinterpretq_s64_m128i(a)); + int64x1_t b_h = vget_high_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vcombine_s64(a_h, b_h)); +} + +// Horizontally compute the minimum amongst the packed unsigned 16-bit integers +// in a, store the minimum and index in dst, and zero the remaining bits in dst. +// +// index[2:0] := 0 +// min[15:0] := a[15:0] +// FOR j := 0 to 7 +// i := j*16 +// IF a[i+15:i] < min[15:0] +// index[2:0] := j +// min[15:0] := a[i+15:i] +// FI +// ENDFOR +// dst[15:0] := min[15:0] +// dst[18:16] := index[2:0] +// dst[127:19] := 0 +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_minpos_epu16 +FORCE_INLINE __m128i _mm_minpos_epu16(__m128i a) +{ + __m128i dst; + uint16_t min, idx = 0; + // Find the minimum value +#if defined(__aarch64__) + min = vminvq_u16(vreinterpretq_u16_m128i(a)); +#else + __m64 tmp; + tmp = vreinterpret_m64_u16( + vmin_u16(vget_low_u16(vreinterpretq_u16_m128i(a)), + vget_high_u16(vreinterpretq_u16_m128i(a)))); + tmp = vreinterpret_m64_u16( + vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); + tmp = vreinterpret_m64_u16( + vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); + min = vget_lane_u16(vreinterpret_u16_m64(tmp), 0); +#endif + // Get the index of the minimum value + int i; + for (i = 0; i < 8; i++) { + if (min == vgetq_lane_u16(vreinterpretq_u16_m128i(a), 0)) { + idx = (uint16_t) i; + break; + } + a = _mm_srli_si128(a, 2); + } + // Generate result + dst = _mm_setzero_si128(); + dst = vreinterpretq_m128i_u16( + vsetq_lane_u16(min, vreinterpretq_u16_m128i(dst), 0)); + dst = vreinterpretq_m128i_u16( + vsetq_lane_u16(idx, vreinterpretq_u16_m128i(dst), 1)); + return dst; +} + +// shift to right +// https://msdn.microsoft.com/en-us/library/bb514041(v=vs.120).aspx +// http://blog.csdn.net/hemmingway/article/details/44828303 +// Clang requires a macro here, as it is extremely picky about c being a +// literal. +#define _mm_alignr_epi8(a, b, c) \ + ((__m128i) vextq_s8((int8x16_t)(b), (int8x16_t)(a), (c))) + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return the CF value. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_testc_si128 +FORCE_INLINE int _mm_testc_si128(__m128i a, __m128i b) +{ + int64x2_t s64 = + vandq_s64(vreinterpretq_s64_s32(vmvnq_s32(vreinterpretq_s32_m128i(a))), + vreinterpretq_s64_m128i(b)); + return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return the ZF value. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_testz_si128 +FORCE_INLINE int _mm_testz_si128(__m128i a, __m128i b) +{ + int64x2_t s64 = + vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b)); + return !(vgetq_lane_s64(s64, 0) | vgetq_lane_s64(s64, 1)); +} + +// Extracts the selected signed or unsigned 8-bit integer from a and zero +// extends. +// FORCE_INLINE int _mm_extract_epi8(__m128i a, __constrange(0,16) int imm) +#define _mm_extract_epi8(a, imm) vgetq_lane_u8(vreinterpretq_u8_m128i(a), (imm)) + +// Inserts the least significant 8 bits of b into the selected 8-bit integer +// of a. +// FORCE_INLINE __m128i _mm_insert_epi8(__m128i a, int b, +// __constrange(0,16) int imm) +#define _mm_insert_epi8(a, b, imm) \ + __extension__({ \ + vreinterpretq_m128i_s8( \ + vsetq_lane_s8((b), vreinterpretq_s8_m128i(a), (imm))); \ + }) + +// Extracts the selected signed or unsigned 16-bit integer from a and zero +// extends. +// https://msdn.microsoft.com/en-us/library/6dceta0c(v=vs.100).aspx +// FORCE_INLINE int _mm_extract_epi16(__m128i a, __constrange(0,8) int imm) +#define _mm_extract_epi16(a, imm) \ + vgetq_lane_u16(vreinterpretq_u16_m128i(a), (imm)) + +// Inserts the least significant 16 bits of b into the selected 16-bit integer +// of a. +// https://msdn.microsoft.com/en-us/library/kaze8hz1%28v=vs.100%29.aspx +// FORCE_INLINE __m128i _mm_insert_epi16(__m128i a, int b, +// __constrange(0,8) int imm) +#define _mm_insert_epi16(a, b, imm) \ + __extension__({ \ + vreinterpretq_m128i_s16( \ + vsetq_lane_s16((b), vreinterpretq_s16_m128i(a), (imm))); \ + }) + +// Extracts the selected signed or unsigned 32-bit integer from a and zero +// extends. +// FORCE_INLINE int _mm_extract_epi32(__m128i a, __constrange(0,4) int imm) +#define _mm_extract_epi32(a, imm) \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)) + +// Extracts the selected single-precision (32-bit) floating-point from a. +// FORCE_INLINE int _mm_extract_ps(__m128 a, __constrange(0,4) int imm) +#define _mm_extract_ps(a, imm) vgetq_lane_s32(vreinterpretq_s32_m128(a), (imm)) + +// Inserts the least significant 32 bits of b into the selected 32-bit integer +// of a. +// FORCE_INLINE __m128i _mm_insert_epi32(__m128i a, int b, +// __constrange(0,4) int imm) +#define _mm_insert_epi32(a, b, imm) \ + __extension__({ \ + vreinterpretq_m128i_s32( \ + vsetq_lane_s32((b), vreinterpretq_s32_m128i(a), (imm))); \ + }) + +// Extracts the selected signed or unsigned 64-bit integer from a and zero +// extends. +// FORCE_INLINE __int64 _mm_extract_epi64(__m128i a, __constrange(0,2) int imm) +#define _mm_extract_epi64(a, imm) \ + vgetq_lane_s64(vreinterpretq_s64_m128i(a), (imm)) + +// Inserts the least significant 64 bits of b into the selected 64-bit integer +// of a. +// FORCE_INLINE __m128i _mm_insert_epi64(__m128i a, __int64 b, +// __constrange(0,2) int imm) +#define _mm_insert_epi64(a, b, imm) \ + __extension__({ \ + vreinterpretq_m128i_s64( \ + vsetq_lane_s64((b), vreinterpretq_s64_m128i(a), (imm))); \ + }) + +// Count the number of bits set to 1 in unsigned 32-bit integer a, and +// return that count in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_popcnt_u32 +FORCE_INLINE int _mm_popcnt_u32(unsigned int a) +{ +#if defined(__aarch64__) +#if __has_builtin(__builtin_popcount) + return __builtin_popcount(a); +#else + return (int) vaddlv_u8(vcnt_u8(vcreate_u8((uint64_t) a))); +#endif +#else + uint32_t count = 0; + uint8x8_t input_val, count8x8_val; + uint16x4_t count16x4_val; + uint32x2_t count32x2_val; + + input_val = vld1_u8((uint8_t *) &a); + count8x8_val = vcnt_u8(input_val); + count16x4_val = vpaddl_u8(count8x8_val); + count32x2_val = vpaddl_u16(count16x4_val); + + vst1_u32(&count, count32x2_val); + return count; +#endif +} + +// Count the number of bits set to 1 in unsigned 64-bit integer a, and +// return that count in dst. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_popcnt_u64 +FORCE_INLINE int64_t _mm_popcnt_u64(uint64_t a) +{ +#if defined(__aarch64__) +#if __has_builtin(__builtin_popcountll) + return __builtin_popcountll(a); +#else + return (int64_t) vaddlv_u8(vcnt_u8(vcreate_u8(a))); +#endif +#else + uint64_t count = 0; + uint8x8_t input_val, count8x8_val; + uint16x4_t count16x4_val; + uint32x2_t count32x2_val; + uint64x1_t count64x1_val; + + input_val = vld1_u8((uint8_t *) &a); + count8x8_val = vcnt_u8(input_val); + count16x4_val = vpaddl_u8(count8x8_val); + count32x2_val = vpaddl_u16(count16x4_val); + count64x1_val = vpaddl_u32(count32x2_val); + vst1_u64(&count, count64x1_val); + return count; +#endif +} + +// Macro: Transpose the 4x4 matrix formed by the 4 rows of single-precision +// (32-bit) floating-point elements in row0, row1, row2, and row3, and store the +// transposed matrix in these vectors (row0 now contains column 0, etc.). +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=MM_TRANSPOSE4_PS +#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ + do { \ + float32x4x2_t ROW01 = vtrnq_f32(row0, row1); \ + float32x4x2_t ROW23 = vtrnq_f32(row2, row3); \ + row0 = vcombine_f32(vget_low_f32(ROW01.val[0]), \ + vget_low_f32(ROW23.val[0])); \ + row1 = vcombine_f32(vget_low_f32(ROW01.val[1]), \ + vget_low_f32(ROW23.val[1])); \ + row2 = vcombine_f32(vget_high_f32(ROW01.val[0]), \ + vget_high_f32(ROW23.val[0])); \ + row3 = vcombine_f32(vget_high_f32(ROW01.val[1]), \ + vget_high_f32(ROW23.val[1])); \ + } while (0) + +/* Crypto Extensions */ + +#if defined(__ARM_FEATURE_CRYPTO) +// Wraps vmull_p64 +FORCE_INLINE uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) +{ + poly64_t a = vget_lane_p64(vreinterpret_p64_u64(_a), 0); + poly64_t b = vget_lane_p64(vreinterpret_p64_u64(_b), 0); + return vreinterpretq_u64_p128(vmull_p64(a, b)); +} +#else // ARMv7 polyfill +// ARMv7/some A64 lacks vmull_p64, but it has vmull_p8. +// +// vmull_p8 calculates 8 8-bit->16-bit polynomial multiplies, but we need a +// 64-bit->128-bit polynomial multiply. +// +// It needs some work and is somewhat slow, but it is still faster than all +// known scalar methods. +// +// Algorithm adapted to C from +// https://www.workofard.com/2017/07/ghash-for-low-end-cores/, which is adapted +// from "Fast Software Polynomial Multiplication on ARM Processors Using the +// NEON Engine" by Danilo Camara, Conrado Gouvea, Julio Lopez and Ricardo Dahab +// (https://hal.inria.fr/hal-01506572) +static uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) +{ + poly8x8_t a = vreinterpret_p8_u64(_a); + poly8x8_t b = vreinterpret_p8_u64(_b); + + // Masks + uint8x16_t k48_32 = vcombine_u8(vcreate_u8(0x0000ffffffffffff), + vcreate_u8(0x00000000ffffffff)); + uint8x16_t k16_00 = vcombine_u8(vcreate_u8(0x000000000000ffff), + vcreate_u8(0x0000000000000000)); + + // Do the multiplies, rotating with vext to get all combinations + uint8x16_t d = vreinterpretq_u8_p16(vmull_p8(a, b)); // D = A0 * B0 + uint8x16_t e = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 1))); // E = A0 * B1 + uint8x16_t f = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 1), b)); // F = A1 * B0 + uint8x16_t g = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 2))); // G = A0 * B2 + uint8x16_t h = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 2), b)); // H = A2 * B0 + uint8x16_t i = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 3))); // I = A0 * B3 + uint8x16_t j = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 3), b)); // J = A3 * B0 + uint8x16_t k = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 4))); // L = A0 * B4 + + // Add cross products + uint8x16_t l = veorq_u8(e, f); // L = E + F + uint8x16_t m = veorq_u8(g, h); // M = G + H + uint8x16_t n = veorq_u8(i, j); // N = I + J + + // Interleave. Using vzip1 and vzip2 prevents Clang from emitting TBL + // instructions. +#if defined(__aarch64__) + uint8x16_t lm_p0 = vreinterpretq_u8_u64( + vzip1q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); + uint8x16_t lm_p1 = vreinterpretq_u8_u64( + vzip2q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); + uint8x16_t nk_p0 = vreinterpretq_u8_u64( + vzip1q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); + uint8x16_t nk_p1 = vreinterpretq_u8_u64( + vzip2q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); +#else + uint8x16_t lm_p0 = vcombine_u8(vget_low_u8(l), vget_low_u8(m)); + uint8x16_t lm_p1 = vcombine_u8(vget_high_u8(l), vget_high_u8(m)); + uint8x16_t nk_p0 = vcombine_u8(vget_low_u8(n), vget_low_u8(k)); + uint8x16_t nk_p1 = vcombine_u8(vget_high_u8(n), vget_high_u8(k)); +#endif + // t0 = (L) (P0 + P1) << 8 + // t1 = (M) (P2 + P3) << 16 + uint8x16_t t0t1_tmp = veorq_u8(lm_p0, lm_p1); + uint8x16_t t0t1_h = vandq_u8(lm_p1, k48_32); + uint8x16_t t0t1_l = veorq_u8(t0t1_tmp, t0t1_h); + + // t2 = (N) (P4 + P5) << 24 + // t3 = (K) (P6 + P7) << 32 + uint8x16_t t2t3_tmp = veorq_u8(nk_p0, nk_p1); + uint8x16_t t2t3_h = vandq_u8(nk_p1, k16_00); + uint8x16_t t2t3_l = veorq_u8(t2t3_tmp, t2t3_h); + + // De-interleave +#if defined(__aarch64__) + uint8x16_t t0 = vreinterpretq_u8_u64( + vuzp1q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); + uint8x16_t t1 = vreinterpretq_u8_u64( + vuzp2q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); + uint8x16_t t2 = vreinterpretq_u8_u64( + vuzp1q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); + uint8x16_t t3 = vreinterpretq_u8_u64( + vuzp2q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); +#else + uint8x16_t t1 = vcombine_u8(vget_high_u8(t0t1_l), vget_high_u8(t0t1_h)); + uint8x16_t t0 = vcombine_u8(vget_low_u8(t0t1_l), vget_low_u8(t0t1_h)); + uint8x16_t t3 = vcombine_u8(vget_high_u8(t2t3_l), vget_high_u8(t2t3_h)); + uint8x16_t t2 = vcombine_u8(vget_low_u8(t2t3_l), vget_low_u8(t2t3_h)); +#endif + // Shift the cross products + uint8x16_t t0_shift = vextq_u8(t0, t0, 15); // t0 << 8 + uint8x16_t t1_shift = vextq_u8(t1, t1, 14); // t1 << 16 + uint8x16_t t2_shift = vextq_u8(t2, t2, 13); // t2 << 24 + uint8x16_t t3_shift = vextq_u8(t3, t3, 12); // t3 << 32 + + // Accumulate the products + uint8x16_t cross1 = veorq_u8(t0_shift, t1_shift); + uint8x16_t cross2 = veorq_u8(t2_shift, t3_shift); + uint8x16_t mix = veorq_u8(d, cross1); + uint8x16_t r = veorq_u8(mix, cross2); + return vreinterpretq_u64_u8(r); +} +#endif // ARMv7 polyfill + +FORCE_INLINE __m128i _mm_clmulepi64_si128(__m128i _a, __m128i _b, const int imm) +{ + uint64x2_t a = vreinterpretq_u64_m128i(_a); + uint64x2_t b = vreinterpretq_u64_m128i(_b); + switch (imm & 0x11) { + case 0x00: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_low_u64(a), vget_low_u64(b))); + case 0x01: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_high_u64(a), vget_low_u64(b))); + case 0x10: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_low_u64(a), vget_high_u64(b))); + case 0x11: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_high_u64(a), vget_high_u64(b))); + default: + abort(); + } +} + +#if !defined(__ARM_FEATURE_CRYPTO) +/* clang-format off */ +#define SSE2NEON_AES_DATA(w) \ + { \ + w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), \ + w(0xc5), w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), \ + w(0xab), w(0x76), w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), \ + w(0x59), w(0x47), w(0xf0), w(0xad), w(0xd4), w(0xa2), w(0xaf), \ + w(0x9c), w(0xa4), w(0x72), w(0xc0), w(0xb7), w(0xfd), w(0x93), \ + w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc), w(0x34), w(0xa5), \ + w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15), w(0x04), \ + w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a), \ + w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), \ + w(0x75), w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), \ + w(0x5a), w(0xa0), w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), \ + w(0xe3), w(0x2f), w(0x84), w(0x53), w(0xd1), w(0x00), w(0xed), \ + w(0x20), w(0xfc), w(0xb1), w(0x5b), w(0x6a), w(0xcb), w(0xbe), \ + w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf), w(0xd0), w(0xef), \ + w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85), w(0x45), \ + w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8), \ + w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), \ + w(0xf5), w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), \ + w(0xf3), w(0xd2), w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), \ + w(0x97), w(0x44), w(0x17), w(0xc4), w(0xa7), w(0x7e), w(0x3d), \ + w(0x64), w(0x5d), w(0x19), w(0x73), w(0x60), w(0x81), w(0x4f), \ + w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88), w(0x46), w(0xee), \ + w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb), w(0xe0), \ + w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c), \ + w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), \ + w(0x79), w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), \ + w(0x4e), w(0xa9), w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), \ + w(0x7a), w(0xae), w(0x08), w(0xba), w(0x78), w(0x25), w(0x2e), \ + w(0x1c), w(0xa6), w(0xb4), w(0xc6), w(0xe8), w(0xdd), w(0x74), \ + w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a), w(0x70), w(0x3e), \ + w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e), w(0x61), \ + w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e), \ + w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), \ + w(0x94), w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), \ + w(0x28), w(0xdf), w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), \ + w(0xe6), w(0x42), w(0x68), w(0x41), w(0x99), w(0x2d), w(0x0f), \ + w(0xb0), w(0x54), w(0xbb), w(0x16) \ + } +/* clang-format on */ + +/* X Macro trick. See https://en.wikipedia.org/wiki/X_Macro */ +#define SSE2NEON_AES_H0(x) (x) +static const uint8_t SSE2NEON_sbox[256] = SSE2NEON_AES_DATA(SSE2NEON_AES_H0); +#undef SSE2NEON_AES_H0 + +// In the absence of crypto extensions, implement aesenc using regular neon +// intrinsics instead. See: +// https://www.workofard.com/2017/01/accelerated-aes-for-the-arm64-linux-kernel/ +// https://www.workofard.com/2017/07/ghash-for-low-end-cores/ and +// https://github.com/ColinIanKing/linux-next-mirror/blob/b5f466091e130caaf0735976648f72bd5e09aa84/crypto/aegis128-neon-inner.c#L52 +// for more information Reproduced with permission of the author. +FORCE_INLINE __m128i _mm_aesenc_si128(__m128i EncBlock, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t shift_rows[] = {0x0, 0x5, 0xa, 0xf, 0x4, 0x9, + 0xe, 0x3, 0x8, 0xd, 0x2, 0x7, + 0xc, 0x1, 0x6, 0xb}; + static const uint8_t ror32by8[] = {0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, + 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc}; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(EncBlock); + + // shift rows + w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); + + // sub bytes + v = vqtbl4q_u8(vld1q_u8_x4(SSE2NEON_sbox), w); + v = vqtbx4q_u8(v, vld1q_u8_x4(SSE2NEON_sbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, vld1q_u8_x4(SSE2NEON_sbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, vld1q_u8_x4(SSE2NEON_sbox + 0xc0), w - 0xc0); + + // mix columns + w = (v << 1) ^ (uint8x16_t)(((int8x16_t) v >> 7) & 0x1b); + w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); + w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); + + // add round key + return vreinterpretq_m128i_u8(w) ^ RoundKey; + +#else /* ARMv7-A NEON implementation */ +#define SSE2NEON_AES_B2W(b0, b1, b2, b3) \ + (((uint32_t)(b3) << 24) | ((uint32_t)(b2) << 16) | ((uint32_t)(b1) << 8) | \ + (b0)) +#define SSE2NEON_AES_F2(x) ((x << 1) ^ (((x >> 7) & 1) * 0x011b /* WPOLY */)) +#define SSE2NEON_AES_F3(x) (SSE2NEON_AES_F2(x) ^ x) +#define SSE2NEON_AES_U0(p) \ + SSE2NEON_AES_B2W(SSE2NEON_AES_F2(p), p, p, SSE2NEON_AES_F3(p)) +#define SSE2NEON_AES_U1(p) \ + SSE2NEON_AES_B2W(SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p, p) +#define SSE2NEON_AES_U2(p) \ + SSE2NEON_AES_B2W(p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p) +#define SSE2NEON_AES_U3(p) \ + SSE2NEON_AES_B2W(p, p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p)) + static const uint32_t ALIGN_STRUCT(16) aes_table[4][256] = { + SSE2NEON_AES_DATA(SSE2NEON_AES_U0), + SSE2NEON_AES_DATA(SSE2NEON_AES_U1), + SSE2NEON_AES_DATA(SSE2NEON_AES_U2), + SSE2NEON_AES_DATA(SSE2NEON_AES_U3), + }; +#undef SSE2NEON_AES_B2W +#undef SSE2NEON_AES_F2 +#undef SSE2NEON_AES_F3 +#undef SSE2NEON_AES_U0 +#undef SSE2NEON_AES_U1 +#undef SSE2NEON_AES_U2 +#undef SSE2NEON_AES_U3 + + uint32_t x0 = _mm_cvtsi128_si32(EncBlock); + uint32_t x1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(EncBlock, 0x55)); + uint32_t x2 = _mm_cvtsi128_si32(_mm_shuffle_epi32(EncBlock, 0xAA)); + uint32_t x3 = _mm_cvtsi128_si32(_mm_shuffle_epi32(EncBlock, 0xFF)); + + __m128i out = _mm_set_epi32( + (aes_table[0][x3 & 0xff] ^ aes_table[1][(x0 >> 8) & 0xff] ^ + aes_table[2][(x1 >> 16) & 0xff] ^ aes_table[3][x2 >> 24]), + (aes_table[0][x2 & 0xff] ^ aes_table[1][(x3 >> 8) & 0xff] ^ + aes_table[2][(x0 >> 16) & 0xff] ^ aes_table[3][x1 >> 24]), + (aes_table[0][x1 & 0xff] ^ aes_table[1][(x2 >> 8) & 0xff] ^ + aes_table[2][(x3 >> 16) & 0xff] ^ aes_table[3][x0 >> 24]), + (aes_table[0][x0 & 0xff] ^ aes_table[1][(x1 >> 8) & 0xff] ^ + aes_table[2][(x2 >> 16) & 0xff] ^ aes_table[3][x3 >> 24])); + + return _mm_xor_si128(out, RoundKey); +#endif +} + +FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) +{ + /* FIXME: optimized for NEON */ + uint8_t v[4][4] = { + [0] = {SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 0)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 5)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 10)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 15)]}, + [1] = {SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 4)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 9)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 14)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 3)]}, + [2] = {SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 8)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 13)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 2)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 7)]}, + [3] = {SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 12)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 1)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 6)], + SSE2NEON_sbox[vreinterpretq_nth_u8_m128i(a, 11)]}, + }; + for (int i = 0; i < 16; i++) + vreinterpretq_nth_u8_m128i(a, i) = + v[i / 4][i % 4] ^ vreinterpretq_nth_u8_m128i(RoundKey, i); + return a; +} + +// Emits the Advanced Encryption Standard (AES) instruction aeskeygenassist. +// This instruction generates a round key for AES encryption. See +// https://kazakov.life/2017/11/01/cryptocurrency-mining-on-ios-devices/ +// for details. +// +// https://msdn.microsoft.com/en-us/library/cc714138(v=vs.120).aspx +FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i key, const int rcon) +{ + uint32_t X1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(key, 0x55)); + uint32_t X3 = _mm_cvtsi128_si32(_mm_shuffle_epi32(key, 0xFF)); + for (int i = 0; i < 4; ++i) { + ((uint8_t *) &X1)[i] = SSE2NEON_sbox[((uint8_t *) &X1)[i]]; + ((uint8_t *) &X3)[i] = SSE2NEON_sbox[((uint8_t *) &X3)[i]]; + } + return _mm_set_epi32(((X3 >> 8) | (X3 << 24)) ^ rcon, X3, + ((X1 >> 8) | (X1 << 24)) ^ rcon, X1); +} +#undef SSE2NEON_AES_DATA + +#else /* __ARM_FEATURE_CRYPTO */ +// Implements equivalent of 'aesenc' by combining AESE (with an empty key) and +// AESMC and then manually applying the real key as an xor operation. This +// unfortunately means an additional xor op; the compiler should be able to +// optimize this away for repeated calls however. See +// https://blog.michaelbrase.com/2018/05/08/emulating-x86-aes-intrinsics-on-armv8-a +// for more details. +FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vaesmcq_u8(vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))) ^ + vreinterpretq_u8_m128i(b)); +} + +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesenclast_si128 +FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) +{ + return _mm_xor_si128(vreinterpretq_m128i_u8(vaeseq_u8( + vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), + RoundKey); +} + +FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) +{ + // AESE does ShiftRows and SubBytes on A + uint8x16_t u8 = vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)); + + uint8x16_t dest = { + // Undo ShiftRows step from AESE and extract X1 and X3 + u8[0x4], u8[0x1], u8[0xE], u8[0xB], // SubBytes(X1) + u8[0x1], u8[0xE], u8[0xB], u8[0x4], // ROT(SubBytes(X1)) + u8[0xC], u8[0x9], u8[0x6], u8[0x3], // SubBytes(X3) + u8[0x9], u8[0x6], u8[0x3], u8[0xC], // ROT(SubBytes(X3)) + }; + uint32x4_t r = {0, (unsigned) rcon, 0, (unsigned) rcon}; + return vreinterpretq_m128i_u8(dest) ^ vreinterpretq_m128i_u32(r); +} +#endif + +/* Streaming Extensions */ + +// Guarantees that every preceding store is globally visible before any +// subsequent store. +// https://msdn.microsoft.com/en-us/library/5h2w73d1%28v=vs.90%29.aspx +FORCE_INLINE void _mm_sfence(void) +{ + __sync_synchronize(); +} + +// Store 128-bits (composed of 4 packed single-precision (32-bit) floating- +// point elements) from a into memory using a non-temporal memory hint. +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_stream_ps +FORCE_INLINE void _mm_stream_ps(float *p, __m128 a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, (float32x4_t *) p); +#else + vst1q_f32(p, vreinterpretq_f32_m128(a)); +#endif +} + +// Stores the data in a to the address p without polluting the caches. If the +// cache line containing address p is already in the cache, the cache will be +// updated. +// https://msdn.microsoft.com/en-us/library/ba08y07y%28v=vs.90%29.aspx +FORCE_INLINE void _mm_stream_si128(__m128i *p, __m128i a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, p); +#else + vst1q_s64((int64_t *) p, vreinterpretq_s64_m128i(a)); +#endif +} + +// Load 128-bits of integer data from memory into dst using a non-temporal +// memory hint. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// +// dst[127:0] := MEM[mem_addr+127:mem_addr] +// +// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_stream_load_si128 +FORCE_INLINE __m128i _mm_stream_load_si128(__m128i *p) +{ +#if __has_builtin(__builtin_nontemporal_store) + return __builtin_nontemporal_load(p); +#else + return vreinterpretq_m128i_s64(vld1q_s64((int64_t *) p)); +#endif +} + +// Cache line containing p is flushed and invalidated from all caches in the +// coherency domain. : +// https://msdn.microsoft.com/en-us/library/ba08y07y(v=vs.100).aspx +FORCE_INLINE void _mm_clflush(void const *p) +{ + (void) p; + // no corollary for Neon? +} + +// Allocate aligned blocks of memory. +// https://software.intel.com/en-us/ +// cpp-compiler-developer-guide-and-reference-allocating-and-freeing-aligned-memory-blocks +FORCE_INLINE void *_mm_malloc(size_t size, size_t align) +{ + void *ptr; + if (align == 1) + return malloc(size); + if (align == 2 || (sizeof(void *) == 8 && align == 4)) + align = sizeof(void *); + if (!posix_memalign(&ptr, align, size)) + return ptr; + return NULL; +} + +FORCE_INLINE void _mm_free(void *addr) +{ + free(addr); +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 8-bit integer v. +// https://msdn.microsoft.com/en-us/library/bb514036(v=vs.100) +FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t crc, uint8_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cb %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#else + crc ^= v; + for (int bit = 0; bit < 8; bit++) { + if (crc & 1) + crc = (crc >> 1) ^ UINT32_C(0x82f63b78); + else + crc = (crc >> 1); + } +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 16-bit integer v. +// https://msdn.microsoft.com/en-us/library/bb531411(v=vs.100) +FORCE_INLINE uint32_t _mm_crc32_u16(uint32_t crc, uint16_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32ch %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#else + crc = _mm_crc32_u8(crc, v & 0xff); + crc = _mm_crc32_u8(crc, (v >> 8) & 0xff); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 32-bit integer v. +// https://msdn.microsoft.com/en-us/library/bb531394(v=vs.100) +FORCE_INLINE uint32_t _mm_crc32_u32(uint32_t crc, uint32_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cw %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#else + crc = _mm_crc32_u16(crc, v & 0xffff); + crc = _mm_crc32_u16(crc, (v >> 16) & 0xffff); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 64-bit integer v. +// https://msdn.microsoft.com/en-us/library/bb514033(v=vs.100) +FORCE_INLINE uint64_t _mm_crc32_u64(uint64_t crc, uint64_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cx %w[c], %w[c], %x[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#else + crc = _mm_crc32_u32((uint32_t)(crc), v & 0xffffffff); + crc = _mm_crc32_u32((uint32_t)(crc), (v >> 32) & 0xffffffff); +#endif + return crc; +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma pop_macro("ALIGN_STRUCT") +#pragma pop_macro("FORCE_INLINE") +#endif + +#if defined(__GNUC__) +#pragma GCC pop_options +#endif + +#endif diff --git a/.venv/Include/site/python3.11/pygame/mask.h b/.venv/Include/site/python3.11/pygame/mask.h new file mode 100644 index 0000000..45ad8c5 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/mask.h @@ -0,0 +1,7 @@ +#ifndef PGMASK_INTERNAL_H +#define PGMASK_INTERNAL_H + +#include "include/pygame_mask.h" +#define PYGAMEAPI_MASK_NUMSLOTS 1 + +#endif /* ~PGMASK_INTERNAL_H */ diff --git a/.venv/Include/site/python3.11/pygame/mixer.h b/.venv/Include/site/python3.11/pygame/mixer.h new file mode 100644 index 0000000..97f5a0f --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/mixer.h @@ -0,0 +1,14 @@ +#ifndef MIXER_INTERNAL_H +#define MIXER_INTERNAL_H + +#include + +/* test mixer initializations */ +#define MIXER_INIT_CHECK() \ + if (!SDL_WasInit(SDL_INIT_AUDIO)) \ + return RAISE(pgExc_SDLError, "mixer not initialized") + +#define PYGAMEAPI_MIXER_NUMSLOTS 5 +#include "include/pygame_mixer.h" + +#endif /* ~MIXER_INTERNAL_H */ diff --git a/.venv/Include/site/python3.11/pygame/palette.h b/.venv/Include/site/python3.11/pygame/palette.h new file mode 100644 index 0000000..1ae4cf6 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/palette.h @@ -0,0 +1,123 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef PALETTE_H +#define PALETTE_H + +#include + +/* SDL 2 does not assign a default palette color scheme to a new 8 bit + * surface. Instead, the palette is set all white. This defines the SDL 1.2 + * default palette. + */ +static const SDL_Color default_palette_colors[] = { + {0, 0, 0, 255}, {0, 0, 85, 255}, {0, 0, 170, 255}, + {0, 0, 255, 255}, {0, 36, 0, 255}, {0, 36, 85, 255}, + {0, 36, 170, 255}, {0, 36, 255, 255}, {0, 73, 0, 255}, + {0, 73, 85, 255}, {0, 73, 170, 255}, {0, 73, 255, 255}, + {0, 109, 0, 255}, {0, 109, 85, 255}, {0, 109, 170, 255}, + {0, 109, 255, 255}, {0, 146, 0, 255}, {0, 146, 85, 255}, + {0, 146, 170, 255}, {0, 146, 255, 255}, {0, 182, 0, 255}, + {0, 182, 85, 255}, {0, 182, 170, 255}, {0, 182, 255, 255}, + {0, 219, 0, 255}, {0, 219, 85, 255}, {0, 219, 170, 255}, + {0, 219, 255, 255}, {0, 255, 0, 255}, {0, 255, 85, 255}, + {0, 255, 170, 255}, {0, 255, 255, 255}, {85, 0, 0, 255}, + {85, 0, 85, 255}, {85, 0, 170, 255}, {85, 0, 255, 255}, + {85, 36, 0, 255}, {85, 36, 85, 255}, {85, 36, 170, 255}, + {85, 36, 255, 255}, {85, 73, 0, 255}, {85, 73, 85, 255}, + {85, 73, 170, 255}, {85, 73, 255, 255}, {85, 109, 0, 255}, + {85, 109, 85, 255}, {85, 109, 170, 255}, {85, 109, 255, 255}, + {85, 146, 0, 255}, {85, 146, 85, 255}, {85, 146, 170, 255}, + {85, 146, 255, 255}, {85, 182, 0, 255}, {85, 182, 85, 255}, + {85, 182, 170, 255}, {85, 182, 255, 255}, {85, 219, 0, 255}, + {85, 219, 85, 255}, {85, 219, 170, 255}, {85, 219, 255, 255}, + {85, 255, 0, 255}, {85, 255, 85, 255}, {85, 255, 170, 255}, + {85, 255, 255, 255}, {170, 0, 0, 255}, {170, 0, 85, 255}, + {170, 0, 170, 255}, {170, 0, 255, 255}, {170, 36, 0, 255}, + {170, 36, 85, 255}, {170, 36, 170, 255}, {170, 36, 255, 255}, + {170, 73, 0, 255}, {170, 73, 85, 255}, {170, 73, 170, 255}, + {170, 73, 255, 255}, {170, 109, 0, 255}, {170, 109, 85, 255}, + {170, 109, 170, 255}, {170, 109, 255, 255}, {170, 146, 0, 255}, + {170, 146, 85, 255}, {170, 146, 170, 255}, {170, 146, 255, 255}, + {170, 182, 0, 255}, {170, 182, 85, 255}, {170, 182, 170, 255}, + {170, 182, 255, 255}, {170, 219, 0, 255}, {170, 219, 85, 255}, + {170, 219, 170, 255}, {170, 219, 255, 255}, {170, 255, 0, 255}, + {170, 255, 85, 255}, {170, 255, 170, 255}, {170, 255, 255, 255}, + {255, 0, 0, 255}, {255, 0, 85, 255}, {255, 0, 170, 255}, + {255, 0, 255, 255}, {255, 36, 0, 255}, {255, 36, 85, 255}, + {255, 36, 170, 255}, {255, 36, 255, 255}, {255, 73, 0, 255}, + {255, 73, 85, 255}, {255, 73, 170, 255}, {255, 73, 255, 255}, + {255, 109, 0, 255}, {255, 109, 85, 255}, {255, 109, 170, 255}, + {255, 109, 255, 255}, {255, 146, 0, 255}, {255, 146, 85, 255}, + {255, 146, 170, 255}, {255, 146, 255, 255}, {255, 182, 0, 255}, + {255, 182, 85, 255}, {255, 182, 170, 255}, {255, 182, 255, 255}, + {255, 219, 0, 255}, {255, 219, 85, 255}, {255, 219, 170, 255}, + {255, 219, 255, 255}, {255, 255, 0, 255}, {255, 255, 85, 255}, + {255, 255, 170, 255}, {255, 255, 255, 255}, {0, 0, 0, 255}, + {0, 0, 85, 255}, {0, 0, 170, 255}, {0, 0, 255, 255}, + {0, 36, 0, 255}, {0, 36, 85, 255}, {0, 36, 170, 255}, + {0, 36, 255, 255}, {0, 73, 0, 255}, {0, 73, 85, 255}, + {0, 73, 170, 255}, {0, 73, 255, 255}, {0, 109, 0, 255}, + {0, 109, 85, 255}, {0, 109, 170, 255}, {0, 109, 255, 255}, + {0, 146, 0, 255}, {0, 146, 85, 255}, {0, 146, 170, 255}, + {0, 146, 255, 255}, {0, 182, 0, 255}, {0, 182, 85, 255}, + {0, 182, 170, 255}, {0, 182, 255, 255}, {0, 219, 0, 255}, + {0, 219, 85, 255}, {0, 219, 170, 255}, {0, 219, 255, 255}, + {0, 255, 0, 255}, {0, 255, 85, 255}, {0, 255, 170, 255}, + {0, 255, 255, 255}, {85, 0, 0, 255}, {85, 0, 85, 255}, + {85, 0, 170, 255}, {85, 0, 255, 255}, {85, 36, 0, 255}, + {85, 36, 85, 255}, {85, 36, 170, 255}, {85, 36, 255, 255}, + {85, 73, 0, 255}, {85, 73, 85, 255}, {85, 73, 170, 255}, + {85, 73, 255, 255}, {85, 109, 0, 255}, {85, 109, 85, 255}, + {85, 109, 170, 255}, {85, 109, 255, 255}, {85, 146, 0, 255}, + {85, 146, 85, 255}, {85, 146, 170, 255}, {85, 146, 255, 255}, + {85, 182, 0, 255}, {85, 182, 85, 255}, {85, 182, 170, 255}, + {85, 182, 255, 255}, {85, 219, 0, 255}, {85, 219, 85, 255}, + {85, 219, 170, 255}, {85, 219, 255, 255}, {85, 255, 0, 255}, + {85, 255, 85, 255}, {85, 255, 170, 255}, {85, 255, 255, 255}, + {170, 0, 0, 255}, {170, 0, 85, 255}, {170, 0, 170, 255}, + {170, 0, 255, 255}, {170, 36, 0, 255}, {170, 36, 85, 255}, + {170, 36, 170, 255}, {170, 36, 255, 255}, {170, 73, 0, 255}, + {170, 73, 85, 255}, {170, 73, 170, 255}, {170, 73, 255, 255}, + {170, 109, 0, 255}, {170, 109, 85, 255}, {170, 109, 170, 255}, + {170, 109, 255, 255}, {170, 146, 0, 255}, {170, 146, 85, 255}, + {170, 146, 170, 255}, {170, 146, 255, 255}, {170, 182, 0, 255}, + {170, 182, 85, 255}, {170, 182, 170, 255}, {170, 182, 255, 255}, + {170, 219, 0, 255}, {170, 219, 85, 255}, {170, 219, 170, 255}, + {170, 219, 255, 255}, {170, 255, 0, 255}, {170, 255, 85, 255}, + {170, 255, 170, 255}, {170, 255, 255, 255}, {255, 0, 0, 255}, + {255, 0, 85, 255}, {255, 0, 170, 255}, {255, 0, 255, 255}, + {255, 36, 0, 255}, {255, 36, 85, 255}, {255, 36, 170, 255}, + {255, 36, 255, 255}, {255, 73, 0, 255}, {255, 73, 85, 255}, + {255, 73, 170, 255}, {255, 73, 255, 255}, {255, 109, 0, 255}, + {255, 109, 85, 255}, {255, 109, 170, 255}, {255, 109, 255, 255}, + {255, 146, 0, 255}, {255, 146, 85, 255}, {255, 146, 170, 255}, + {255, 146, 255, 255}, {255, 182, 0, 255}, {255, 182, 85, 255}, + {255, 182, 170, 255}, {255, 182, 255, 255}, {255, 219, 0, 255}, + {255, 219, 85, 255}, {255, 219, 170, 255}, {255, 219, 255, 255}, + {255, 255, 0, 255}, {255, 255, 85, 255}, {255, 255, 170, 255}, + {255, 255, 255, 255}}; + +static const int default_palette_size = + (int)(sizeof(default_palette_colors) / sizeof(SDL_Color)); + +#endif diff --git a/.venv/Include/site/python3.11/pygame/pgarrinter.h b/.venv/Include/site/python3.11/pygame/pgarrinter.h new file mode 100644 index 0000000..5ba096b --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/pgarrinter.h @@ -0,0 +1,26 @@ +/* array structure interface version 3 declarations */ + +#if !defined(PG_ARRAYINTER_HEADER) +#define PG_ARRAYINTER_HEADER + +static const int PAI_CONTIGUOUS = 0x01; +static const int PAI_FORTRAN = 0x02; +static const int PAI_ALIGNED = 0x100; +static const int PAI_NOTSWAPPED = 0x200; +static const int PAI_WRITEABLE = 0x400; +static const int PAI_ARR_HAS_DESCR = 0x800; + +typedef struct { + int two; /* contains the integer 2 -- simple sanity check */ + int nd; /* number of dimensions */ + char typekind; /* kind in array -- character code of typestr */ + int itemsize; /* size of each element */ + int flags; /* flags indicating how the data should be */ + /* interpreted */ + Py_intptr_t *shape; /* A length-nd array of shape information */ + Py_intptr_t *strides; /* A length-nd array of stride information */ + void *data; /* A pointer to the first element of the array */ + PyObject *descr; /* NULL or a data-description */ +} PyArrayInterface; + +#endif diff --git a/.venv/Include/site/python3.11/pygame/pgbufferproxy.h b/.venv/Include/site/python3.11/pygame/pgbufferproxy.h new file mode 100644 index 0000000..1507608 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/pgbufferproxy.h @@ -0,0 +1,7 @@ +#ifndef PG_BUFPROXY_INTERNAL_H +#define PG_BUFPROXY_INTERNAL_H + +#include "include/pygame_bufferproxy.h" +#define PYGAMEAPI_BUFPROXY_NUMSLOTS 4 + +#endif /* ~PG_BUFPROXY_INTERNAL_H */ diff --git a/.venv/Include/site/python3.11/pygame/pgcompat.h b/.venv/Include/site/python3.11/pygame/pgcompat.h new file mode 100644 index 0000000..1bc0d24 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/pgcompat.h @@ -0,0 +1,27 @@ +/* Python 2.x/3.x compatibility tools (internal) + */ +#ifndef PGCOMPAT_INTERNAL_H +#define PGCOMPAT_INTERNAL_H + +#include "include/pgcompat.h" + +/* Module init function returns new module instance. */ +#define MODINIT_DEFINE(mod_name) PyMODINIT_FUNC PyInit_##mod_name(void) + +/* Defaults for unicode file path encoding */ +#if defined(MS_WIN32) +#define UNICODE_DEF_FS_ERROR "replace" +#else +#define UNICODE_DEF_FS_ERROR "surrogateescape" +#endif + +#define RELATIVE_MODULE(m) ("." m) + +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER +#define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif + +#define Slice_GET_INDICES_EX(slice, length, start, stop, step, slicelength) \ + PySlice_GetIndicesEx(slice, length, start, stop, step, slicelength) + +#endif /* ~PGCOMPAT_INTERNAL_H */ diff --git a/.venv/Include/site/python3.11/pygame/pgopengl.h b/.venv/Include/site/python3.11/pygame/pgopengl.h new file mode 100644 index 0000000..a845cbf --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/pgopengl.h @@ -0,0 +1,20 @@ +#if !defined(PGOPENGL_H) +#define PGOPENGL_H + +/** This header includes definitions of Opengl functions as pointer types for + ** use with the SDL function SDL_GL_GetProcAddress. + **/ + +#if defined(_WIN32) +#define GL_APIENTRY __stdcall +#else +#define GL_APIENTRY +#endif + +typedef void(GL_APIENTRY *GL_glReadPixels_Func)(int, int, int, int, + unsigned int, unsigned int, + void *); + +typedef void(GL_APIENTRY *GL_glViewport_Func)(int, int, unsigned int, + unsigned int); +#endif diff --git a/.venv/Include/site/python3.11/pygame/pgplatform.h b/.venv/Include/site/python3.11/pygame/pgplatform.h new file mode 100644 index 0000000..54310eb --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/pgplatform.h @@ -0,0 +1,23 @@ +/* platform/compiler adjustments (internal) */ +#ifndef PG_PLATFORM_INTERNAL_H +#define PG_PLATFORM_INTERNAL_H + +#include "include/pgplatform.h" + +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif +#ifndef ABS +#define ABS(a) (((a) < 0) ? -(a) : (a)) +#endif + +/* warnings */ +#define PG_STRINGIZE_HELPER(x) #x +#define PG_STRINGIZE(x) PG_STRINGIZE_HELPER(x) +#define PG_WARN(desc) \ + message(__FILE__ "(" PG_STRINGIZE(__LINE__) "): WARNING: " #desc) + +#endif /* ~PG_PLATFORM_INTERNAL_H */ diff --git a/.venv/Include/site/python3.11/pygame/pygame.h b/.venv/Include/site/python3.11/pygame/pygame.h new file mode 100644 index 0000000..d7eaf73 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/pygame.h @@ -0,0 +1,32 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +/* This will use PYGAMEAPI_DEFINE_SLOTS instead + * of PYGAMEAPI_EXTERN_SLOTS for base modules. + */ +#ifndef PYGAME_INTERNAL_H +#define PYGAME_INTERNAL_H + +#define PYGAME_H +#include "_pygame.h" + +#endif /* ~PYGAME_INTERNAL_H */ diff --git a/.venv/Include/site/python3.11/pygame/scrap.h b/.venv/Include/site/python3.11/pygame/scrap.h new file mode 100644 index 0000000..5866b56 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/scrap.h @@ -0,0 +1,147 @@ +/* + pygame - Python Game Library + Copyright (C) 2006, 2007 Rene Dudfield, Marcus von Appen + + Originally put in the public domain by Sam Lantinga. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef SCRAP_H +#define SCRAP_H + +/* This is unconditionally defined in Python.h */ +#if defined(_POSIX_C_SOURCE) +#undef _POSIX_C_SOURCE +#endif + +#include + +/* Handle clipboard text and data in arbitrary formats */ + +/** + * Predefined supported pygame scrap types. + */ +#define PYGAME_SCRAP_TEXT "text/plain" +#define PYGAME_SCRAP_BMP "image/bmp" +#define PYGAME_SCRAP_PPM "image/ppm" +#define PYGAME_SCRAP_PBM "image/pbm" + +/** + * The supported scrap clipboard types. + * + * This is only relevant in a X11 environment, which supports mouse + * selections as well. For Win32 and MacOS environments the default + * clipboard is used, no matter what value is passed. + */ +typedef enum { + SCRAP_CLIPBOARD, + SCRAP_SELECTION /* only supported in X11 environments. */ +} ScrapClipType; + +/** + * Macro for initialization checks. + */ +#define PYGAME_SCRAP_INIT_CHECK() \ + if (!pygame_scrap_initialized()) \ + return (PyErr_SetString(pgExc_SDLError, "scrap system not initialized."), \ + NULL) + +/** + * \brief Checks, whether the pygame scrap module was initialized. + * + * \return 1 if the modules was initialized, 0 otherwise. + */ +extern int +pygame_scrap_initialized(void); + +/** + * \brief Initializes the pygame scrap module internals. Call this before any + * other method. + * + * \return 1 on successful initialization, 0 otherwise. + */ +extern int +pygame_scrap_init(void); + +/** + * \brief Checks, whether the pygame window lost the clipboard focus or not. + * + * \return 1 if the window lost the focus, 0 otherwise. + */ +extern int +pygame_scrap_lost(void); + +/** + * \brief Places content of a specific type into the clipboard. + * + * \note For X11 the following notes are important: The following types + * are reserved for internal usage and thus will throw an error on + * setting them: "TIMESTAMP", "TARGETS", "SDL_SELECTION". + * Setting PYGAME_SCRAP_TEXT ("text/plain") will also automatically + * set the X11 types "STRING" (XA_STRING), "TEXT" and "UTF8_STRING". + * + * For Win32 the following notes are important: Setting + * PYGAME_SCRAP_TEXT ("text/plain") will also automatically set + * the Win32 type "TEXT" (CF_TEXT). + * + * For QNX the following notes are important: Setting + * PYGAME_SCRAP_TEXT ("text/plain") will also automatically set + * the QNX type "TEXT" (Ph_CL_TEXT). + * + * \param type The type of the content. + * \param srclen The length of the content. + * \param src The NULL terminated content. + * \return 1, if the content could be successfully pasted into the clipboard, + * 0 otherwise. + */ +extern int +pygame_scrap_put(char *type, Py_ssize_t srclen, char *src); + +/** + * \brief Gets the current content from the clipboard. + * + * \note The received content does not need to be the content previously + * placed in the clipboard using pygame_put_scrap(). See the + * pygame_put_scrap() notes for more details. + * + * \param type The type of the content to receive. + * \param count The size of the returned content. + * \return The content or NULL in case of an error or if no content of the + * specified type was available. + */ +extern char * +pygame_scrap_get(char *type, size_t *count); + +/** + * \brief Gets the currently available content types from the clipboard. + * + * \return The different available content types or NULL in case of an + * error or if no content type is available. + */ +extern char ** +pygame_scrap_get_types(void); + +/** + * \brief Checks whether content for the specified scrap type is currently + * available in the clipboard. + * + * \param type The type to check for. + * \return 1, if there is content and 0 otherwise. + */ +extern int +pygame_scrap_contains(char *type); + +#endif /* SCRAP_H */ diff --git a/.venv/Include/site/python3.11/pygame/simd_blitters.h b/.venv/Include/site/python3.11/pygame/simd_blitters.h new file mode 100644 index 0000000..da0ecbb --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/simd_blitters.h @@ -0,0 +1,84 @@ +#define NO_PYGAME_C_API +#include "_surface.h" +#include "_blit_info.h" + +#if !defined(PG_ENABLE_ARM_NEON) && defined(__aarch64__) +// arm64 has neon optimisations enabled by default, even when fpu=neon is not +// passed +#define PG_ENABLE_ARM_NEON 1 +#endif + +int +pg_sse2_at_runtime_but_uncompiled(); +int +pg_neon_at_runtime_but_uncompiled(); +int +pg_avx2_at_runtime_but_uncompiled(); + +#if (defined(__SSE2__) || defined(PG_ENABLE_ARM_NEON)) +void +alphablit_alpha_sse2_argb_surf_alpha(SDL_BlitInfo *info); +void +alphablit_alpha_sse2_argb_no_surf_alpha(SDL_BlitInfo *info); +void +alphablit_alpha_sse2_argb_no_surf_alpha_opaque_dst(SDL_BlitInfo *info); +void +blit_blend_rgba_mul_sse2(SDL_BlitInfo *info); +void +blit_blend_rgb_mul_sse2(SDL_BlitInfo *info); +void +blit_blend_rgba_add_sse2(SDL_BlitInfo *info); +void +blit_blend_rgb_add_sse2(SDL_BlitInfo *info); +void +blit_blend_rgba_sub_sse2(SDL_BlitInfo *info); +void +blit_blend_rgb_sub_sse2(SDL_BlitInfo *info); +void +blit_blend_rgba_max_sse2(SDL_BlitInfo *info); +void +blit_blend_rgb_max_sse2(SDL_BlitInfo *info); +void +blit_blend_rgba_min_sse2(SDL_BlitInfo *info); +void +blit_blend_rgb_min_sse2(SDL_BlitInfo *info); +void +blit_blend_premultiplied_sse2(SDL_BlitInfo *info); +#endif /* (defined(__SSE2__) || defined(PG_ENABLE_ARM_NEON)) */ + +/* Deliberately putting these outside of the preprocessor guards as I want to + move to a system of trusting the runtime checks to head to the right + function and having a fallback function there if pygame is not compiled + with the right stuff (this is the strategy used for AVX2 right now. + Potentially I might want to shift both these into a slightly different + file as they are not exactly blits (though v. similar) - or I could rename + the SIMD trilogy of files to replace the word blit with something more + generic like surface_ops*/ + +void +premul_surf_color_by_alpha_non_simd(SDL_Surface *src, SDL_Surface *dst); +void +premul_surf_color_by_alpha_sse2(SDL_Surface *src, SDL_Surface *dst); + +int +pg_has_avx2(); +void +blit_blend_rgba_mul_avx2(SDL_BlitInfo *info); +void +blit_blend_rgb_mul_avx2(SDL_BlitInfo *info); +void +blit_blend_rgba_add_avx2(SDL_BlitInfo *info); +void +blit_blend_rgb_add_avx2(SDL_BlitInfo *info); +void +blit_blend_rgba_sub_avx2(SDL_BlitInfo *info); +void +blit_blend_rgb_sub_avx2(SDL_BlitInfo *info); +void +blit_blend_rgba_max_avx2(SDL_BlitInfo *info); +void +blit_blend_rgb_max_avx2(SDL_BlitInfo *info); +void +blit_blend_rgba_min_avx2(SDL_BlitInfo *info); +void +blit_blend_rgb_min_avx2(SDL_BlitInfo *info); diff --git a/.venv/Include/site/python3.11/pygame/surface.h b/.venv/Include/site/python3.11/pygame/surface.h new file mode 100644 index 0000000..21508c6 --- /dev/null +++ b/.venv/Include/site/python3.11/pygame/surface.h @@ -0,0 +1,361 @@ +/* + pygame - Python Game Library + Copyright (C) 2000-2001 Pete Shinners + Copyright (C) 2007 Marcus von Appen + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Pete Shinners + pete@shinners.org +*/ + +#ifndef SURFACE_H +#define SURFACE_H + +/* This is defined in SDL.h */ +#if defined(_POSIX_C_SOURCE) +#undef _POSIX_C_SOURCE +#endif + +#include +#include "pygame.h" + +/* Blend modes */ +#define PYGAME_BLEND_ADD 0x1 +#define PYGAME_BLEND_SUB 0x2 +#define PYGAME_BLEND_MULT 0x3 +#define PYGAME_BLEND_MIN 0x4 +#define PYGAME_BLEND_MAX 0x5 + +#define PYGAME_BLEND_RGB_ADD 0x1 +#define PYGAME_BLEND_RGB_SUB 0x2 +#define PYGAME_BLEND_RGB_MULT 0x3 +#define PYGAME_BLEND_RGB_MIN 0x4 +#define PYGAME_BLEND_RGB_MAX 0x5 + +#define PYGAME_BLEND_RGBA_ADD 0x6 +#define PYGAME_BLEND_RGBA_SUB 0x7 +#define PYGAME_BLEND_RGBA_MULT 0x8 +#define PYGAME_BLEND_RGBA_MIN 0x9 +#define PYGAME_BLEND_RGBA_MAX 0x10 +#define PYGAME_BLEND_PREMULTIPLIED 0x11 +#define PYGAME_BLEND_ALPHA_SDL2 0x12 + +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define GET_PIXEL_24(b) (b[0] + (b[1] << 8) + (b[2] << 16)) +#else +#define GET_PIXEL_24(b) (b[2] + (b[1] << 8) + (b[0] << 16)) +#endif + +#define GET_PIXEL(pxl, bpp, source) \ + switch (bpp) { \ + case 2: \ + pxl = *((Uint16 *)(source)); \ + break; \ + case 4: \ + pxl = *((Uint32 *)(source)); \ + break; \ + default: { \ + Uint8 *b = (Uint8 *)source; \ + pxl = GET_PIXEL_24(b); \ + } break; \ + } + +#define GET_PIXELVALS(_sR, _sG, _sB, _sA, px, fmt, ppa) \ + SDL_GetRGBA(px, fmt, &(_sR), &(_sG), &(_sB), &(_sA)); \ + if (!ppa) { \ + _sA = 255; \ + } + +#define GET_PIXELVALS_1(sr, sg, sb, sa, _src, _fmt) \ + sr = _fmt->palette->colors[*((Uint8 *)(_src))].r; \ + sg = _fmt->palette->colors[*((Uint8 *)(_src))].g; \ + sb = _fmt->palette->colors[*((Uint8 *)(_src))].b; \ + sa = 255; + +/* For 1 byte palette pixels */ +#define SET_PIXELVAL(px, fmt, _dR, _dG, _dB, _dA) \ + *(px) = (Uint8)SDL_MapRGBA(fmt, _dR, _dG, _dB, _dA) + +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SET_OFFSETS_24(or, og, ob, fmt) \ + { \ + or = (fmt->Rshift == 0 ? 0 : fmt->Rshift == 8 ? 1 : 2); \ + og = (fmt->Gshift == 0 ? 0 : fmt->Gshift == 8 ? 1 : 2); \ + ob = (fmt->Bshift == 0 ? 0 : fmt->Bshift == 8 ? 1 : 2); \ + } + +#define SET_OFFSETS_32(or, og, ob, fmt) \ + { \ + or = (fmt->Rshift == 0 ? 0 \ + : fmt->Rshift == 8 ? 1 \ + : fmt->Rshift == 16 ? 2 \ + : 3); \ + og = (fmt->Gshift == 0 ? 0 \ + : fmt->Gshift == 8 ? 1 \ + : fmt->Gshift == 16 ? 2 \ + : 3); \ + ob = (fmt->Bshift == 0 ? 0 \ + : fmt->Bshift == 8 ? 1 \ + : fmt->Bshift == 16 ? 2 \ + : 3); \ + } +#else +#define SET_OFFSETS_24(or, og, ob, fmt) \ + { \ + or = (fmt->Rshift == 0 ? 2 : fmt->Rshift == 8 ? 1 : 0); \ + og = (fmt->Gshift == 0 ? 2 : fmt->Gshift == 8 ? 1 : 0); \ + ob = (fmt->Bshift == 0 ? 2 : fmt->Bshift == 8 ? 1 : 0); \ + } + +#define SET_OFFSETS_32(or, og, ob, fmt) \ + { \ + or = (fmt->Rshift == 0 ? 3 \ + : fmt->Rshift == 8 ? 2 \ + : fmt->Rshift == 16 ? 1 \ + : 0); \ + og = (fmt->Gshift == 0 ? 3 \ + : fmt->Gshift == 8 ? 2 \ + : fmt->Gshift == 16 ? 1 \ + : 0); \ + ob = (fmt->Bshift == 0 ? 3 \ + : fmt->Bshift == 8 ? 2 \ + : fmt->Bshift == 16 ? 1 \ + : 0); \ + } +#endif + +#define CREATE_PIXEL(buf, r, g, b, a, bp, ft) \ + switch (bp) { \ + case 2: \ + *((Uint16 *)(buf)) = ((r >> ft->Rloss) << ft->Rshift) | \ + ((g >> ft->Gloss) << ft->Gshift) | \ + ((b >> ft->Bloss) << ft->Bshift) | \ + ((a >> ft->Aloss) << ft->Ashift); \ + break; \ + case 4: \ + *((Uint32 *)(buf)) = ((r >> ft->Rloss) << ft->Rshift) | \ + ((g >> ft->Gloss) << ft->Gshift) | \ + ((b >> ft->Bloss) << ft->Bshift) | \ + ((a >> ft->Aloss) << ft->Ashift); \ + break; \ + } + +/* Pretty good idea from Tom Duff :-). */ +#define LOOP_UNROLLED4(code, n, width) \ + n = (width + 3) / 4; \ + switch (width & 3) { \ + case 0: \ + do { \ + code; \ + case 3: \ + code; \ + case 2: \ + code; \ + case 1: \ + code; \ + } while (--n > 0); \ + } + +/* Used in the srcbpp == dstbpp == 1 blend functions */ +#define REPEAT_3(code) \ + code; \ + code; \ + code; + +#define REPEAT_4(code) \ + code; \ + code; \ + code; \ + code; + +#define BLEND_ADD(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + tmp = dR + sR; \ + dR = (tmp <= 255 ? tmp : 255); \ + tmp = dG + sG; \ + dG = (tmp <= 255 ? tmp : 255); \ + tmp = dB + sB; \ + dB = (tmp <= 255 ? tmp : 255); + +#define BLEND_SUB(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + tmp = dR - sR; \ + dR = (tmp >= 0 ? tmp : 0); \ + tmp = dG - sG; \ + dG = (tmp >= 0 ? tmp : 0); \ + tmp = dB - sB; \ + dB = (tmp >= 0 ? tmp : 0); + +#define BLEND_MULT(sR, sG, sB, sA, dR, dG, dB, dA) \ + dR = (dR && sR) ? ((dR * sR) + 255) >> 8 : 0; \ + dG = (dG && sG) ? ((dG * sG) + 255) >> 8 : 0; \ + dB = (dB && sB) ? ((dB * sB) + 255) >> 8 : 0; + +#define BLEND_MIN(sR, sG, sB, sA, dR, dG, dB, dA) \ + if (sR < dR) { \ + dR = sR; \ + } \ + if (sG < dG) { \ + dG = sG; \ + } \ + if (sB < dB) { \ + dB = sB; \ + } + +#define BLEND_MAX(sR, sG, sB, sA, dR, dG, dB, dA) \ + if (sR > dR) { \ + dR = sR; \ + } \ + if (sG > dG) { \ + dG = sG; \ + } \ + if (sB > dB) { \ + dB = sB; \ + } + +#define BLEND_RGBA_ADD(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + tmp = dR + sR; \ + dR = (tmp <= 255 ? tmp : 255); \ + tmp = dG + sG; \ + dG = (tmp <= 255 ? tmp : 255); \ + tmp = dB + sB; \ + dB = (tmp <= 255 ? tmp : 255); \ + tmp = dA + sA; \ + dA = (tmp <= 255 ? tmp : 255); + +#define BLEND_RGBA_SUB(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + tmp = dR - sR; \ + dR = (tmp >= 0 ? tmp : 0); \ + tmp = dG - sG; \ + dG = (tmp >= 0 ? tmp : 0); \ + tmp = dB - sB; \ + dB = (tmp >= 0 ? tmp : 0); \ + tmp = dA - sA; \ + dA = (tmp >= 0 ? tmp : 0); + +#define BLEND_RGBA_MULT(sR, sG, sB, sA, dR, dG, dB, dA) \ + dR = (dR && sR) ? ((dR * sR) + 255) >> 8 : 0; \ + dG = (dG && sG) ? ((dG * sG) + 255) >> 8 : 0; \ + dB = (dB && sB) ? ((dB * sB) + 255) >> 8 : 0; \ + dA = (dA && sA) ? ((dA * sA) + 255) >> 8 : 0; + +#define BLEND_RGBA_MIN(sR, sG, sB, sA, dR, dG, dB, dA) \ + if (sR < dR) { \ + dR = sR; \ + } \ + if (sG < dG) { \ + dG = sG; \ + } \ + if (sB < dB) { \ + dB = sB; \ + } \ + if (sA < dA) { \ + dA = sA; \ + } + +#define BLEND_RGBA_MAX(sR, sG, sB, sA, dR, dG, dB, dA) \ + if (sR > dR) { \ + dR = sR; \ + } \ + if (sG > dG) { \ + dG = sG; \ + } \ + if (sB > dB) { \ + dB = sB; \ + } \ + if (sA > dA) { \ + dA = sA; \ + } + +#if 1 +/* Choose an alpha blend equation. If the sign is preserved on a right shift + * then use a specialized, faster, equation. Otherwise a more general form, + * where all additions are done before the shift, is needed. + */ +#if (-1 >> 1) < 0 +#define ALPHA_BLEND_COMP(sC, dC, sA) ((((sC - dC) * sA + sC) >> 8) + dC) +#else +#define ALPHA_BLEND_COMP(sC, dC, sA) (((dC << 8) + (sC - dC) * sA + sC) >> 8) +#endif + +#define ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB, dA) \ + do { \ + if (dA) { \ + dR = ALPHA_BLEND_COMP(sR, dR, sA); \ + dG = ALPHA_BLEND_COMP(sG, dG, sA); \ + dB = ALPHA_BLEND_COMP(sB, dB, sA); \ + dA = sA + dA - ((sA * dA) / 255); \ + } \ + else { \ + dR = sR; \ + dG = sG; \ + dB = sB; \ + dA = sA; \ + } \ + } while (0) + +#define ALPHA_BLEND_PREMULTIPLIED_COMP(sC, dC, sA) \ + (sC + dC - ((dC + 1) * sA >> 8)) + +#define ALPHA_BLEND_PREMULTIPLIED(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \ + do { \ + dR = ALPHA_BLEND_PREMULTIPLIED_COMP(sR, dR, sA); \ + dG = ALPHA_BLEND_PREMULTIPLIED_COMP(sG, dG, sA); \ + dB = ALPHA_BLEND_PREMULTIPLIED_COMP(sB, dB, sA); \ + dA = ALPHA_BLEND_PREMULTIPLIED_COMP(sA, dA, sA); \ + } while (0) +#elif 0 + +#define ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB, dA) \ + do { \ + if (sA) { \ + if (dA && sA < 255) { \ + int dContrib = dA * (255 - sA) / 255; \ + dA = sA + dA - ((sA * dA) / 255); \ + dR = (dR * dContrib + sR * sA) / dA; \ + dG = (dG * dContrib + sG * sA) / dA; \ + dB = (dB * dContrib + sB * sA) / dA; \ + } \ + else { \ + dR = sR; \ + dG = sG; \ + dB = sB; \ + dA = sA; \ + } \ + } \ + } while (0) +#endif + +int +surface_fill_blend(SDL_Surface *surface, SDL_Rect *rect, Uint32 color, + int blendargs); + +void +surface_respect_clip_rect(SDL_Surface *surface, SDL_Rect *rect); + +int +pygame_AlphaBlit(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, + SDL_Rect *dstrect, int the_args); + +int +pygame_Blit(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, + SDL_Rect *dstrect, int the_args); + +int +premul_surf_color_by_alpha(SDL_Surface *src, SDL_Surface *dst); + +int +pg_warn_simd_at_runtime_but_uncompiled(); + +#endif /* SURFACE_H */ diff --git a/.venv/Scripts/Activate.ps1 b/.venv/Scripts/Activate.ps1 new file mode 100644 index 0000000..016b298 --- /dev/null +++ b/.venv/Scripts/Activate.ps1 @@ -0,0 +1,472 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" + +# SIG # Begin signature block +# MIIpigYJKoZIhvcNAQcCoIIpezCCKXcCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnL745ElCYk8vk +# dBtMuQhLeWJ3ZGfzKW4DHCYzAn+QB6CCDi8wggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1 +# MjM1OTU5WjB8MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQH +# EwlCZWF2ZXJ0b24xIzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9u +# MSMwIQYDVQQDExpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZI +# hvcNAQEBBQADggIPADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiS +# YgDFfwhjQy89koM7uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi +# 0GGAZUegEAeRlSXxxhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN1 +# 6yS8skFa3IHyvWdbD9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGu +# ppxcia6a7xCyKoOAGjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu35 +# 2diDY+iCMpk9ZanmSjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0 +# ZFYKeb6BLA66d2GALwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oE +# RzTzEiV6nCO1M3U1HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZ +# I7IWe7JKhHohqKuceQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16x +# ot2KVPdfyPAWd81wtZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapP +# Unwo8ygflJJ74J+BYxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3Z +# Ily+qIqDAgMBAAGjggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiI +# ZfROQjAdBgNVHQ4EFgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQD +# AgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu +# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5k +# aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZT +# SEEzODQyMDIxQ0ExLmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUF +# BwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGH +# MIGEMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYB +# BQUHMAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0 +# ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB +# /wQCMAAwDQYJKoZIhvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcW +# TiNc2rskrNLrfH1Ns0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+ +# VVzxC88pOEvz68nA82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfL +# IJQsAHBla0i7QRF2de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izW +# OXM95BSkFSKdE45Oq3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86 +# WmjRUqbrnvdyR2ydI5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+ +# W1scCpnA8YTs2d50jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM5 +# 8WEDkbeoriDk3hxU8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMf +# ZOm5cuclMnUHs2uqrRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw +# /TKqVL4Oaz3bkMSsM46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3 +# r7bjyHTxOgqxRCVa18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VH +# xaZg2unjHY3rMYIasTCCGq0CAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO +# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29k +# ZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM +# 0NHdMA0GCWCGSAFlAwQCAQUAoIHEMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE +# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBn +# AZ6P7YvTwq0fbF62o7E75R0LxsW5OtyYiFESQckLhjBYBgorBgEEAYI3AgEMMUow +# SKBGgEQAQgB1AGkAbAB0ADoAIABSAGUAbABlAGEAcwBlAF8AdgAzAC4AMQAxAC4A +# MABfADIAMAAyADIAMQAwADIANAAuADAAMTANBgkqhkiG9w0BAQEFAASCAgAu2uG5 +# zPAAKY4N8BVMzMPRSoTqq2HAcX+oqvto72DGzHLKlfAuuyf59saf7TQZQ04Ao1ni +# EvpzZ8C4Wv7yu8RyPwJQThIuFQuhMgB+Zscl+YDnAo5+GFTBpevgcG2n2ClHAPuT +# 7aXe3+5wChDpMqyusrBYws+8R6tg8rKFyRhQndxIJkIMlZhoh1qI3tRypW6e2r5l +# Uf4pPDkNBBySzjNOupTyv1/d2Y31Ise8xLrLbuMLYxtir/5A0z6GlUueoecpe9TS +# uEqz2bI+HZbGC6xK2BU4vW8s7qefVTmPFAf3JiCjZZ46qFAg9jnWCRzAA/3jOtu6 +# V345rFhCRJxPKz4M96B5mUCnMU0BB4cHJFKZfezd5phtExi1///WcnKNkpNTto+d +# etpWbJ87DibBro3ZhDPh9FpHW2jxy2IQBZo02Udbwfd7aoKhRf7MCLqZUIziPjRS +# FcA1hyOzYk4XfHK1qW3Wpflduz86UGDbURWP3XhXQNaSScJGOhVylZbiBWcjFKlD +# E/sl+bDyafUy0jLur6/Vl4H2xCgXbJlEazr04QfizW9N9x2G6sDkdbQd4k3kSEJt +# UOufbrdjDY1MRd/NlnjVGY+zslEDN9QJQuKq00SJagicDJ+vIzg6J7YjnRfDGLAi +# RJb9rXxuQyEoSTdtxQgnPNkb6vCNQz80bjHmoqGCFz4wghc6BgorBgEEAYI3AwMB +# MYIXKjCCFyYGCSqGSIb3DQEHAqCCFxcwghcTAgEDMQ8wDQYJYIZIAWUDBAIBBQAw +# eAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG/WwHATAxMA0GCWCGSAFlAwQC +# AQUABCCJnxONky4RAgM+R4O2F+soqJ9cjrZDLL3JqXN+msPWngIRAPgphjs42egI +# Fn/RXf6+TgkYDzIwMjIxMDI0MTgzMzM4WqCCEwcwggbAMIIEqKADAgECAhAMTWly +# S5T6PCpKPSkHgD1aMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBH +# NCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMjIwOTIxMDAwMDAw +# WhcNMzMxMTIxMjM1OTU5WjBGMQswCQYDVQQGEwJVUzERMA8GA1UEChMIRGlnaUNl +# cnQxJDAiBgNVBAMTG0RpZ2lDZXJ0IFRpbWVzdGFtcCAyMDIyIC0gMjCCAiIwDQYJ +# KoZIhvcNAQEBBQADggIPADCCAgoCggIBAM/spSY6xqnya7uNwQ2a26HoFIV0Mxom +# rNAcVR4eNm28klUMYfSdCXc9FZYIL2tkpP0GgxbXkZI4HDEClvtysZc6Va8z7GGK +# 6aYo25BjXL2JU+A6LYyHQq4mpOS7eHi5ehbhVsbAumRTuyoW51BIu4hpDIjG8b7g +# L307scpTjUCDHufLckkoHkyAHoVW54Xt8mG8qjoHffarbuVm3eJc9S/tjdRNlYRo +# 44DLannR0hCRRinrPibytIzNTLlmyLuqUDgN5YyUXRlav/V7QG5vFqianJVHhoV5 +# PgxeZowaCiS+nKrSnLb3T254xCg/oxwPUAY3ugjZNaa1Htp4WB056PhMkRCWfk3h +# 3cKtpX74LRsf7CtGGKMZ9jn39cFPcS6JAxGiS7uYv/pP5Hs27wZE5FX/NurlfDHn +# 88JSxOYWe1p+pSVz28BqmSEtY+VZ9U0vkB8nt9KrFOU4ZodRCGv7U0M50GT6Vs/g +# 9ArmFG1keLuY/ZTDcyHzL8IuINeBrNPxB9ThvdldS24xlCmL5kGkZZTAWOXlLimQ +# prdhZPrZIGwYUWC6poEPCSVT8b876asHDmoHOWIZydaFfxPZjXnPYsXs4Xu5zGcT +# B5rBeO3GiMiwbjJ5xwtZg43G7vUsfHuOy2SJ8bHEuOdTXl9V0n0ZKVkDTvpd6kVz +# HIR+187i1Dp3AgMBAAGjggGLMIIBhzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/ +# BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAgBgNVHSAEGTAXMAgGBmeBDAEE +# AjALBglghkgBhv1sBwEwHwYDVR0jBBgwFoAUuhbZbU2FL3MpdpovdYxqII+eyG8w +# HQYDVR0OBBYEFGKK3tBh/I8xFO2XC809KpQU31KcMFoGA1UdHwRTMFEwT6BNoEuG +# SWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJTQTQw +# OTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcmwwgZAGCCsGAQUFBwEBBIGDMIGAMCQG +# CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wWAYIKwYBBQUHMAKG +# TGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFJT +# QTQwOTZTSEEyNTZUaW1lU3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQELBQADggIB +# AFWqKhrzRvN4Vzcw/HXjT9aFI/H8+ZU5myXm93KKmMN31GT8Ffs2wklRLHiIY1UJ +# RjkA/GnUypsp+6M/wMkAmxMdsJiJ3HjyzXyFzVOdr2LiYWajFCpFh0qYQitQ/Bu1 +# nggwCfrkLdcJiXn5CeaIzn0buGqim8FTYAnoo7id160fHLjsmEHw9g6A++T/350Q +# p+sAul9Kjxo6UrTqvwlJFTU2WZoPVNKyG39+XgmtdlSKdG3K0gVnK3br/5iyJpU4 +# GYhEFOUKWaJr5yI+RCHSPxzAm+18SLLYkgyRTzxmlK9dAlPrnuKe5NMfhgFknADC +# 6Vp0dQ094XmIvxwBl8kZI4DXNlpflhaxYwzGRkA7zl011Fk+Q5oYrsPJy8P7mxNf +# arXH4PMFw1nfJ2Ir3kHJU7n/NBBn9iYymHv+XEKUgZSCnawKi8ZLFUrTmJBFYDOA +# 4CPe+AOk9kVH5c64A0JH6EE2cXet/aLol3ROLtoeHYxayB6a1cLwxiKoT5u92Bya +# UcQvmvZfpyeXupYuhVfAYOd4Vn9q78KVmksRAsiCnMkaBXy6cbVOepls9Oie1FqY +# yJ+/jbsYXEP10Cro4mLueATbvdH7WwqocH7wl4R44wgDXUcsY6glOJcB0j862uXl +# 9uab3H4szP8XTE0AotjWAQ64i+7m4HJViSwnGWH2dwGMMIIGrjCCBJagAwIBAgIQ +# BzY3tyRUfNhHrP0oZipeWzANBgkqhkiG9w0BAQsFADBiMQswCQYDVQQGEwJVUzEV +# MBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29t +# MSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMjIwMzIzMDAw +# MDAwWhcNMzcwMzIyMjM1OTU5WjBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGln +# aUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5 +# NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +# MIICCgKCAgEAxoY1BkmzwT1ySVFVxyUDxPKRN6mXUaHW0oPRnkyibaCwzIP5WvYR +# oUQVQl+kiPNo+n3znIkLf50fng8zH1ATCyZzlm34V6gCff1DtITaEfFzsbPuK4CE +# iiIY3+vaPcQXf6sZKz5C3GeO6lE98NZW1OcoLevTsbV15x8GZY2UKdPZ7Gnf2ZCH +# RgB720RBidx8ald68Dd5n12sy+iEZLRS8nZH92GDGd1ftFQLIWhuNyG7QKxfst5K +# fc71ORJn7w6lY2zkpsUdzTYNXNXmG6jBZHRAp8ByxbpOH7G1WE15/tePc5OsLDni +# pUjW8LAxE6lXKZYnLvWHpo9OdhVVJnCYJn+gGkcgQ+NDY4B7dW4nJZCYOjgRs/b2 +# nuY7W+yB3iIU2YIqx5K/oN7jPqJz+ucfWmyU8lKVEStYdEAoq3NDzt9KoRxrOMUp +# 88qqlnNCaJ+2RrOdOqPVA+C/8KI8ykLcGEh/FDTP0kyr75s9/g64ZCr6dSgkQe1C +# vwWcZklSUPRR8zZJTYsg0ixXNXkrqPNFYLwjjVj33GHek/45wPmyMKVM1+mYSlg+ +# 0wOI/rOP015LdhJRk8mMDDtbiiKowSYI+RQQEgN9XyO7ZONj4KbhPvbCdLI/Hgl2 +# 7KtdRnXiYKNYCQEoAA6EVO7O6V3IXjASvUaetdN2udIOa5kM0jO0zbECAwEAAaOC +# AV0wggFZMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLoW2W1NhS9zKXaa +# L3WMaiCPnshvMB8GA1UdIwQYMBaAFOzX44LScV1kTN8uZz/nupiuHA9PMA4GA1Ud +# DwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDCDB3BggrBgEFBQcBAQRrMGkw +# JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBBBggrBgEFBQcw +# AoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJv +# b3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybDMuZGlnaWNlcnQu +# Y29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcmwwIAYDVR0gBBkwFzAIBgZngQwB +# BAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4ICAQB9WY7Ak7ZvmKlEIgF+ +# ZtbYIULhsBguEE0TzzBTzr8Y+8dQXeJLKftwig2qKWn8acHPHQfpPmDI2AvlXFvX +# bYf6hCAlNDFnzbYSlm/EUExiHQwIgqgWvalWzxVzjQEiJc6VaT9Hd/tydBTX/6tP +# iix6q4XNQ1/tYLaqT5Fmniye4Iqs5f2MvGQmh2ySvZ180HAKfO+ovHVPulr3qRCy +# Xen/KFSJ8NWKcXZl2szwcqMj+sAngkSumScbqyQeJsG33irr9p6xeZmBo1aGqwpF +# yd/EjaDnmPv7pp1yr8THwcFqcdnGE4AJxLafzYeHJLtPo0m5d2aR8XKc6UsCUqc3 +# fpNTrDsdCEkPlM05et3/JWOZJyw9P2un8WbDQc1PtkCbISFA0LcTJM3cHXg65J6t +# 5TRxktcma+Q4c6umAU+9Pzt4rUyt+8SVe+0KXzM5h0F4ejjpnOHdI/0dKNPH+ejx +# mF/7K9h+8kaddSweJywm228Vex4Ziza4k9Tm8heZWcpw8De/mADfIBZPJ/tgZxah +# ZrrdVcA6KYawmKAr7ZVBtzrVFZgxtGIJDwq9gdkT/r+k0fNX2bwE+oLeMt8EifAA +# zV3C+dAjfwAL5HYCJtnwZXZCpimHCUcr5n8apIUP/JiW9lVUKx+A+sDyDivl1vup +# L0QVSucTDh3bNzgaoSv27dZ8/DCCBY0wggR1oAMCAQICEA6bGI750C3n79tQ4ghA +# GFowDQYJKoZIhvcNAQEMBQAwZTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lD +# ZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEkMCIGA1UEAxMbRGln +# aUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4XDTIyMDgwMTAwMDAwMFoXDTMxMTEw +# OTIzNTk1OVowYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +# MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1 +# c3RlZCBSb290IEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv+aQ +# c2jeu+RdSjwwIjBpM+zCpyUuySE98orYWcLhKac9WKt2ms2uexuEDcQwH/MbpDgW +# 61bGl20dq7J58soR0uRf1gU8Ug9SH8aeFaV+vp+pVxZZVXKvaJNwwrK6dZlqczKU +# 0RBEEC7fgvMHhOZ0O21x4i0MG+4g1ckgHWMpLc7sXk7Ik/ghYZs06wXGXuxbGrzr +# yc/NrDRAX7F6Zu53yEioZldXn1RYjgwrt0+nMNlW7sp7XeOtyU9e5TXnMcvak17c +# jo+A2raRmECQecN4x7axxLVqGDgDEI3Y1DekLgV9iPWCPhCRcKtVgkEy19sEcypu +# kQF8IUzUvK4bA3VdeGbZOjFEmjNAvwjXWkmkwuapoGfdpCe8oU85tRFYF/ckXEaP +# ZPfBaYh2mHY9WV1CdoeJl2l6SPDgohIbZpp0yt5LHucOY67m1O+SkjqePdwA5EUl +# ibaaRBkrfsCUtNJhbesz2cXfSwQAzH0clcOP9yGyshG3u3/y1YxwLEFgqrFjGESV +# GnZifvaAsPvoZKYz0YkH4b235kOkGLimdwHhD5QMIR2yVCkliWzlDlJRR3S+Jqy2 +# QXXeeqxfjT/JvNNBERJb5RBQ6zHFynIWIgnffEx1P2PsIV/EIFFrb7GrhotPwtZF +# X50g/KEexcCPorF+CiaZ9eRpL5gdLfXZqbId5RsCAwEAAaOCATowggE2MA8GA1Ud +# EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOzX44LScV1kTN8uZz/nupiuHA9PMB8GA1Ud +# IwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgPMA4GA1UdDwEB/wQEAwIBhjB5Bggr +# BgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNv +# bTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lD +# ZXJ0QXNzdXJlZElEUm9vdENBLmNydDBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8v +# Y3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMBEG +# A1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQwFAAOCAQEAcKC/Q1xV5zhfoKN0 +# Gz22Ftf3v1cHvZqsoYcs7IVeqRq7IviHGmlUIu2kiHdtvRoU9BNKei8ttzjv9P+A +# ufih9/Jy3iS8UgPITtAq3votVs/59PesMHqai7Je1M/RQ0SbQyHrlnKhSLSZy51P +# pwYDE3cnRNTnf+hZqPC/Lwum6fI0POz3A8eHqNJMQBk1RmppVLC4oVaO7KTVPeix +# 3P0c2PR3WlxUjG/voVA9/HYJaISfb8rbII01YBwCA8sgsKxYoA5AY8WYIsGyWfVV +# a88nq2x2zm8jLfR+cWojayL/ErhULSd+2DrZ8LaHlv1b0VysGMNNn3O3AamfV6pe +# KOK5lDGCA3YwggNyAgEBMHcwYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lD +# ZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYg +# U0hBMjU2IFRpbWVTdGFtcGluZyBDQQIQDE1pckuU+jwqSj0pB4A9WjANBglghkgB +# ZQMEAgEFAKCB0TAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcN +# AQkFMQ8XDTIyMTAyNDE4MzMzOFowKwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQU84ci +# TYYzgpI1qZS8vY+W6f4cfHMwLwYJKoZIhvcNAQkEMSIEILoHmtH34MMtLSezOEUS +# 8z6MwtqV/PFPq/sNVq5aJnKMMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIMf04b4y +# KIkgq+ImOr4axPxP5ngcLWTQTIB1V6Ajtbb6MA0GCSqGSIb3DQEBAQUABIICAEtb +# WINxaVTjBdclvuFwJT/uHWvlOdcKzc1o+toRkFb1OA7shEdXFvjNU549TilTs8qQ +# bly8CbFcz3JzLVLrNKO7lr4GXd2iyJV5sv/XU4ED866fznOnFWtZJvxKGOdqN0W7 +# 01pw7mIJ8+2aRqpow1ppPzju7VagRQ8fKmtj9Sg5N8Ja3+AehpjwM/PYzctan/1m +# ytIK/HCw5k/MeGmPVBs/fqbN0DT4KGrJ7YMySdYZMs0U9V7Ak7PelZLgw8BkNi1Y +# Rb9i+7/t9AaBlVYMy/6+gzdsnarnlSzV8/6Est8w4Ie7sBxx3Tpsokopb+oPF/// +# 2cA3jMNToO9YfsqvgpTEkWwjWanC2cd26K8ikw0uu0klmaxNvYpP459/QU3JMyFj +# I4ReTxVXLZrQlzCDUUdLmLSeV1AugCOYOHM2RAv4r+3qxk0jBCfA8RRK+prLNjXE +# af1QEbeRRNr0418MtnBdIzxHnW8yffWfHmtDNJoyPqggkRU3Mb8Myu8QPD3ZiCPj +# F+HsKUntyCV64hr9BNLmkpbw+kUvGtC0/7sZF9Gyp/DKnnbQu8vSR+CaZQqVQxJo +# UeI7m44utNTSSZCJ9JV7bnniwqztrP/r2PTAxkUywoCzif6R863qJ/uQA0QQjq8t +# +aR822g6YVyJsLYQKbpEgshG2QwzGHun5HkvawJ8 +# SIG # End signature block diff --git a/.venv/Scripts/activate b/.venv/Scripts/activate new file mode 100644 index 0000000..a181250 --- /dev/null +++ b/.venv/Scripts/activate @@ -0,0 +1,69 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r 2> /dev/null + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="e:\Documents\Python Scripting\AI Snake\.venv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/Scripts:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1="(.venv) ${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT="(.venv) " + export VIRTUAL_ENV_PROMPT +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r 2> /dev/null +fi diff --git a/.venv/Scripts/activate.bat b/.venv/Scripts/activate.bat new file mode 100644 index 0000000..3497c26 --- /dev/null +++ b/.venv/Scripts/activate.bat @@ -0,0 +1,34 @@ +@echo off + +rem This file is UTF-8 encoded, so we need to update the current code page while executing it +for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( + set _OLD_CODEPAGE=%%a +) +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" 65001 > nul +) + +set VIRTUAL_ENV=e:\Documents\Python Scripting\AI Snake\.venv + +if not defined PROMPT set PROMPT=$P$G + +if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT% +if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME% + +set _OLD_VIRTUAL_PROMPT=%PROMPT% +set PROMPT=(.venv) %PROMPT% + +if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME% +set PYTHONHOME= + +if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% +if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH% + +set PATH=%VIRTUAL_ENV%\Scripts;%PATH% +set VIRTUAL_ENV_PROMPT=(.venv) + +:END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set _OLD_CODEPAGE= +) diff --git a/.venv/Scripts/black.exe b/.venv/Scripts/black.exe new file mode 100644 index 0000000000000000000000000000000000000000..395cf8959d47fe17c26c972f4c8bc4f5f7082bde GIT binary patch literal 108421 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 Z_>-YsFoPP#jB);a3*EKuXz-J6`9I$SJq7>( literal 0 HcmV?d00001 diff --git a/.venv/Scripts/blackd.exe b/.venv/Scripts/blackd.exe new file mode 100644 index 0000000000000000000000000000000000000000..66879d14ea98d45d61186c2b76b301790a239fde GIT binary patch literal 108422 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­SX*!4-AQ7RAdkY>B{qvZe7}Us#C-L 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%0ABoj!GaT>7i3Q{|K*a!0 z_RZ80zw~vb{o%UbRF`%;;7#ky?R80hb92}oFyzBjT|W^mPIjSiDwYAAQ9oAqiT7fw z=BPgq*W-0fawZ8pAr<36^;ER^`+F8R)1mlcr3IrBX#VA*o2tWwh8fLQ>LU&iJRJX z?39EaF{ugdrg!kRB*Y}f$Hk_aU(yZq?$EBickkQkS}eV$rc6uKzqwn@);c-h0GS#) zb{c-pc9w3(g48P|HhCI)i5(Z656;ml**|kc=7h|dnTs-)XKu{gp1D8sc;@NM(oFX(&n*6O!!f|9bsp=|Us#s2 zJZD|b#+>||?K!)1_U9bRIi7PO=X6d0sZTYtCw%xY>KU*_U-oF_Wkxl_T%;w_S5zfd#PRJy61Z2dgfYk zeRJFA2IL0k_Rrm(dpx%^*E265Z)V=Iyybc8@;2t>=k3k|Ez#6+yy_%tW>$LEqO4_E z%d^&HZOqEg+McyLYk$_EtmB$*rCBPQyz|VqWcy~f&ko4$ule{;_Jr)D?3vl=*<{Rr z(|wTqn@>s>c`K#iJrXtH`fbpOa!Ka9I@09VXhmRhX|G4Y9bVOr9x z=9ac?+FI}f>}a@$W!luZwgJ3TH$EY0O3GAAO04;mIxDqqT*{OL%b3YAV<(NXI4dN@ zOvMZ^PB&OLKF(sbCgRt-tyW85pvA}Z@MDu~wH az@K#OgBjG&XSDP8Tj;NKM}>2`=KlcIl0HWO literal 0 HcmV?d00001 diff --git a/.venv/Scripts/deactivate.bat b/.venv/Scripts/deactivate.bat new file mode 100644 index 0000000..62a39a7 --- /dev/null +++ b/.venv/Scripts/deactivate.bat @@ -0,0 +1,22 @@ +@echo off + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) +set _OLD_VIRTUAL_PROMPT= + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" + set _OLD_VIRTUAL_PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) + +set _OLD_VIRTUAL_PATH= + +set VIRTUAL_ENV= +set VIRTUAL_ENV_PROMPT= + +:END diff --git a/.venv/Scripts/f2py.exe b/.venv/Scripts/f2py.exe new file mode 100644 index 0000000000000000000000000000000000000000..eaa677485f310c5978412da69dcfbafc328a4660 GIT binary patch literal 108417 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

ew{isUS~3{j^@+5hvP3 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 literal 0 HcmV?d00001 diff --git a/.venv/Scripts/pip3.11.exe b/.venv/Scripts/pip3.11.exe new file mode 100644 index 0000000000000000000000000000000000000000..39872085b87d0adc1d5289aa0b401ebafe503845 GIT binary patch literal 108424 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
ew{isUS~3{j^@+5hvP3 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 literal 0 HcmV?d00001 diff --git a/.venv/Scripts/pip3.exe b/.venv/Scripts/pip3.exe new file mode 100644 index 0000000000000000000000000000000000000000..39872085b87d0adc1d5289aa0b401ebafe503845 GIT binary patch literal 108424 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
ew{isUS~3{j^@+5hvP3 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 literal 0 HcmV?d00001 diff --git a/.venv/Scripts/py.test.exe b/.venv/Scripts/py.test.exe new file mode 100644 index 0000000000000000000000000000000000000000..b5e46be0110aba54641b90aab3544c203a7eac61 GIT binary patch literal 108422 zcmeFadw5jU)%ZWjWXKQ_P7p@IO-Bic#!G0tBo5RJ%;*`JC{}2xf}+8Qib}(bU_}i* zNt@v~ed)#4zP;$%+PC)dzP-K@u*HN(5-vi(8(ykWyqs}B0W}HN^ZTrQW|Da6`@GNh z?;nrOIeVXdS$plZ*IsMwwRUQ*Tjz4ST&_I+w{4fJg{Suk zDk#k~{i~yk?|JX1Bd28lkG=4tDesa#KJ3?1I@I&=Dc@7ibyGgz`N6)QPkD>ydq35t zw5a^YGUb1mdHz5>zj9mcQfc#FjbLurNVL)nYxs88p%GSZYD=wU2mVCNzLw{@99Q)S$;kf8bu9yca(9kvVm9ml^vrR!I-q`G>GNZ^tcvmFj1Tw`fDZD% z5W|pvewS(+{hSy`MGklppb3cC_!< z@h|$MW%{fb(kD6pOP~L^oj#w3zJ~Vs2kG-#R!FALiJ3n2#KKaqo`{tee@!>``%TYZ zAvWDSs+)%@UX7YtqsdvvwN2d-bF206snTti-qaeKWO__hZf7u%6VXC1N9?vp8HGbt z$J5=q87r;S&34^f$e4|1{5Q7m80e=&PpmHW&kxQE&JTVy_%+?!PrubsGZjsG&H_mA zQ+};HYAVAOZ$}fiR9ee5mn&%QXlmtKAw{$wwpraLZCf`f17340_E;ehEotl68O}?z z_Fyo%={Uuj?4YI}4_CCBFIkf)7FE?&m*#BB1OGwurHJ`#$n3Cu6PQBtS>5cm-c_yd zm7$&vBt6p082K;-_NUj{k+KuI`&jBbOy5(mhdgt;_4`wte(4luajXgG4i5JF>$9DH zLuPx#d`UNVTE7`D<#$S>tLTmKF}kZpFmlFe?$sV{v-Y20jP$OX&jnkAUs(V7XVtyb zD?14U)*?`&hGB*eDs)t|y2JbRvVO)oJ=15@?4VCZW>wIq(@~Mrk@WIydI@Ul!>+o3 z=M=Kzo*MI=be*)8{ISB{9>(!J__N-a=8R&n#W%-gTYRcuDCpB^^s3~-GP@@5&-(G& zdQS_V>w;D8SV2wM8)U9HoOaik`_z>Ep^Rpe3rnjb<}(rV`tpdmg4g@>h`BF#WAKLH zqTs?sEDwi<=6_WPwY&oS9!h@ge4(br)-Q{|OY*#YAspuHyx;~|kASS3FIH@oGSl?L zvQoe8yKukD)zqprHiFKlW%;G=hwx4l;FI%8m&(#zU|j&_bW@ThNpr9D0V}xa)%aIb zI$i2CA2mPU{0nJmK0dxe)dY-`z>ln($ z;r!UXuLDDi42|Zd3Erx&m8GqlFWbIX0V<*Gn6lVNq%gD>gw}da}r}ZQB~ns?p8uy4i0%1Ti$Vt|~OUth4=+yEmPu8{3(w zUDkd@?w?`_J9HBkx&ZF8v{+9phcT@3J8VI~wN7Ez)oJS6^dhb2N;;{RTXB`K*E$64 z3rDqRtY&&*}9yq2oUcvD7K)=@bWqC1X%l0jk)W<5-WBYC(#rn4H5)gp#eHMmwlLJq=^%|*gMQ*pq4VV(QhHA4CGj<;!d8i*#Z8CaN#*>VcCnj~;kkeUa{LUoKxFCaoQ) z(Lz++&x3Lwz;=6UnhwM!MvN17>{Qmb?dwgsTmzkLB~jD#wiGz73hc0bFE|C9KA#|= zH}%FQ>c&Y5z*TJD-<$$Y*WZx>5NNe-E-TfAt1!)%Wc@I;ZuNwxDGGasDIMyUNiVvG zq;Q70PYHcLO=Xgv2698@cJrkun-^>P2}|fMHlm7xaZmE<{&cQtb`{N9zj0bRmpW^T zzQV7oTs0ENHe&mxQ6DI7qd0SU4;3o*2qRd`X1>(=ew})X5Dx zx$lyzZM^emtdsbk^u+xwdSX$lp7h*2CkHCqDohShL)V4hM9k+UQLP(GN-H7!C8gyq zex`xuPQ(!g4}S>0r+CyH+xIAMP9Z&+?BT1!*kA<}dqRn*FwJPGe}l-sw(lGYN1b8} zWQQjQN`9tdtF?#aqMN?wu4E3)qGxzOhwr*vb;kX_%&U*-=KLr0raiGc^x8|=Wqt`N z?L0luR(~BF;DS@~yKDN7|*TJkj*-B%s1{65$`jY_(C#P&^rVi0?Ro4iaFbR)Z2NLxS0 zTL;%Kt22(A8JiL`U$i!iR&zLxx^E%H=*c-=+h@sisygu-_#m4J4LQqB?~vXvP4@yQo0-^oki(PiH+=FZl}&W)S-qI zk>W;2Zl-vl6rbe4X6feZb)l-Mv2oh^5t8q5@(Y-SPoUZ;N<5Tdl!h|=x!1}5)E;}=RcAXJ8(<$^13IV==^rU>wwq$hX3V4iuA0>h< zuxK^)myr=p7a)oeZ+g4u^9(OmpFl8J@{{UJfy=DjAf8lTTD00iSF3Kb9|GdM-PQp)0<* zZkW*V-TPpIXEKDks>&FQ?qoV&Tfa*;TJyB^yJa8xcch+*-cYj6E7HdBX!5)TIXSNM z4C2L57KVd0rioelfI{ELMrb&Y}?h%mk5iSTXrmJ zwlk6qsS{}3<}Uc!G}Wr;Tek1Tym8$SrWokvCzU(FVIAWTEa1pwE zBJ6JdS@$4RFBV*~g^Eo9MAFafx2rt|uRsR%xpNVyj8!g>2u0v=>eO zS~4nHBgR%cVxB-_OwP@%JN(CpY3qHvqsbt-TUGivY2Dr$b+=`6PJSkbWF)!Jn=iZJ zMt}mOG~-m{)L*SV+yRH!c@XR%)K^BqVRh zq&wib)2#d0V3BD*|F5o2J6$vbdJGh`O-30SrMI;e*Y&m8c0Bi^cD-$Daq1haK*i4o zS^0dLE!U;Du-W5i&*6##L30bjy7q7@lQPyCc8<%{>0)|vQlrFG_D_+v^1uh+p+bhA?!)dFEqi$(hoT?=hJt20DQXmOiJ``9LY)@=HE zO1esvSjV70vmITir9t{Om5D&<%?UTa#`5Sp-x@^?6JCK@(Y_-+ye_agHcB_zSUEYe zay}#@o~N5_?G>%q2t<~g3s!Y+G*Mj=P3Zn>mA2=HCm`lzap|)*f|(31R{)36WvAyz zfea$wK&B|2YxO{n>twI{fk3f0YVK4T;XDy#cUe=*$V6#=30zz**pkdJOUUdHcyGKx z={=%tU83}-sM&@LFz=EaBy8m5*VS4ZYhB<>lI{BnIk4cD&H_E|%!spiL(( z$1W0V$;KX^P(?<}XYHqoplpQo7H>!m)d{bdPaLde+h7(tf+ZB(6MxWZnoX6&>|)(q z*DB~wjMmL&u~F-ZIbJ>BJ5ZM6ik)gUbdlBM`Quqove#M~lf*ebB4nBg}NN8q8e!? zVj>HOMJZ@LQzOdvHUSih8gCt%IxvyHLmO^Ea(*!Nd-Zuw>`f87{SkAwbrcIp6hiff zt7^x@FVoBVwDl9eTxT2$))(-5-O9W=qunp;*yvYT{VJ=~FI-x;pN&=5ArA%W0()Z} z=?f87g#Y@j2_ct@T|gzY^?R)mq?NdksZ}7gJW^{18>hCuy{s)%iDWGzC?-DRKLl?l zlnO5zQf3*!v6nJ;)xm`Sjm!6zf=o%-07p#e5?cL}gBtB`Nq!dTtt@<7#(o8m8xm*XOvN65AL(=C_D} zJM9UyYteSSwriu8{DkKl6tSk&09e8kMrjh@N|SS;@9l|6^W@_Q=i{`@$NUzI6|VF> zN{Rev95oVSa&%)ew#+uKZf{3cFg?f64ASokLt$^COgO2#BW71L>H7~o2Zg;=Z|nCM zZ=N18^ET^uY+VpF$K*teqc&2xaTF!LhIKrwGne_WBX+B_9vi@rt2GKHy|kQxSUJ18@{fEswY{>va~$3%JGyYfr29k%@bck16c zdf9Hh?|r@PC`@3R-j=#7868z@m3)O|u0`Iw|bd&(6~U$UMGD@Vncn>Lm}{NqU9US&{gYu`~lU+m1n zi1g$#vC1#v|9B;ObTzhRor!#90$^5b(Gy`buihHrRfjV>-l^6#?Dg3lZ}@PRD|I(> zVcp1Kiyr8xABHMWk$xp&hFzvUhIKbDi1339ve8Ac5ON73NDM}^^I8O?+8zk+GVA0S zG|7G=o9JQQO;-x!z=zz5c@^<{-AWi)tG`b65v40t#CwnzKA}>?+z|q4`eNlNfRXZK%L4$WHQ)8Sgo0 zwE~@9)+4fUIf8fW?9TihJ6Hgttrta)MqB{FTBqxu|CDLzEKWn{Cn*>&wx$DtvzSvC z(4Jr-g8~qe!NL-;BVhBlx}Y;!It5;VT~^q_HdZcH!a^(MA3%zpy!zmpD(NfkvF=9= z6p^lmDSFnrRVn4npverH%%I5(CT}SgTNGB)0sCY%@`7%@lG#4Gt*2;3c3;0E8(QyS zoo-l-h2)DEIh-3t!@^Gefe~>Aq|Sbf{goW=Op7FDAB-5amdpAhatG_BQh1V>p|DF2 zoM~XblmiX(kl0U_veatKBQ+uz9@Z1{N|y`0j<11Sd^JtI@w2S`$mW?%;MWLc4%=HL zi!p2d7Nf9k{=Kw;xt19k$vh+UMEX9C2D?jRP0wn3ihvj zIKqjR_QyB+t|%#l=^@PkY$HlM{<4z$Jve9n{#ZUhYv#%_q#uJnen z7S7e0{d|oCJ_u>EJ_(yUqk*m3cisoGsENRi9?F=l*A~&-*(<$4vm*-sUaFT_dJdnX zrOQM7ERMPl>SbN2|4`NV9yZ$|0jqv#7_|5qM&SK>FdA$Qn}>sahte?IEg|!hNZ-Lw z+2M47yawJ6YgZhmd7`)o7cpN%77HvCf^&@h2FBhy;L2rI>K+Cp6&?pq zlFhyiSR(126>L@rL1c*79q1?uBeI5<%2ZP3K!*8bJ8n5Vkdy&9Re{a#rI- z6fv$Y@#|&(1pg>!eIKW$IeEqD_akO!YCNey`?q5Uh$a^MgG!T#n1>V}I*O@Oh-I-5 z%k{Du%Iw6?)MXzjh?<)@`1%M|Z2fN100q^u)YBKp;(8NX!a7BpNWL}bB60|{!@3IM z&!_-j!}^5^fVs3)8n2d}7M6&L95t6HGcO7O>k8tJiY2gy{mtC0V*s z;mM4hWAvYlP0?$+)i!p-gT`AH%yAiSovz=pXFBCU*-y1#y_wmwf!PgMrEDEyp_Y+h-3$ZW$Ny$8H)g+M&odOm3D+qCuDCyTVF4s8_v zmEyLRLz)cEXCoqszT`H8*!|T3k)9}efv(zxR?xmMPtJ#z>B&Eo77PE!jE`0XJbxM^ zJEbz?Lu5g--#l!-Y#gzXP3G6p>XOps?99>9SjC=T%MY0{>#J9bVPGK(CmAlr@LDVu zdtE8Cwy$lsu#8`O8L={lK%5}c`pb6GjOmh$5gX((WMNF8jU#kU?6HQLb+0+w?hE$3nE@wxIvFA6~zB7QMVyoEeHQuBH-S!>tRw89F zyIi51ALX;4mfyl>Gbw7NUa`Y^`9s-NepV{j;n;E-$Ceyj?qimR?nQpJ7Zt@YCfL5$ zX%(74|FeDDa8Ol;N-078H81eqW|LX(_9$cc`%a*!#=7{V2=)|lNG5a40)v6g4t z01XUUv68UZ2|@vkl?ceW7{YVw!nCy? z+sAnJ?mvd`Ab`J#GpRgV_N#doE}<~&Z?VHb%c3L;ua)NW2qzfhmeh>}dH zGKiE|U&0iVSyyQ$NO;+GkhAqI3{1v-UXl6k&ogShm<+H}bDWf8ZLbv`!7=F`^V*WW z%|fH`g0dA}vmj?dt{;}&QQW)P9h)H{A4EQ&PP7V>>J53l4KOcs^mIW( zWkEdG-lC&N1l;w9;87FIEh#42)wpNXA?u;BStwK2f%x9dIa=c%`6v*^^D7Rdeo3P2 zK9dB;uN>7oyTltCA%$60W`E3W-dBpg zuqcq@x{}^i&v~(2yR)n>8M=s-@@eAy%xR>v4&Y%h*z7^|kj=+ut-*SgnXpUQ2Za%i zw_32)!m77h`9S6v$7W)#c5Gu%xh%>rSYMFAD@|Kh-5MzR0ebF=8}-^F_#pg>cMe^Q z_fFTrqJD?X&Jg+pQE^7T9S;~YZ`N{LIq@lM=%?CSV`D_iRT3c{J=yaikxU5%rHT=TI9ln9_p;9*QY6sX)@dJei;QU6QC|w1dx9PPU z-k*1jcMjN$eZXl0=c@we30H5Z#G4Zf18#{O`?4|fubhbI#LpT6?u0J@S5*J&gl|g| zx>4w6bp!F}L5Qb)5yTF=Q~b_2auNe$u2af-1--x-Y8ugJ)$~A7xqyDQUb~z9yjp?2 zS$2CCh3xpcnb+1EDhBdlycVY?TH-GQhOBi1Em;xS%mih!zz5d%5ZTK)kgI(;YVM1) z9Y?6R=*3Ee3NQqA=9m}0tBfPY>WV^F{KDkb!>u=FvBx{<@$4HF#Ty?(D_|c16@7ar z?3sMj4pkIxD3B@pYY^(UW7-_E@LkG|E4F$T>^}02mQUF3kyHzn_+N+p{xB`ffEMeA9vW5-D%{ zZltI*4Xan_uaQoJoSn85x~zjwdZGe`c|L&8DFe`!Uzz7`w0>!xulJ>+=37i-p5mR> zWl?vJ+1b|P3AuYhVyI7#LAPEYZ87i$tRpmE}@el^F1lN0erixJ1-N#3v0fp0!puf z11^VLsS9qh<=8A zl(KovC21r`^>K0LV;-uDR<&qv-K@mIx|7<^+mo|TDsK^_F=k^064`x9BFi|CeU^vI zA`v->wGlB>5s}S`2Vld*+LS4GWdW#Z9=Ld+EhF-ng5iU)X7A68`i# zO|AEyO~DJK*d*(2vK_TGJ;J(KCFF$1nt-h(v%kz8V%#2jMxD`gWt|!-@k5${77Q@!{4z;ze=7&BScC z{l96Ke7GeU{#P5P(1-)>pb!x>_limI(??L33;=E&UU`S^Xg(o6V~Xzp2+b869oyFB~+oK91m(zDG}-Ce|yro;clXhx0fm zqA!a1;w8|CgOIS{tHtHPM)Qnv&@IQrVjZ>Cz6}8;hEX6s#`+#jXAT>_&8rE)U3h@u(3Rj2wHPF8HLr_+u|u2h!@v|soMqnSEk8Zd`9UErc zRN_h>v@U-yBXM8Ej^Rk$+sR6^P!=M|4(TT&#@8NU-8`?Hjo1~wjxi#DFXslCbHj#H zR5!NB>1Vtka3nsdw|a3-Y^?Qbif>?ajCQZ}h|~?V$4;Z2hvePt!VjWV5kP_Mdzd#2 z(Ya9OE~}OG95vq%MZN6^iVy-|(zl&p4c#oK!g~#g9ul0wCtz5||XBmlcb|@y+~5^oMA2 z%2&t|Z30b#v!su;P0>oP@n%l!68gTFk*t&4-cTiC(g?CTh0XM*M_NA`XrI~P!(S-N zL`<-L&IbV?K2X3qpYwnLW)JqoQsvmwRaiiIOAWlUuFCW7CR}XuDqc-j>a`x<)1Wa~ zw1+(1-L|GuLWkn}HjH3W>Zkjq4e-!WA;hn0iSIXW`S*t~{JgUpYShtg%LoE=slzv~<=K*WA*ElMAxu<+e5ER>PXppG$|uZeA(Temu%&q(p;3AFN2!kq zm=?vfxfpqDEN!LF)Xm0H1wg{HMEXo-l13}ryyuWqH$7J>Xgp69ORBMSo%EOR{GE@T zp6`=69Ftb3=ONylwdwgfFVgK&D$mcnFSmVb{~?FB$0_H`z~O7eOlSLUCm#&_o;kIB z^GO&pU!)Lg-zm3^a<;FL4;!T`wb1X9I%}R0*ioufT+j91NaBu?NMeOwVtj_4-Bj0@ z_j+s0>1Gh!;oi!cvc4Mg&8Yc4=Cmj3w59_z5~=-$9!bpUA~dL*qwByWnz05DbT{~4 z*jZ@K?vDlzYTtT-qUP-5@^1W$cjLZ1m)7`wc?;yk#>sw)Ni$-;5OH_f-AMb*3BElL zTXVmwcEz1Nab&8Q-#V9uW2Z6VdwH||2KhpVBR4w8!{_^EvduYpj=@m1wadC|nCyj2 zt$A%;w3fp&nPJJ87ID86l?_lyq<-5M`#ZFGH^n*bFxrb{B4*!>glHD=IX zaR4E?rmXV`e=Jb3r)umy9O_=}HG_<;wLag>;c-u)&Cx(xabWC&VP!^jmFM&Ib z$EM)|j1Ueju0pu}b54-q=pis$~y&T*+xHtN5ij^Dv z^%7mNlKsbrMJuxz??mDQn__!^I>*gYDhiq>gCh>6y-yP!!np!os_nT!v)geY)f(H$ zMdxVz82saUVjQ{l!Fyx32g`P8jl0P*QX^tlU_Sb?kt&IuWuyvXIfW6 zvj(<2h5p+D2H`EwSwH=TECv*ISR}=U4K0jI?@X;}rSnDnja37_hg1U|)xdV^hSx;N zR_l)tW>JcPb8F@5C~uO{c@SQX_Wc-vx12+X_zdyQjX9DVg;djzhq7W0o z))<;YTY1Kqwi$lJ9G%8d#&=Y2g-5J9EDiLvQu;DVkGayNG;o{qwO{JmzR6Uh$UG@x zPCO=Jtf)bg*6_lp#3+w^Tg=a7c|p*fGtm(jE${gPmO7HD77SR?ytQ3_Bxr`(@-qAT zWfSOxaSdnVed(w}=&i-FC`!Pi=?<=yrTgx#ws#DU@R`1IyXR+k0R7~IY6mXQnIYJ=|Dqf4+{O?83Q*D35 zm~q?{FH`;v)-R{BFDCMi3*t-k>{7fQ)8nw?9TyWqG3`Ursw{KR7s%pMMe3iM)dT*M`1?|}%AZgc@ zX30+IPfbP!7X!AEjBUyvWF0|-nESBQh0Mtj(=rdU9mNVG#;RgmWP&-P(zBuAracc- zp+(j}^q7=iuyEi?+-C&NiI3TU^)U0@n#|Xx-UoNc*6NmU3HqR;Wl%dL zkIaY`kZ}eU*h+@_w{SA-$LNPRs?I`9&yRXRk~$gghBqUHqL4xmtMtVD2F!n`DBU&Y zA@L!Y3w6XoW)F{rN=O!R5%FX>|1Ypcy+BCeYqX6PttY}QV(d8A+D=AhCvAj2I9Ci+ zE_xz1LN~*Y8IN@_s1s-}DbcJjI5vpO#CDDjrv=T!AxN@1Y#t5bfti^9CyoyfXpL_T z2V8Sei{e7KzA*ct9Fu(Nld9;CL z?d=gOO0=h4Y+4Jb!Gh3(cScOi?2L8L!@ zXRz-XiI$JM!z1>gk%aITI}Ha2`#~+lD$VpAZrrCeDp|VeRi;hXLX+MU&wulyCi{V@ zp~_QZXJ}92zB_-Nbp#$k+W_m_M`OPZC+5?&W-o>zKXw6;Mw zPZVMo6>O;(y{(rJ))j>Jj--v{g0^&C9d>R#xu`p+I!;{+20Fvd@~tlHPH#Z}#D#80 zwJKsBYO=M&SD3rt(@+KWTkw{8Sk2`v+CyWht11NA9@xI&HVQx{ji8>XzDsLtBV)te zncQFSH2RmvZZP^+XpO58RW`&kpI(%5tDHnrJ71E)Kc>S>es<7(F(N@%94gfc zt}u%Qr8lQ*gBzd@RpP2l;SukoBN6k<1H@t7b$bS(TH|}1=7p2j`DH3Rgr=l(6PIL> zoLb8o5hMoHL6p-P+JoNWY5<8%Jy_)&dQZbMH@;n1k5gZVSDG59CRwN@mS3YieR+R+ zBAkSWPvs4(spUN{Y+l|!Sg;6&bFUYtQyI6H=HmrUtM0Jb+GO9GuVy+uB51tb7Yv*T zYFD3tL}TJ3oc#GNW=rR=aO>o4-~yYIy{l>KgSZEC^?)4Dv_{}AeTN7(PtHQSsCppR z-O&ueZ%;ojbgn0xqy?c1=D}`fMTVQ+(Hf7#GMidk%E4&NTj|ys)55Ur?JSdKcj|Q# z@lkkIq~gI09sUQhXE1Oi`1G%+0*FVX$zZ^K;H)*Biv-5nT~_VsJQLwR!63B8U?hW)?=-Hdlqq`a)%WG*cKqMfqu&U6`6B@bTa*hHb`MGTvKIJRjs3NL+*6oUu`f zPz-+a;yzVqgUnl|_Ft%7(MqVuf;hXE{lHCF2ZJV3dw8A0ZK9=1GTeu=CHDQBU?IYD zYb`v2rzovi+{2bQ@h4?87jd5uw$%IJMg@8LZ1vzM6o{&c7{V%n5d_#@0$C223kja0 zjv%e6ch#8!Yiyzet6(Ps>o6M6;8nan=LVmWkAUisOgL8(UDj`QAml+b0wtTWQz})) zSJ`rn{zz=D(Z4h{djmEwSX!(^ZPaMhTGKdHXyg77DUCNG*u3gne57pNGR1|dUZ|DD zUz|F?3wuqfM>2#Z)dh{pi{q#ASe1LBs*PR_05B!hk@A>Ki}d9}v5yvdfiOihrQ8wUSumgQPT z^#CeUufkXX@5DLrvx5#hRD)I=NS3K=5*W_V>qWl{rNnBGEPPs!nOv=RtGrjq3z|oz z%TQ`338%qxgAOAc(jbx<>pSsBsbK8L>)Xq6SeSZ@BwFdhWMPA9H$=OVZ%8pZ3SwOU zve7>|_N5K7hM2X<8_siH#wcItPcL%K1u0ta&UGs3R;U zDFUi^?@j0u_Vu&Ua)bjE8WCg%lxXp`R{m?P8%2g!!Sm&i8ysliZz-Pe)W~iKi$2@- z%_3*UuodHBQkRe`Gg%(oKyxZiY$9Kkf}%9HjO|Gs??vP=@Th3JlaO^YUi*R06`J)L zM<&jp6-PabbnTBvoEC@yMN~q%Hte32CG^+Hq!Y-3#Bck`o&Ye^n)8gAcjrS3G3;f# ztlv78_U$6c{iV}g2vq6cNn)6j5UD?NVll)n<{W@3DD~vmQD0afGzl}{o*aCRADki_ z=2bm;e{nE5XBgAp9!e}Kj3yT4)qV7PJvnnErUkw1#M->mWvgOe+8O_dh*2zSE)^88 zHm|BVM?!u%g)5yXB(SvQ%{h1(*lmIK`cKw|O268HNamNIhp(p3)}H)Y zPDp#QH5Ayq^3-4%J5cMD$!OkkaoPKe-}-JTT@VzuHovho{+xMvA)b$wYN|zTDK{_A z!=;ipwz8(>5Q?(SiryT8!!Lqar~p8UnO`j=uM&6I*a>7SB%*^ANS&jk`adDWz7Sx2zfof8}0FuZtes9;}u zB+1-Zal>$baBaxDuX&9iE1ln=o-T=^!RCgr5bsJ~CbW6gB=GQPFj?(4`p2#G(oAxe zKV8Tn{kWAQX$9i_OdFVjLG*L=sG>-tI9wRH1Q$&*H~5=?sf z00n0WnNK)qk3fD%dRC{TQE?y+baCD^r9)P~=SLLO6W>vFO;58*F`ox*%F>k6!x3eP zc{T1$&hc9d;0GDo(7-vRvd2`T@-mUcE?7|-H>ONK0Yq}-H>J~aChwpa{&C^2T`ni| zz*%QM45LVV0&)-tQ>Q{NTp92^7BAbrnT{X= z{9VAVs&sD53A%Sg-2258V;u3+r`FgO<8l;^HMYd#YmI#r=S~9KckScO`lDlr5YJ*H zTi?`7<`$KC)kJX=7tUgxcLwDBKwjd8!cf(cQor`?hg6AB>D0=FrBh?)RW8VhP1ByN z)SlFH0!LQ*%68G_C6fTCp&&2fem+vRBmRkKB$Xxc=k(;|r)@Y%0}Wnp#Qlu=W?q%I zCiOVHU(Drsu?a?sn+Gsw=b_S!Z^?s&q(`@$B9FqBJoJ#Xr)3nW#N~ydM4dP7PTb(t zlMfWb={ATW2Afk+3ssZm9Am&uE$q-@f_UMx1Dod;oX)$GpGoCu2*2&EynoQJ>*{3a zoZ^Vt6|5|YO|SfVPV8Lm$x+&q!JI(%%5kuSFHH)rbqC$g2l1>Ux5m8#4#{F8PY=8VI@V4ed8Ja-K;lqb{X!#!&;aj>ZKK?0ZXiqsqd&(KwQ!=z@*^8i? z#a%onx%!-sH_EUGHPGr3#5%U+M#`Q?w}Uk52@(;DP87;v74K_x_RR*0!>X&5ktlO# zmEzeP1rG74R6Zc)k)ZLcZFSRy+?rG@s)+duS#@ktn@C|03e3*a8spHy20vtI^`9bT z_u`f)O#Ei@b@NBgI_(O!s3JdE!u(*Tcut&)y=WsL6Nwiyyej-%DU2D=c!%rQ?BN9R zn<^_3*dgnGGaw`s2nTI<@3*@soU1iqFLm{L9%O65oe^%}+Em03Ncf~gPHAW7B|LXy z0XAoQ6Q0}EOJTxui@bz$6>16rPWHPuQ*dpY}NlQP&(W~Yj6k}hp_|woF2JBV+Dt3<`-hr%Ezr=pxxW7j1 zQwQya#XN8`!r~?-DhW$G7|LP$7=SE~H0T%rEt}55mQ81YbJ9bhyDkeI2OSDJDZ<&H zfCpc7z{})0@Nt=f179eoSpdWVRPk$8P4*5(N=#E;;=Ie`upgiM9uKzS z@x}&0gFt?wmMqhh0#=h0PTsd*lS2lcL+|pf>WYJ00cC2+LrF&Ku@*@=<3Z4k@6y#! z1HMbnm)Yt|r(a~xO`^ssNf!ar*|t-Y`Oe|QKy0%RQc&v8h?=9KfjzMc^aKlRn{_^f zPOx^2NbYUce~}0pm&&~$NzXK7ifEu4c5>-SK}EYd6hM6C<_M=<>z^`Oj3k*G7N#-` zxyvde%Z#-Cp}s%T3I@_;8$>*}*5a{_4bhZ5PS`}wwZ3Xg`+J=Nw~gilc5$!BBVGAY zD&t7Tcn~`6DR*<+%e&|>X3_gVDM4CAw(lkKjiS9|fHYi7ehib9a)?dYa0xv1kYhY| zK1s8QHID&!cPqsnt$usgt_PNiBC$i=EUeC-oJTG8+^^rP-j9@t9;JJwN>$ z4<-AaP5#qrU)yC(0;$ZBDYK-ka?;jB*)PXZ=Ze?K%?i!Ktb-ew40db_8Q7VV*EtTO zdUh6LWukK?5E%5p%-dPvF~TA|IkI*G{jrh8Wn3>JB}N<@nAM*td3w9`L)w-lniZ-u zc$M{GEz?Alj4g%}{#i}WSxk1qGl~wxM_gCa>p1@eM+n3+@v-S<(TCEr%<+pqQ7xQ? zGQ;jyC|j5B74kB3+(IwtKkA%G?O`f>Qqfnj3f7$OTvI!j;|gTIK$q6|JB8Jn9_vO0 z_@W-;zA>)&S=##f=tfTy!#_^$B-!k5xF6oc-c@rjBk6M~M|wHubj3;$=AMofQ<_AOs>}JJ5>u%(%)41kNIq1IvFKc1K))za8*eVg&hY`m|wpzYQxnde<~ z0>F0FV=72u2bV~!IPY^z3hyaE&K20W0xTUoB(F?-BcLgo=QC)WAQ$vR`^$PY!pZ4@cA({mL4nip57 zdCG^p;&{{ayb!lpWN|AY_dYVga-|DRmxFPw@mJ2*&FX8R`r5DPFlu7wmpdZSrh4hXG*R{@B@?OJgoIBda|NU)=bHI zoUCH*`Sx;vs` zPpS@9wL>DBnYNtN0#XtqD+Z<19QA2O#!3`2H>av3C%Z1K->_Y=GO9r|_0?TF(ug(M zsfVgD>2Z;^IabF9Wh7QDV{@_5e`@_9uF=vT!SfDZzgBP77YHt~taOO48%DIb^uUh$ z`infoEYMh5Eqxxb9)of#dL0(3HGTkLB(HK?r`|5C7LpMKO)@-WK;T8j%OIznZiwbB>UnP8=V#ywX^ z#w%pd#G^D3+yFp;7Y+X%**j9Ug~Lnk%jW3BS_}vJqIQ=_yHuY?brm}Bto2{Fs__T8 z>m`%(QzwTF&)35W3APj?m@{JQo40Vp&ghxSY@oCQu1}i%Y^G~yrc>?!%GwSUbZPtE z`JSM$UpOC{HJjhnCYC-NJ=cy1Hhb%;Dq^GT&FVg(_S`i`KL)?`?}%Bdy1Myqr4=Ft z)m|;AP?7ZW#NlI?Tw^Wh|f_hvJC4dygPAxw|6lgr!oKdcOn%DRBs|th9xAZWd^SbKBpPvt@oi4p4n^m-7BH#T&!dE0YfwmPv zJvr9_xZ&mt8a@SddBG5X^FI&lR@2vs84pvpH}Kr*=JYUg(t6T3t2Vv*z-nBnO6}NE zd7O;h6zmPVa$?uX!^?4*Sy;-w*#D+hP*|`1P)`;;LRIC&r<+@dCU=5$4=m8#=W_95 z9$r6TS8#2ZQPdPShq=FYud1yz-Ugeq!-aNd#NHAyp792bt!@mP??z0FA2Vkw_-1e$ zFc%5V;5y)fhG@XskZJ;5K~{qJfOyyR?QP)%$eys(X!`_~u7!y9`0aNY8C#Pqn;O9) zHV(3XM>dH7)_*;5Za{8E&zB~v(*;JqJMNKpY=6-}Hh^_{2F%S6Fae{5=^|BJ@5~Db z;0P59g7!1|nqyvOS9?e&k39|Qw|(EGD!0KUe^x5=>4YiXF%YJxZn}qQ55!Upy%(K@ z<~L{lgng+3LFW)>Wk^rl5&0K-bTpl5L`;>+E#Q^(V$QsaqM_u^Eyz6-cq3@0gW47Q zgMs~Vq_Bar7K}V#VNjuQ?ySq&@jlx>);I}-OG)PvYaoGb&st}{GXTOlRh~YW`8{XK zCi!O&8%jRv05ItdVe*_@YgZf(29C$6{J#S6FL59%7jaI(AhDDH&{8WCD?)$#0*U1U zif=ejaG`mbg5nn$D88S>9m1==H>n7{S z-m<4;{-#Kz1XZOyO--#9yrgMw?PQ#+F}XR?6Uq7(IU_p z*UZ@^jji`;M$ZZU{z^LEm{a1HU~O|wvH0%FS+3Y}66jWgl5kevkUa$Fb1ZQfV^SBg z)~s7uhAeXr{66iM`zERZg8MVJTQ8v1(eKDRRM39wpb=*f=Yuiz3j0JdaH)}79jJ^bPd-8#dQb7oZ4CAoR2{*B&Yq;uo2y@+8FZ| z&34nQ-JV*`uQN$pq=D`8L=KVU&RjtdF$wI!^$qlh=Qw+LyDFS2pxOY(1!G1jS^{~Dde#<9}X zTh;FEOqiNIfN*GhA@?=5i`;6IJ_CnLzdCeZm;2I%{XJa@R#BtYy#(Fi08_?wT%6?G zN8}q53FEtj9)%%X@jGF|;@92I{Rlhb&r_+EN)QjC6Sr;n9EP5^1?f3rtY%N+B&s8Q?}lkqvyO=}aXDxXS++z+i%7g{o)&7W4e~2kZ8xiz11ICtT@a)-*m*yU3z*{=Nj2(#97} ziWm#jI2HEQwIMUdP)B#a3U7HsY_^}U<6QPH`N6RFKJh_Az5^He)_fo?j;zw zh@gUt2+okp1-!bth#+0e5xU$yV6&)&Ps#-YBe`H;R`bHC_W$92fq$`YA~b*Ib^&%F zE>!r`?E){8MTpQlJRni6ajSa4eYlkuxm}>fdS;i%iRaJzu` zVoHGjGV8n4Qnw3;Kxs9QN|dA@uvYS-CyNe3N`qGm&={u?;>Uo9I@p-VH65YTZICi} zv%tkpyYUL^T;4+5EO0h%kkdNyRjEnVspJk^EHGRpP8A3?|BsqLp_1yMJD&4*Matnt zEF})9GZ#)x%iJsQC@{dU(;I~T8|sCze8 zyG1AOj?}ipd5hImMY>ma&++yK-CC@WV^ufTU+RxU-Cfa&ZQMofY!^9?!vuk08i8-X z!H3;e0@8Arm(o~<@<_EKL~0Rf_nJq|Lj*lNz@F4CYw!}rE4LjkRbiCiR@v?34oJWG zQpoHQk>Cdit{Gem*+P}w0L6@Rhf`1;E(NGG$tfH&5ybcVbQndp_T|1j6XbW!L{L z5{)Z8}}E{XmeqjG2}{hcnqYd6KY8b0_hg z==3`dGPXA}I?Psdn8MBJeAdt7-HbEn^~c8I9Jv$g4tHbS&8T1>TH}X8vj{AB8kt=EsIb%i8orF&A`kcVoopxh&F_8Wyi|68R+Du~Bt( zb?es2VHdX>%N@iYi|=tk^C42IYA$M>dxn28V4+DGYHJ2m)ms_?Q`QmPV9OA-g=r$63(u%WQjm72$7 ze0Ht*G8#Mw+($ej>mYBcEOevu~(tx*WziE6D$ESpc{vf+36xm6@}2>cse zIlMZgm2b_sODzAo8N^7&sr4?a^S{NB;0ipkzgCP?*q_f)!xi4F-BV2~rw=afrTkX> zMyc>4D#&IrLlOydA|~`vLP_yH{^J=CSHj2YcmO0l7;c>Yn&|Iv?+l z>vkfjt)1;H{nm_c#XZ`_yGx4JJg6=*iBF(6Z_Ec&+{x-f=vUE9TBt1{aBB9|UhPTc zPM6TqWAG(!HF}DT*5ct;lo+>qhujjDJ^YmQ4HGKH`Pw_5EA~aH8T?~>3-sDHt~}`s z_dt|(V$s{e^~YItTQS?&iArlGFPV!AwhUv_ve~YhALlLLS&Po88ISOe#h9QEBIf@3 z0M`O@!p0Spjmg(R%Tr-_{P2I?6 zE)41(~C3dM|P)!0etmm?S)~ig9%2R3(F^1wW{Mn8njlaS1+%r9>fqN3|z(K z{=R=hJz-d{-7od_&M_O+kYKyz)!77>&jwoxgh)c=(0e0?hOV{I^5MZtIXFTc6&riw zw|NGeM`r5;xl}diekGFpYEC%0xG&TkDjyzhJP^A%TYv_tXdreCUTrna1=(!s==Nr+ z^h=ehU<3NY`Pq-uxm4;*qRzO%I!=WnRFyiHW~T*j^4D-fM1-5JtoF9gen2=YQAFTa zubuxI(M-*&d8bgITl>y8c*QKbdo?S@{T7|}%k0Xa8??rY_y{z)TH`}VQ_NRUu;I%E zVp=Kp=A}IiOUk{+BDK$8)R8}k=I+oFVM_(da~(Hk<03&1#-SPGwZ`}5{nBS*Mar2J zqflxGImm35Zg+7SuwrZ^8P1VQ5DC}WlAC^j!+_MUD8k4TNHQ`+y9F{dCsvzAGGm;e z#u(=gkngQl`$%2Y{jbGtVq8b=v+bdS(qrQr?q5(4J3Z7qIotBu@Pg*h^x^41gumG~ zLO#bm9qxj383g0>q;AW-ZYj=ae5BQ1(P~VS74Lb3SK7isHX69o(!N#5GDx#Z2Ju+! z;43#hTyUX=A2Roa%ie9ce=#0PyTPnjw;JVq8-LAScSGDubE!Wwcy+pv){LWh4~_-8 z`co)iZ`Pi4&#L^pYxy-?9`v^Mj?mr6@zd()%APv0vU4At(j zlsp@LJ8IrJH(2)iZVPwX8nZ(rQU08rcoxcEdcl^v<(t9}dPH=#eLW;#(FgD=6>zsf zIDvL^Q4b2+%x~KEl^H~G;ZtYW{dQt?xt{t@$~5iSD2p>zgd_f`|0_W*Rs?y=AVG4t z%HK8XhbGS_vo08TCdL7=8yzxNC@&@Q3Us*`VdbO{=6DE`KPprlAI|5z)PK>f(B?mR zX0er_&Akq7f^qc0Ex8%ueBeGsk|S;3$M?#c*7PF^K%kCr0}ai)_p?MAP@}7>n!lI7 zdO=|4+Av(oSqDO@Yr`)ONmgZNw0U0nrRk_paq&R?IB`{@)0Z$+dgo@@3t)h5>$|r= zTY^A(e{mIo3DVQ4>B4N@X33L)Qjh{&FV?;#!cF?jY)`@;2I#sF-*HgtpwJ<0CQ!(r zCh$qj8$mw%=D#z&$4+AIcnuGmuiL)VD#)|n6Q5xHmBSKeC$hTKE1cSu3SyTv`tOYA znQx^32l{xHPpNas#I7*jdXyA<%&Nhv(|=2ObuHwAfkV6-uFu@zi&%j9K{m?4T@p<{ zDBIin-1uqOvNv8yYZb2&czwn|v#CwMQt_(njX&otF!Qc=WpCs_0}^;IYWB$`tI_1l z6=V|_hAi+lcTDE>u^^*V8{WZjl>Hmc~ zud4Qj{MbT9;iS(A8eio8K7#Ij)>>6V0jP_R@5p5JLX8(S|R^)bin<3&Qf2Q-fdM;3B zw|UX(z7!dZ8;RvQ^HOdplAFr5@OL~{6k5CSHg&GO+N5IX1s-JNK|#jR1+l7Cqko|# z8Q)Yv(Y7l+#lF(J3MahWW>{jb_GDYyt8Ln9O~y)rxE9YF?oQ|0EL|rSp781D7ulSM zx@KVJE7fbc&mV907pvDkYj3xjm=@zQECfxjKKNb+r~yl|V>ud-TmRo;y1(qibYB=; zJ0zrgB;B%g(R2J1iRd2X*q#4;ne{PijDW7)|A%mHWz)&}hbyr!`G?YS>T@pKEgOmH z>1g3m!MSi#7aUD2{VJY&xk!ymv8psU0p0NDB{<#kSTGRF9VNAp|L0lZA7gh`7jv*A0o~-iX{SMpf8n=K!@o0r=sbuuu`oJEe|29ViRx#awqL9&lx8u_+ z@!Yj4o;zRoQGeXIi`3{}r8TwFP|I1APS3TwFd@mG$H9KYK0?Iyc76Aev>!wW0@k!E ze5MQRt`L7kCm+3^Qisd7v+L=p`)DT{)O}zesC$VM)QyI6@4~!mh@_fZ9!y?yn2`8u z(pP5#xewf19UhTJHg;kbtv{WcK^UYUo;1B%{6j;x6$VrC2PFkTPUyBduQZwo+P32P zLLY@I24c6*S5qskaR29)fq?C?PQZ4t${P}}t2&wPgk`pVIM41Y*2O-h)C~|XSs)#>ramEx4ajCWvW0r@? zme6R~dlbpWX){LLlK$+s`iXI78+uHIHOn%e%O{D`4wd??3y`I#f>bf<52 z4x;$**dbn0)ln)#D3V@-my3;s=YC4t$DD5SPBmf>P&mty~Xa~TEJa`D33TGJJrR1s&Z z_V1c?L*r~ka1bY=zdj^L{aLA>bxoYD2pEG>_M&#^BND6RcWLZwewT@v;P}e;ql%TM z9|<;8E{hkiHA=cL-3(_aPJfGEzq&>$xK{Rz1KNy>yCkG(g6kFvTN|L83hX(Ot6G8mRfCXYg@Ff(rQ~?S8!`sgy0Ie;ZjYlZJ!vmu~op0{J-bk z=b21Gu=ag_{q^(y{vEhE=ehemcR%;sa~WJG3uH(gFOV^Gq`*~lOM&Q4@c?B8DwJ03 z^E~v7o{p^5r?NCU4B22Yb6441;okU+RW3_dY|64Xj)v8u*Gzi8M>!<(SESc-@M_mV z+jm)kQTEeDaavkCyd7 zcv*PIk9h4jBY0cePdGc}9;KX&9d}2j_*L`%%+uBrKZV?~qEEJdrX%T#f3_~|^BKsH zQV}5)#C$R<7*~#pKO~Jr#z4;bWzeO`-$S@|jy#?gxeMg?IOlfW1F~Q5t1EH4zcAZ{>yl zn!Do*d3B%=tMID>F(0rYOw}909JXxPlvXx-9~{;XHOO9%?u>)z2w<-_*!s!+;Z5=V zpd@TId-oBN?HBrAjja{z@;FKM*v@W`?Tb++FFIgPyuTW3Z5a(G+DOFj2*%c!I6gm&sPu)rv`%3$%p8J;WdZ_xb#PsWZ%U97u#ii?3=^c9SA|t1)zbi1= zR^vw6lx8C(oErmNGnh9hBVC$heh%Td?&{Hy~(g(7P z8mdwFWBuQZSWDA|mt;46eN?WafeJ?JQQEO6R*2L+!KbW-h*{wX@CWN9fnspe^& zRJUt)wh5y_vN-|E*1B6{0Z`#tf0^t{v<|1qFnJhi-a&`c;TV{342w&{bAMY3u03^G z&2aV@={iOUoKQQM{YG|E)r&unHz=}gWmfIq5lvQ%P%<)Qi&VsjV%Z9_E}1aa-q{^( zyPU=vsV54_PIQc(K$q15N<-_hby=n8*ksv%(@YT z`^ywm-NQ`d>}6~PRc0SUpRayGHsLu<<+89@y+-s?!Nsf?yHxfyLf)^pU+HXY-dTN- z_MM&ZXLzQO3aXwRX;akGP)Cbpp3RC-QWb}isyJ5S70^JnZKBf%Da}qtN9cQ;J*{Gi z;B0#SJ({Zeil(Z}W1e|DJ`xyP-J7DSZkr#J9`vH9iree9rm7dTG9Z6gRh6g=)2gbn z*Z-OJ&t6a_;_QqG=n~+Ag9_ACWp9|!_VH(7Jyqx0daAxp9cCUiYN|Z*j?(-6J+xFk z{vuI0TB^$MuD3vd;ma1=P zPcKAz(&N%`TB^30#)O8d_E<9(%Ba}(?x&0d-L+LMZTr+%Mrx~CYP415X>C<`+q|?a zsZPBQ>P=gf-pssg&1R#+u+gQh3iVduUC<&p#-!bgwkkVx4539>@kFYs3cIPQdI(tp zVVCt#RaL0h(pDWilrB|O!u4I%K2ZY>OJy2u9}~`~PTr`ik{!^m@6}T`Jt=Gb!Bv-Q zbyb(>ZPj+6gPqyMB%qrnc`!<-Bmi;BZphQHfB`{vL`T=La-#J}PMN@&uEm?JwQ4$^ zB6MA~?~pnBOI29)Cj@iQdkJlEV4@AmC`Rfhv%febwtc_=!O)Q0_9qZgVRc9>aPo+j zs$NxCJ%o=Fs<8S2ju9%XHp*u?bTCS(zA2w<%I!}Xow}>Ax*VG(pV#=F&xd5%=$({_ zQj0gOGW#E+!b)=~tY&sM(5&q_hI6BBimj{O+UNp1>Z=g(^E4t|tU|{)Yw>F#jqcj3 z{B5j=S-a>hj=$|`omEkX)vNX@z1v|SC=@i>tCqCM5lnc~gH|kO(^Dtj{u%96i;2|T zevw4oK9|3)_AIHFI9M{Gy=tnXx~f75<7{}|HYGEQieza@v>`1RCd))kj4stxM}=w# zsrF&j78jg#ycVmS{w^(6i`GhKz5PU5tgP>F=3=i{&%a4(v@<*Xu3alFDHqJ@ygTo2yml~HLyoN zi`qP4NBeo%JU|@U`-m$U#u|4IzHmkPN+?rb4zm^~w@>OpvOs|-EHhf}gz zVR>kJ5Cm<`uy(rWkvHKW?JZ`&@x_imzSujX5WtEk_LEMrO~l0BmQCN{9-HT3WUA!l zn1jKO{D^#Ur>(O^;^oMCeRPs=HaFl82l+K3mKgzOurL9Q@horcg_$yhIQ#Isxp zle>zYDHmUguVSBeTdmXpNL@+6XqXZI93pA@MAEIZ{^duL_x(md=SX3igA4Y&y^N2zwh!*J33~ ziMY+t82jA)*pPFs297w$X+3=NF@XgV!EG{zp;Er7+7+1OFaAK&LS)UKe@4g=C!ye$ z!oqw>ri>52ujQgIlABaW$@`mz&yl!-4-m1|Pf3(_ApVipIPMD4;qjrpv87L$JEw*+ zS-s1~cHI}uYoxZU{f#258cG^O&aHVSMmKodVKQvjKT>+(Ge}`ibf%m`1);yqTqMj} zK4T;YveJBJqy~>T$OjYlV&yNkq?F}P3yC_Ul$<%DCWfiD#Tqg~8WFd$xb5@DuL(~1 z^#Sd1XQ4J9fyanAOAL(WDuY|}V&^7XKfI>16UEp^Sn5%7Bmo-dBqN|nn~+=h(%<|c z*SZY-AjX9HRjDz-aiJ{lEHCQC11Ymc3FtR#w1Bu-D(eRb_FI49+~XM{lkO)pkT}pC zKu_mB&?WjnQ};|G!{3cITyWwR?46IxSc$y9Tq;6>i7C$?+O%2POX#T?Gq{h~bbYgY z@!o}8@_Wzu=H=!X+@nR9SoYa6S>}a&Zdd_mALaw;%-CR3USqBsb!wk$Fd?$c(z*ZgJO4CKn1LyvCd zE9lu1~A_lJqhsi*}FsNpRhl#m^Aa2vrXxGMQ6#e}ra*+570)b|b_`z@SL`P^QwqFoi zU8V{Y$Qa=!bX~*{L2XiF&sz6NP%}i-b`23%jn;G215qjF~p89@W=ICI5n5pk)Jv7>LOEX)$ zki~kaGY5aXoV_u6L!7^Jujiqu;_{sJQm&pI2KMxTYgWVIz%X_Xzs{;V<_+}WZ{Oe@ z5=q}Z=ONMoPvq&Thar=v;g95^E|c@ay3D>o9!uNR{-L&)wV~V$;dP&xVag&`kP$ z_QWlv43cHmF747h0`quh**()6IB#a(z#Is2mgfof3VxwZC#B$#o{eO9moB^nwCT{E zfD;7SC3czy2<%-V)nU>>kWZ)6HV8X?$%RW%WATY@# zgvUbDp9A9=t(>>9Trv0TWoUb4PwYncChS);7D;;>F$&-Q##yfk4;6t?D2uLk7}N4b zlwa?i;HJY4bxxTcm#uYifH@l`u>OtoXMR|_)L+cGu^*K~wHKil|3iP~ff}ayr>t>L z;@?a;8F@{-AsdcYPbc=-)e2(G)&*^xHIl6OsPg9Q#t|Oy_Gr4SP=W3y8(H1xPrNqB z;(e%vdTC&i^)%?76gtFI%$cz)EA^y&IE=j~lWGP6iUQO92R_p)p={nyL30CEX?oJ_ zOzB6o%#2jzMbg19KmyU89ep|m9bAI3G}UXPityU#g$26XC&=a9pVo@7%13(s{2BIK zHE73y+4NSv%qT}uD;yClb`E6}I!o@z$lN8>?B#CTw*rK1npFqrU9X6ql$lUjzea|; z+=N^56~mcZc>YlA-M5e)V@kbr|-c!U+6=&ZF_U9RBW=FR=671 z9?IIVc8R}nZAVVSvjKPG+M~XQliTC68%vL7Z)9x9KV&^JR~n{g{i(3}waCT#j$rbU zJt`}XA!J6*p+Iy_{1>6;jQ$MR*s9q#W*({j_BWW z*U8zFY*btD&oOWvAo3VEJJiuWH0$slcfd`OiX`9ni2!9*J8~Hvq5MLgL2C9rP8IR? zRdQgW{23#EhRPpL{U=$$hMdff&?}x>c5?n7I)HZC&`a%coQ<_dgF19Xj+6|+v?ogovVvn4w9_vgQoKGHGtTB|qdh>e}B%|#|&{rSa#^c6@@d6V~_LoKT zJllS5)g7{4BMwU6+L`hWR;=}YX?+W;y()>)wBPQ_d@|U_SND8YdtXuU5CiJ=hZePl z60AXWgwz>+jXk8vuq~#}Tk|>bM5XB7Fy_6}V&bM*zSpSBc{hsx* z49{tR#q|rCny=yGKrob$gF=j_I<4^t>NMuGNUaXF`jEkO8R9#TPewX9fozitWN52u zTJ)mH!}7+pFIql!oDgKl^7^$eo)k>xVnz%8zndlJDxHDd#4gjc^;9d24J__AL3I{J zlZ8j5M{ienU;npYQYh!pn4Q6xgb&-J5;~~#oiz73vt*SSIF;=bU^HJ*x;tb6M)4J+ z^j0fI1xI9W$XU`pWV^g+XSbMmZs06wkCEZV^kjs+XhS|8pUV!dZEjrK;#vPwu|PtP zvNn&|L5wQP(;#Akg4PA9IrdpEOi6vWp+=C*KV6mVtN%Ras)_uKY_0zn>GhUb$C#XgCs79%uo<^bz9l^Fg+6P0 zkzCA@`~*kpv>BDG^tbF3Qb<9_rMF{F)&>~Y_F0rZu!@pzK|h&4)t8 znnHOR{%$OFt#?c}1q+_jCK|6GhUD7!xD+jvkXyW)u-rh5ZONIi+sZsuw;49LvgnF# z&B=W4y4Tv#WxlrAZu7+n*&9naF_1Ryt9$1`PHihPR$HW4OMwAJ^|yYtp<*SF4w>HypQ?1Xw6K*2b{e%eZ(gGp%9@*K#HV|)tS9v38 z6?#p5M|NCC1S!lD|lnbb=G&6jm9m2FO z|1J4Hi0IFlx*AaeiTaCu510{lIxBQ*GfpBn4s+^x>$~C)sY&~WX9J%sWt|(I z`O(AQXphbd{hr&M8Dp=T$(1-6>m=aUbS#|#9c6xGlv&-QJmbrwr)avT&b;tHG?u8DGWYjHP3}*Pi2Vsu(+#OQ@>`a~W0csd14u&hrowoz1X4+WRq3 zleJf@EnEf(wTLd-$C35yd@_^JYxa5`-qW7tFPd>+=# z$Mg-{RW#$c<&Ek7`Z(CQdZ+XX*|W}=DJ7@*i@0HSi4;;R=HpEsvsrT9vJUT;e)~OS zni0MsSORjdIUxE55;=Z8*e=0IM63T0*6Q|e>AhI}K9_$+QVFX&dLe6Bn|IQs>wJ-| zBotP(xeKGU&>Rd56gi-N*)SN!(YXULh!u=7d%Hr}#+K>PArA>v$u1f?S&g^KiAn5o zIWf7cHD^Zgpx_wUlK1gE1OcM6GfI!@3lkmoA%Z+hlDhBNvOp%jXDb@>}V@1N_D7B(R?s zdU<|rg)86f-V+^Gk0$Gi}*&?0`6a2LTD zJI}x4-DL0?;FE296!;Kh9p7*`xE-d7i_XR0WBTtG`tRrZ?`Qh&r~2yHO~#8%uPK1HsL%_q6bS${OZwaRKaA&}0M`Jw0AF+etMWz42&;qb&| zAE{LkPg^VWqTnk`!Tm>ITv2co4(6SioSWHlHIH(eLdW~Vgwkby^HIC(!a$UHo&iwp zjdsdkEMuk|bp-l3<=>SI=izl3bSfir6Fy=^e=-CRHJ*W)p`2=RM8;v@a2N}ZiNTm! zOOUeYt+begR$1P3&}{+ye^Atu?V5*E8p#(`m9y< zb;&1akruWdkk}f=%1SC5Rzx#UJ7+W8 zWRbxP9OV!KG~Exr1w7AiJJa~w%%`X*dl`4H)&cJVs0qWhQ%12|Oi_Q6urY=k4K4ZstiwB^m>oh`)LT*Z%PWU>!~~LzRg8X%B}UY>>}ZP(USyDH zc-Od#!V+6$3(r@!#>sM<8`HbAz82EZ35W)lzl$XbT;%5&$#BjO)Y0eSWpzDUBFqad zjF(lI*Wc)C%@Z{)q3n3>IWL6kA$nbW9atU>zDQyt+rGgl92wsx&LZWpw3-LE5ux&= z#>9J4v*WY;>vq)fO*UXrwuz5zS$yY(5>0w}o?U%0GXLkrCre_feC8&LU8>l5#V(C( zWr=;O*jr+6GKK;OY&*pEXz*9L>nuqD=@S8-ddZ~GB(t5$Jih$UU{h{1igCJEkiT=E zQ%Aaj{Pk^75tXDX2)meYB{>yT&{aY8ZEm5dCY&o6uAn$mK^*dgllY4DlO2ClDA7T} zQbDQIMY2>7gd1d%@gdCEKlqZa9v1iA%d6{$+4E{sKh%X(OSqa${p^USpFBG~q3=br=F%riMN739XU|CiOzBh-&#iTr zmeq48*KJ+%HR=5qBwODwNUBw45U+K)LDH;?4U%rtyF`QSssIASbYpqZGCZxPJEU1kw!v7Gs`mg2EpGj_$I;k8(hX0Yq!BS3%7<|9r)doK#c!|MV1z%!tOYl5{cL<(k@S}oH zGq`Yrtu%wX1s`s3{Qyj|!BfRP#^7GTk1i1+m?vf4Gq`@yrPbgW;^#$!%fj1gF}U1; zwH`CLJP2cLHF&k)KR5U)!EZBoo!~bbe1qV12Hzxjz~HwDUS{wz!Iv6*i{J$Y-zs>v z!M6#XVen?bPd9jr;9i687krSxHw*4I_#weRU#!dCDtL#%Ey3S0c!%JJ41QGbXABO< zR9VdimuI`J2MnGp_!fhw3Vyr6y@GEtc$(l122U4!mBBLvuP`{QSY;I&+%Nb-gBJ+y zH~134XBxav@N|Qh2|m`~)q#8tO_fHx-Y=jmH!d)QimkV-sy`(y(zG zn-3RBu`l2S!K7n1=xn}aY%;L<$k;q-j?C1ieG>kSq|d7-Cd4K!?{Yxc%Leb3$*yqKHjM77v|WJerfgMZ%CwH-dc zX;9zg>)!74EMNEOQP0&+vj|3sBTZyy@OQb7INRsE=!5?H4hn|mx~V&J*Y67KZTI+x zvEe(^xeLytta8{ek7tuS#@;XwlMS}Dio_aWRp#ELByibxJkiatelP`ak)V~`YSWy3NOkh&|yL|$KJD&j$KjJV1E{YqKx(^^OzN!8*cc6d$ zX9M8|1H0p*>bEuoQ~p zj8IY|M?0Yd@EE+I*mdC1Etv<_p2nk!T2u24n+brBN{gG97m>yHhLV=xsr?1(RnC8M z8)L?jvp8~g5`x>mbK^PlEsjIKCuxPAM@MjbY=~<}FJ->P!&PLtFIo1iPo)XvHR}9k zzU9$u$?Qg*%eF6M19?>Mfc>7?`~A`TQ2|)fU;JD|-i1}v96U+$jG8WH8hyDYSKOvcxr9gL-+`{B zrr}5Rk^b`&iM26S6l0;`t20F|H~HbfH}T?H%6-PMSUbKcFR z81cflrNl=)>t7PGG$sAaFZ9dT^pfu7Y51;mt)`S~aL}c>LozH5*XTaSUGu-5u6_8m z4>)+S*Ai)G$|~_FchR3W?#W^I<=TCTohiwVzZDWsV{9s(&}|)x^$5}rqz?!>{o^Dwa$C!grV3o9vo=$Lgp%IBNkB(u z%IP|(R#C|{QxZC>^JM|BSK;yb^eb?3@h3yG`C#LJOf0_67x5Bzm^%VUW1|%yg#(^Y z(mIJV^ZCFu-pvw$G5nm0T(4m~j>JQm?O|YN%7eBC_R#YB7=A)YBI4Yc@*~?NnQI5I znNW15z0gjY9ahiv48usxvYph53A*~8(9C(zhxUuAG_s-p91ME#!0Q$JSe%fv0pf`Iy`k-vUY&tiPqL?X zvbdHFYS-%QRTNw0a;_E}ofZE#A@+KUZ!$4dp*1|c4o(ssj&>wkjNm~aX$iNMcV14@ZI|{H zteO#9yn&@U{r+j|$KTficN6^epS51~xY&fSu_`(9-m4Oc$sEe1%lMrkgUjW+tc!5e zgK{8^X`#jX1dbAKLcU~WI1ZN@hgR(%0-TSU^Zzg(+AFW7aED6TPGE$v?$2xWANhN3 zW^=8_`jB8w;_b6g-wYRiU%+k67$s$3wB$Xs=d4%s)FPu#V6f=L>+hd{RBmFN6nK~Q zA^ONfNwq$`Yr+CA|pKr0h>E5yX|AZ((`Y_fSPl*yW&O<`6hpr$o84=fePl5_C zaAEblI|_9p=={%tjKW&}Qy)B05hJb3$n&TS>r9<>y=?g_8$~(U+kv0F5JIzmL=C|Y zZ)J4f@p-JT{x2itfeVp|Ey%yJbBS+bz>^`fePLGA;jI0~kn)bwvfi#>U*yiT&fXvT z4rhDNs-1*Z?WeU??I8oHfTyh&-;zr7G(5#-l0>GH$oZj|R=mf_>Gl0sTV>q8Vl3wn zdnv2JW@#f$u?hH`amgUb2{IfW&n>$;Q@%~zNn~pY1t+^N;^&?Q*%BichZ7V)-sAVM z`bpKsGH=pT&i!vuH0x=%)GL8)31qNbEr*FT7eaVPc5%> zpSU6JKHQejp@j%9+xp|%wukSC2Lw+t^xt&FptzLtz_Eqqf~G!ooqABDH)4e{92UxX zMrX>|0LWzQKOtB?ny+XZb^=4+M+5=f4>c;9Ej z7tu5vdBuH+=f+sr}mV#cafb!(7!3=m#mFD z_fnX*eH*epc{IzneS5Rx3ZQ|aZ|1dqqFdH!WBEMP_8uSFwjBftUrA^ogl_n>2W*^$!WUD&UoL(n6bH?yJyA+6E+Oy7Cl-d z*t+q5LmxrcebPxks(H>oiW7E!(|QSy3YqK)OrF`)cT>_IS*7|zi958qAz7j8nwEO^ z`gOEPNKGP&=L73boh(8E8x%Eb4b zzCsCqKgN_WpON=OB|MFS^ekbfl(0Vzx?I)bW1CPw`Y4B_T@^LCdx;WhZE~8UMWaMK z%03I?P-P1wuh|pXqop@jPoOUXq#rLL1;pD$P4W*WphWe+QQnqt>cn*J%P0?e1f6Rp^+8hqunvz;&Sx6HQKa3hu^Pxm{_Jlp?Umh)V2_!_b2+z(u zcHOpiR_segNsE@x6z*V}0y7Ty&>(SrGz8JD28qn_-zOuCpD~#2Ct1kRYrW2tIXVZ7^q;c=qU}w6z5VCR3nEV6wuJZbuMb_Fh^uaF_0jc?m?bbGyY)f%N3*m#X-rb81yl(n$b5OyH4h^jj z?;S>*F8#NTsyxwu`zS6w^xr;oqkHS{Nd33A(yL}}@yzu+)X;Z7uD%@>8n5(9>nI8; zWWMo*T3Et*8j8u8h>G9nHgK8^|8CpAX~WxX*gzIUq%yV^w8t3upxNUace9#R_-3US>Dy7DPR zH-)(8{clrsI!>Z{|SY-y7{zE zl2~;tT?%o}JK8P^aRFh4xZp84q4Rh&3#GaLe^7{f&ql_}6Dq_-9x>@zw!oTrkqU9s zhtdxIM+$LoB3j;6PL+6iQ;54@oX!^J)DhX;)xaF))?PH z#uF>V{p6=%Li-~X;(l_LPRdb;YgD_+(m1RU_xThA%r=hJ8gZwykYvIM#QW-x#-WCr zrP-G&$h~>GS!8~hg4|gsU@Z$w;;*A1cN5oL-cM+6tUJ4cI~AQfkN}=GnIX}UEB2_!we3-nJ4x(IQ1C9W+|zKfKvd)o z7Kn=6egaXE+eaX(9OYh;s5dHBKPasgRLU>A}1PDexrbo}5QDqzeS^fby<-qp+v|cr^tiSI#wx0<1w^RUtBPDx8gX9O_ES7s zPhJ*YIbNG>tH}N4;mG?&EYL;JRWuG~upaoiA1cE%;+@V$9agpqUSN2^Q-L6iU zbJBmXKT0Ncwkei{jHg-6x4{Sz-MCj}&dMaM+RARaakH`NZGR*eT+%3S#Qtc2eh0L$EcL`h|cCwTyo7meir45qW_ypeM~7y_JZ z!o4-OO5no44Mw7whm8*g&6N^i6-SLi^G4f7iHoo3`o5hAKhi0$yDG)Hg>ww&z#wln z-Dp=k3PBe!lIOQtcTY99OMLa;9Hcz!g{{VA#ti*NEh@III$w@_28a+m&$Pf=7e4g2 zzD+Ychgi++4r?lC-P)rnq~tnE_!fw4nd>A+^}7o%mwhrZr4v)|RLez(rprgOeS6d= zO?WMLNMwkL2;H`bZ@5+L_4@3MX8XmI5|qfxsj}$AfKM?%H|l})Yttw(<>zSf^}rqQ^MA}coYYVK(Q7>GhiUuc z${xCjvd`w&MIU}pfKRhb;XMsMXINmy2i-}^sUw=|1pn$$98FRi2rB9+R;a;6~fxl?~TJ;rMl$xRda5T${3Oy zd3HcHr@kNhl%wU)@8x_Z#hQLecs%;xTy`Fx5_w)|6e>%MdX`6KVIhaWG3nCOEP4Zc zd-0UnYP0|^pHUX&4^3ZECd?_G@4IEMKXdwgzJgU;s0@9;twqtX(*89#du}e1&FB~W zxU)H|w`<`#p%2|cPDbPn;=b1QYjjo68JYvb{1g7l*k-L~rzh%nWP=ro;f$?0Xia_J z-#8hPuJSide|3d)9@zT7Aa5Lph|XG?eXhijZ9Vz`F*e5TE`nKf_5H%GU%lG8>pso5 zueQ!u;?O`358-y-b@osD&mp!Lj`!Y@q{lS*-PTEUI?{PM<>mmKq%`PIU@{W)YAs0C z$Jc33XWO2BVmwWd&(H_br*8Cz`s7b|&mTILd*BOsAgwyT7?G^zK+Y3F`h3yTwO=aW zy#Hbv=Bh?;sNA5NJ!4v#r{NBKfF^>lzq zb$pN|ZU^7_g)Bk$*;kFFs=e0BnN0oS?Gody?T2{karT%c2aoy=41CE?U`<+E@hn+O zlbdqBhBeV6f+J~4DPrg4v@DAOSKpi)vqz59DP*iZW$o<_9b-s=3?DLb$R**>0pE6R zH?fFs=9V4@q$r^4b<9J@lzrO!?$l0sSMxj<5-Zb>m|=n?NT2|_D0xvAH7I0QtdNQO zJ(_tKvOPELAeGLPRQL_P-^s+nJ=g@#ux^GYXpUE{ZwY%4mtMy` zdD-kT#=b{X9jwOZtT&0DvoK!6%*}kuA9^XrlfM`1d(0Ud7u{|%Ik|RN`|DOdG1q6r z1{16?I=LhQ`+2%b^zuJvamYnhSH{cONPldZdayI)YQEYRt-cIG5jmdDW*H}iH2NvA zXgf!$iFMgbydF8^ABJ4ZTij0d*P{@5ob|{8DVHQnpw}3AsEltK@!{1nR%n)CuKi>d2T@PY-k9ymfU~yL<&J9ht@~pg zsbzbf*zY^=DK|Z`I8|Q)#5N!|KM<`AqzObvgjXQiA^fxJ@?7pZ4#J-1X1&T-$G6IG zwWs&6zh2u%wWs3C<-V>x*>NWm*ksh9a3>h2b<*&_(vjDOHIGxx3MDOMLMqg4%m2u< zG{pMJd}m0u7SG_YTUf2_@uAq!aCI78P`uu`56<9JF*em1t$8(4-nZr^QMU)K7yX6e z$OG3;c^em`w#}qp_VU1WdywMw^1$`3MHICA1J`3eavIco(vn!eGQfG;himmbayZOd zF+21mmL+5T*2{mEFA5+U{qO65&=u9G-(S%t(!U9u$k=_u#4Agc&UD^ zGa+fiXkX27H zll;60td$0~ShuqcVcI}V-QM<8lXBOjVC{hjqV&=bm-9K2MXRc$TmK#(B`Ad84-00! zBIKOUPopJ*M<^S2;j|FIWpNa_G4`${Qu5t?qnCl{`BrVg&HY3nNT5$=N+?!)N!!&q z&I0Wm_pbgc>~fOi&LgRM{h@bR*%w$JOb}s2b~jwpjC9GeUhL@tStLxM^@#0~9vNmk z!=bWPtm!2>Ct{ZaWhL_dg=sbxtI`?UY(s{cWdi36hm`YjV#_nu1YR2SRS^ z!Fzhk4da8dp7>^OPI}yycYu#0iI%6cHuUPGL#>Q(>QOw_6w1nva1Rr@{_#58*rSS#BR!2%5`H^JUW8LYM5t6CBi-t*er=)B!pCRzmQ8EXmAzy>l%Hj7up{f%TBR9RMK}mW|MUBQmIAG3NCQ{u z0~@L-=DVK_(`hN3LD;F!`p258yoJnVXF-f+t5AL#Gh)z(``7@hIuwzYQrmR zc)bmOXu~vFnD85H!#*~A?<`~gk?l`SGvA3e9BadwHoVY=SJ-fa4R5#MRvSKL!#8dC zfenw@aKLnv&M7v$(1wLJth8Z+4R5yLW*gpX!-s6R(}pkF@NFA**zi*u#-C}@_1f@s z8=hms`8NEz4XbUq!G@b`xY>sH+VBY*9d$J8PZ0NV)*KN4UhBw&odp7*J z4Ii-K9vi-9!)bOs>dNKMGj=^bWWz&Fy*eIF05^{lrEW?MDl)L}pn=caZD7w}?$3;U z-6_4hNBVaqeXvZvWhs-7X+5lf9K$B+5tt0KOO70fdIn~UFN*aWqGWIRR0(`9SQqm;?N zf}WCJu0`s6O4%h}PJRrmb5 z_^R#UZ!!5O(IxNhvJl^;5x(=Gab-l<1-N(rmV7wrDq5MOr<93bz9l{>hr}cKmhh~6 z{AaIRd3J5ML6z`3-J8$PE68eo_##~X9U$&QBAml&o8Rf zpQNiuOA)`st%y_N!&DM}wIVKwN6jr=rU;`J6a|7cB{=Y#TT^ah(4{O`Qycz*UZo|K zr4bejgXSy0s#5z}5VT=YK;n_`5=P-q;YZ;vNhnuTbWCiYICtOpgv6wNp5*=m1`bLY zJS27KNyCPZIC-RZ)aWr|$DJ}h?bOpIoIY{Vz5Z6Eh{c5UB05M{E90pR#sM3f1{>0 z5WMQ@RjaT0=9;zFUZ>_%)#R)y4;0i?6_-lwuB0s$Q};Erf>Je!mQ1^kQj$ap5>jf{=b z56da_3cf0J|1H;JTV!0~UQU|jxL5G^8rz@ro_O86O#I@n1ovX?Ek%|D6Jgeb?QlKSvM87ZZSbtSekQhK$|E6Kmfdw^aorI%W)CB_Qvr%Ely zPU4d~bxJ1VQx}~kYC5eXZ5dN#%<-x;W`ttCYSgKGEhoN8zNO5PC$W*1AoP?H9Z#uB zokwXwW)6_@Nehb%nXU6Aqp9R;lCE88PfmSL3DqbeZN0_i)ooDPv6H7R z`c6@2h2wMb^VRC}YSQXG#op`G&|wOrhLiuVo}Tn9>9hZx^rnZ?tEP>bHgFYj)extw zIx3*r@jc1un_U!h@;@yc-&fE7<>Xw}N~=gWKpz$gIbYHuom%Wl&8hD*)QoU?z14RW zwJP;xMndV|ReH3LQL~gWQbw&(9fQ-39B9gOMvwL+xsn)Vd@y5MC@_T%IE1|lKfkF|&gSBdxJJjbsld zzrtj*-;$G6{j?eC%Xx7YqY$^PD&X#8`vLjSVtZ@HWyzm5ds&J_Ut+hTu@w7*;9jl0+WuC~8N z+23_;()`k9?#x3GPbjc&-~JeK}L)U`k?&MDuWdjps?}#aHhxMYIGmf zCn`B6CnqOXe$&&5OFVir3YNsV)miE3iwoeNd%e1exeLn*`6;!kdKEu6K6rV-?FP8{ zC!hcMK>_b^|I!!-&A;Q_j<@ksGhgz_+~wSSQ@T(7$RMZxp=D*v4D z-v6|L>tB@XtNnArAK#+?S(|^<10RkcF}imB>egLf-?09MZ*6GY7`n0Prf+Zh&duMw z<<{?g|F$3e@JF}*_$NQze8-(X`}r^Kx_iqne|68jzy8f{xBl0C_doF9Ll1A;{>Y<` zJ^sY+ns@Bnwfo6Edt3HB_4G5(KKK0o0|#Gt@uinvIrQplufOs8H{WXg!`pv+=TCqB zi`DjS`+M(y@YjwH|MvHfK0bWp=qI0k_BpC+{>KcO6Ek4G5`*U7UH*S}`u}74|04$3 ziQP4W?B8AfSk8mxfZq9y;9F$LoF6iZ-M*Xnj$BLJ)Z?4mzunw7_4wuvcsKW(dwhSl z$G1FL8JV6uYZ>`1(kHT}ZpO$-{CTAguW@mCWl7c53j#%fa`>UxFRCrAnYZkU(&9jF z*`q0Mc+_&!}WE8Vq;m+tzW+$!l$R#71V7|Zk0AZqhN6z z>opd21qB-j>P@TLP)8`mvaYPG%X6^@^t?zN?XK!meeS#+g*)&@!_eR(BCFW1F#!gsk>1p~c#u=CgD4_bbS zzeUuG!zXcg%f-};a3_RUA-hr8K?uJ?ILLQ+pNIj<;)4aPup!stnXrRd~ya zDoZL#YrH+n*;RilN&{41dB9s-RZ{A$TJEiOc=Zy~B+^}laek9&Kegm&GVMTeF&Q`6 z)jPkORn>Gb(=trW6Yt8E6X0`$Usb$wOqb8}>qxrm+(r5?Db-CO(vLS-D}-6JaPCBN zVjSsTr#yblcyEzi3TZ`=p-JI*|D(o3+KP&*t0iIy-J>}eq8%5mdyV!;rI&PyYE}fL z!fU;0rB^Xhl`r>}uB;BMKJ_1`w~VG{4`M}Rw77`Y;524wu-=uWE351y!O?b49IZ!G z>4#o*ydC_r1=$O3T{GeF-?yBX^Mk`lj~;vLYw0eEI_K=AGC$QWy_iP0dMW2+GEvno ztu0?!T~T_uGY&5;DX$GI4V*b`Qgw+Lhz*%e_*dfYKhUiPmL#fy(-PFc`JVkr%?Z_S z%rWu;cY2k25|bqY{rsNtD)lDD`R;#Gj5=w`;OdmZLFp1k;@dY$slQ{sW`}VNjaNeh zNopu*3|*L@hEC(VCZ&1k#H8sXcYD;ZKtDC4B#HDBm1k;vO`q17{ZYcqSi>9$aK*={ zc*5XP?MiT|1WM)_6t4zN^Qb{nk~{jfChm`Kc2~z0_9^HuY3(MB0I;MlX}Q(V`6>II zytSOJ)E_VbCvUv(5kq|ahsUbnvs0T*NtAN@Z|uz2brSq&?pKBo0k!)_k5e?W6`fh#p$rBZLH)LSZbkUC%6 zSN9*(M-3`*QwMQU2fDpTxpHSJwFDC`SDz@=XMWU|){ErtGH%9vgn7r#PZaF4AsFYo zHyRe7%Xu-zNvnVVKB_-?>_0_XaD1Udt9!DPdLHxFFGz@AU)`Sis`&YR!uj6j<4k?F zQbRvC(1o6)L|1?1@+K;8Nq^;Cn5?|e#alDHMYWcpDQj(#kqc@`;E{~o8&%x%-G@%@t4 zZify%esd{8`b!yWoIFS!)kLKa9qA@b_Tn{N{Ym@RUni3*Pi z*Oe%BD`usgrpcG-A5I&c%QB(>v%&UL3NH6Iw?yW13TrdLxd&{Xi z1Z14Bavf_KCLDG^j2bX4Ne#F;p}?j4qutMj$D2B&Zim-&)t^JF*RMb`(3L2N?VgA9 zp%WA6D;KF@3k&Ek^VBfc`O4HhnOVblL8e^86V&iPD(zzk?PIVS?i!#>uf$D{iS%#k zb13y`_wVNZCuldnLJs9*1ZA9dWBNP&yu=<)=cjZ;_V?v1xqgNDi=FR@;JYwG>^|U1 zajO)@mK4U86xveCl>W{AkGI?J(BWq=>i>Y5;)K`vC+!l(*@fY8w%OGq|1KF{Ih1e> zaWlsERYMj6skoRm1Nj|E>M^dzzD~6AKg4<7vbFWlUo18OFRcY|4-h zLpxLF(oeRs6M7rtJ|-~{mmaGaqsUL{G`C8fV)sQU7jaO=Rx`VGjSWBk9%BQhD-Oa@ zC#lp)Ds&-^>Y?cgYUH%L)JWIus{3q1qSW>N7}6djeX}2ZGl{;Ls0Q7fT&-!bFrG1h zaey(v_+j26e}l;1p!v2R>d?curTyss>el_Wuh5P$$*F_ITTyR_DWDDny2i$Lh+95aM;2Ttu*(=%LpIGl%Y{gmgvglZ>USHCFLZ%Vv)(e0)u>`AZ3pI2%J zM%s$N{zKwvgRC_e2Zqca*x|GWhenGIDD_9oqc)99AB$K=F#kGzOyb;gkn!mSrCxPt zdNO1E%?Yi2_s2EIR>u@Z7eu8CO}l8(HNOu%GeM1;_KoOquI16awJGl~^7|$2_6My> zJ&keN?TO~TEB~O>Z!yl?XWDWJZTV}xw&fPatuIS=`}<10k8#pVm~)T#81>lyP;k5VVO8qHdferUe&1l`l!_)F}g66srs z^UeCuH8N3+4D?qcOOol+{nW^=G2dS6bQ?cfSp%IYudR~Tp;Hso=s>A!bV-S8^t58v zXxGz7)@6QM zrV8#-&5pb~Ulw+oqq_XqUN!iSe7vE{f8^s09sak;$B%SHii0+};JeN-{GmK{)Qi=G zm<6T6AS@^flr2`*@)gOgg?nc>xN3`{{{b*X*tc{w}+L*u_QVfw@&R z3t%)y6x>0Nv!l^KXP`BFU4aekD>Pi!;#1xt_TfT*hog?g9rEU?5EC__%Kb0~_J{PX8 zE>)T0I;X0#wyL6ZPN1g3#8RU!)%L-f8ki>83 zj#*S$rkg}b&Z=TWzX=Zkh*YWjrJN^pj*8B$%`ROQT(P3Grl6*@7GkJVV&(@bE-t5% ziYgXW!nb0-Gg9pGs;aIGR?mf1E(wrnVG5;+%bcQWO89(N@`42punm8KtTHlJ;YI8{#E8#scxLDh2n=VTL+@7t?@rvs7y&4dY@6qz+O86{UfmROHZWK}9L@ z{F9^e=HwSu(~4eHm z>RPTqEG#FTT1inb^=*565sSsj7oAsCRFYS|tcEKOl=?N@2IiLO_3<~_LlMN!&ee&RkDtBlgoV z^39a1zd26P-%M*d%zWE^femGLk@zpcNZKrZb-0y4FNUc}4acy+)cKcki2pi_M`QpfRX$lAEPCLe`0^%0hIjx93$!7jS+tjW28*aVZ{9vjJT&l6rqn8q07Ja zmwdvXN!NSA-@i6r|F>d4vGASA!HI>x{%_^*U!Tqin}9t_pRfsd|MhwMH>B{tyh#+~ znDv({Dn<_=`)vOY;s5zN-?{T7^`|?nJ2~j=@e9X)?HxMAMNB9cz4rCjyz27Tu6S)q z58sT(FC2Qa^%JGexYmS3RaWPm2w#5t-buC%vurrih8Z@TX2WzFrrFSI!&Do(ZFsbg zq4Rq-Y_;JVHauj*7j3xThR@ir#fH0W*lfecY`D#a57=<44Y%0vHXGh(!v-5V@vpJJ z12(L%VWAC|*wAmo3>&7~@N^q`ZRob)(O6UNzD)S82s(Gz_LdD>ZFtCr`)$}_!)6<9 zwc%zPZnEJj8y4EIz=jz%Ot)d04ZSu@wPCUi-8NJ67^?HGPnht$A)*?=`K|O{LVnuoY>z2TssI^0Ps5CKFk~7 z&j6E9R9ctjQiFiYFk8mDR0%L`2)ujz2%N`-=uO}Sz@=>5mx2pCG*YPtzy-dIkvNr? z^BzpW7?<(_zrZX6SED%3!bn;HVC-n(#NG|e!PJqi==^LH96vV#Cyp_AI&kh-(!#$V z*ou*~1b%OvDeq<=dcbs8fp=rX&lX_9cw?UkoMq!J!23@{R~d0W0PMtkB>6c_snalu z{G1LfJ{=x`&;*z;k>Y_T0#C&hh#%nBXaq~ZmjZWUq%6CE?_wkm9|6xzM=lThEZ{dW zLgzKWUt`42R^Z4plzNPp8@<4DFcNWNV zux2J@!A}4;->+am1XP&M*H9i5q}Ku zo3qhD1il7%6GrmC3HTbDjxy{;R_WCo@+mlQyB`@O@W+4y&nHgsrNA{92`lh+8yEOC zM)IaEpqerJ@t+R#V-A5A058J40bU3!!nA^y0H^06j|-jwtipT*UJZ=TC;!x4B9Lo1 zDj+X#0x!l$9+m+AhLL*z2v`SmOz0`F`cmq0Jn;ZeTS`9#KOOiOW+Ax1GcKp!flmVt zDB_F}96fnzCPw0~SfPi2)u3u>axM>fUYuQ9|L?9lY#vkz?5=hp9-90<9=Ys#%~1v4wH@lX5c3np~L6E zd#*6}y}-;0+8cfXz#n2H4=uoPRkSzoG~ksO$$tQNH%9zy0bT<$@m}yXz)vwP;GYAp zt2KBXFg9RtH*gb1>Pz6+LFyO(Gl36cWc=I)jJe7#FR%mSK9xAd?rPc!xWKqorXIb( zKC7uC?A^dTjFeH}6cji}|C$C|^G(WvAAvu_NdLMW*ol#{h`iJYjFiy}T#MO^|E<7d zn62PyEn4NTC7csuorkQM#|U%Z2AS?*lz+pd6%J23o!p~L)!x2w=fd_2H-x7ghel;ddJ2E zKJZK9U*J2xGGnR0`|mYl<^#ZA{Tf=4*1f>ZzcF))z(W|RFM-LwHMqcCm{$B3Y^7Y7 z_rPxf&fEt7cmiz(*l#=I2zWAZHb&~S8u&a$^0{B|M`<(o*$?dVn2FyDy!CNTeX-vR z{1Zm{y9J#5gu%0b7N!nA0`J=a9~}Gv;Q2eD8+ab@SGy=L_`Sf>c2j=vEMQI>x7rku!F9D8!#o%ec zGK}~an0d&w!A)nZ<0X~Kidx0O@_)*|RpHd&#F9hzx$e8d9Fzz$z2zzv)s?#tM zR_^J@y`#@*O9JJdkKh93uFO`(B7t%bM(hRdwsE-&Blk_jUZC775&r^*es1gqiVVK^ z5h(W^1Q#fG8w3|9_YedZ_%j=qy9jcRK4*h{2a#nJvb@yloP3GDZuz`pea_8lj%S3(5)7nyGI3GBTmuut#BUii0J*caT% z*bRKgB%m^W!5Bk+obSTB7)#w<-|pWs#!(55d-VgjkL&tQeT{D_*>P`v7yrcVe5d`D zZ_4C+Z{picB|G1@{f%)UBK3)G4niU}o%% z;oZ_i&C1NeTV+?Qv`jN7Z&cL!e!tm!a6_nM=l_4c?|IJXF#CPqSu<;`S!>OjS+n0g zbtV_D!3srku(Uu9UdH3MaqW(aBEaH$>Qr8zF2HO5^)>E_a>t({ zDUH+5r_LyL{~o~dmh*aQfqMzzzw$w;vZb0rycSjqR7>ITPyW z`h;hia2eO7=)d4CeT`1oej)qU=`#AqkBbxlKeQGXNBl|)elEn-C05Y*&nbQCVClh2 zY=hUo-#0P>6-p+(6^z7OdkB>=xw*DpBue)iuFmXsEx@8&i5BfkyFFDccJ zSs(oUZbgac$D03a;+9cMIPQ3?+t;|Uake+#nRe?-RqC}n?L@WopmeySF1Z>$ zyCG}QxJt?Atmg{Hb}GwhxG(9-4Y?X}P2{@BUP3wdK(-)XPtH4b?1=X$Q^hc8(m9264DlNY# zKMo6+Gz?K(K7I!=|Ev{~Fh1>vi`K39koLl<5hB0F&3xz7kRe0zid5K3&FHzN;8MK3Sm1k3j z^_lBB_(UEBYd*m+T_ZJb-dy?l`QbesZB<}kpb81WdxIk)H17rt8l;8}9jYF9-~sjE zgAb}%5BFAM#*9(p#*I@62?;7C1@EJU{g^p(rplZgq->7_s!g-HtGQ#s)q?S%>e-1Q zYI#bq+A+JE%1w_@%Vv*K+mZI+9Dg&F*$7Psk#I3-qD!wSOoE@d82(`%{6fI*EmrC< z;Ex0T3&4L3`0oH;1o%rX@cu0@zlAvVFu0b^TZpv|)?dYMKnai3Q*ykWlFtVzIhm~F zOoo!;4N5K@F2mpd4#0Z@zAb!~o`8=6{0P9u1AclvB~P_evT~4;SCWJ7)T$w*bB~;QIr96yT=; zej(u30DcqTcLDxwz@yKM&j5c4@Wo~D_u}m!{m?=@T6h92yoeU|p@lEeLUBD&KeZEe zVUVax$)YZ2i28Yhs9z6D8T?&e$z~2Y>(SV-<`1yceT2Iv4cA_>9616v3R6&NQ z&o+oUd-w{xJK)KII{|+e;F|!x1>o-me9wBKhP4xwJV?}nWVDqbDu08hPYz#!FK-&G zj^uhXG_+SpuaGc(tA8us=FPmlTl6Wb5Yj6$A|fm-GBhYCB+S~{*T<)Mvp#*ATAdZb zBJddhBk&>s|HhH*`GLI5zXP0Lh55_N{l`QNMn_K;3|!rm_j11OG6>heYD}9rf?- z=ftglE202+YfwnkfXK-3NNXcD(9p9%gTLK+>#dFZ6GuMh%m1U$i?va?3Rbd#&qKqb zA|fNB!lS&(RlswfR=WLOQDKqcQDITN?`d?WvkUZKZRy*(Kj>%sp}GshHERz~puj8e zPq*K$dlXn46&@L-iO@J2{sVt&Si4}N5E&I^ZPdGW{rdGmMA>s|=bNp;{^96i0G{8| zySJvYaoO|Gx;5$s)M*26N?nZtd#tQR`+mw|aenAyJHq41yqCc^=ZGQ`-);s=41D zfrp{JAj=&)hK62wZngFb8Q8r}%^IE2L#UOlM}%GJ-x^A}8`%A}n`#F0d1w&CHPV2C zf8-AYEcljsbp~2Pqk_6a*2*5^xk-IJ>UE6@0Usk=9+UrJx(4od=@8l-s^a=sw~z6S z41*v>gm>yz;jv5m80d(QZsnn&ALUb2xyE5%Wp`Rh-SnUna4vQur#tdr@#oUeM#U_Z z`EuzhsDeLtZ9m2MbNAhMpY}&)#r7%lJzkpDQ_YVLS4&bt)#f?jDsR~=)nz|?3fQ^6 zABh?Y-+?~EG?dRh_ncb3e7Rb=a;3`5%v5XEtkJ&0rcIl)Kls{fuPOQpAMAcfEr-96 z2VY^|zJ2Qb_utpP!O5=*)mLAArB0qasm`7~tG@sKd-cEy6^%R@IZus-5gogJi!-mZK^|K2say6z1d`{ zN+ab+jT$wA5@8>+A^$e=Z0_&x--@3sjT(72YSPNfqfVWB;14(S_HEwWr@4PUkGd^y z!*!!3O?`Y&x1NWWzn{OKYV6(0*Z=O?{`F9y&TY5d)3`}flo_rJSV z4YvO`&ztJw>XxRpYt{0@I-p7OyQ($DQ-Iu!YxM8e_zs_@e*XS`KENOSxAOCA=I7VM zPt(^J$%53RiM~{6b+H#;6BXer>+FWIvc&tQ4(kI>c_B840`9qb2-!_p@b@pJn*a@u zU4MN6Ub`-9pk&YgKho8xzgFMG_ZH+ky}Z1dpk!`_+@e;kT37)oSO#(mE;N3=4EZ)> z!*P84k0kPk?P7IPr9|F(AXEG;t5&VLAM?(RqN1X2e)!>sZ!!0Lb?)4`Qz#2BT)0q# zb?M2^KKpFL+i$=9G|mh8_2|(9lCNpPq@mlv>PnB>pWz?JniKQwEn2i_ijutIHg#2! z=ZFy_f;uCi@?F?RT!eMB_2{=C4K$!OZNX(#Y-;h8gM1bez=d@d*`kdHt9SmTND(YSMLPMkO) zpMLtOz9vm3!{^bTA#)dg{PD*U$lb4K^Ykyj{31X7^waqdKKS6(ufP7f5Pkhj7|{6) z^sN(cSV-7Ei$DA+L0@H=_?t|=n#?gVnfQ}eEX`+LGaEWs5+9R+vzUxA7n99BQ{D*v zZ@lrw0*s?KWMUp^*}HeIrh)Q-{U+fUV4q3L3vr}QK!F&FsET8B9X924xT=}g@B@82)fmE*^c>(8WtHh}U*J>eJ;x2->j#C{?Y^u9>P zcSQW(6!F_5(q^~FeFsExPKjK+bm=H`h5BEWr19UiYgb0IX3aXmhhGSLDHsn;18ok+ zfP5uA91G&k&m8|RzW73CekRY!Z{kZ?AT7k3{HKg&eJ>J*-w+QzBGMgO@Ldoy=&&C& z>=S7P8d|(A;{BS)!p{&JC@o!4735Jz;}2UeCKG>?%~+W7M)ZVwKzX_U3z0s@@tu$l zz<<(!G3flRNPEzb_z~hArP%L2EYfzD7Ax#5Rw*^aJ}G5+L5B_qHJe6gAn@<^se^`I_#S3Y;Mxr|U_V)sKo{|kKPu8} zr$a5Oggy9=IYW&7r~G3+5@s_VEQ!C7bIL!*gK|aLFtkv|DQA>>>V_$)7fge{6d3>- zA|e01!Ee$Kcu1t{dkz}fLKm=4F24D?I_+pxlExplI0Jk9oiGjysb{n;mC-?YcO4TW zS1ieYKIgnZSlSuaH1s5Nlr(%U5&;^*K||g-*BV#-{3D($y9zN4fByMr!8}tglLnIw z9hHrVp~aPsUw{2o4!^omUYrpr%aViSxrxCVvEko{4Eb7Q&Ap-i7igHxZ|&?dpAHiu1W0vf!w zJ8UbOnO%VfjlZ|IcbWai9M5_F592}o<$PeqgZjX0qbI~4c29Oc|FGDm_mH(y10@SI ztON~AF|eN_LBlZE_`iQ8LK=)dlLn*Dv`OvW2H)QhX-OKuf6J>P17W9--meUQ*n2Ji z(6xp1hp2Og4nqsafb)Utm>61E5`WssEwe*p{iEF_2Q<708Zsw2@J}rgdFU)?I4yEN zXrMmRCPl&~8GR-VMxRN8(P!Eu-yIr%oFpoj8dA?VzrfEb%cQ~NigXxVaixQwNdwci zw63yoMmJgiNOyU88fcgjC>M**$VX6T(qIJ*h_T82F8WNHM12l{F3=_gz$S5iHa5v8 zU!M9#RLoR4o2O4%RohTQIAUst_-+|5qj7b3JXV74L44+*N;BwrD{inS!^53mnw-y`= zlc}%7o465oLkn#`?LF5uw40o(IJYtFniC+ef`%=#x=G%Q?qUZG74`Ywut^ySA+lh6 zFPR@7Ds#t#O4`F=^7Q24^2JAogfzJN7+RlUlb9;QANF3$Kk!*d+=&-U;zYcu59G5M z6WVxJ|Cs&|X{7wWF~6t04jQ(DhRriU19XA<;W zyU5PjpaHtD2{gRo)MwhH%*j1vWlB$3k`yG*CI-u*2_f<{Xm}hn%mEEEK?74oALAd; z4WvKVAL0*L(DDzto<~|9fBbQ=+wGbjLj%jJ(LtIhTZBD*c$4g%*F|=Nh8>_m>oaJe zO)~nt8a8P~N{~FC6fDnxhJ~QvDbVm3t`h)!^{zm@0ckkYU zI1o>q3Mr$3<62`vd}xz4(QLZP!MKalkdtou9R9E=@0EO;jP?L>i22(SC~>!N4`b(~vG?;AYV9EBFDO09x+Sd10j*^{^1!I18 z_!yj@Z8Jk<+cRV2(|5PZrHdDjV!W%o|A4cUGH>3z^Ejggk|dXo3(BXOP}EtMp&;O8$mUVnD~hiyT3 zS7VQ|@X<#f{hfH?+^EjfX+uM+R;>hQ*Yr4W&Y;ZG_c3%3U*b=hC!Jgyu%tdvN2m{G zOjuF|>6@6jhih-HpCK=QYX6hEMfry;W#YWpG3qHI;xc2#3_T8{fp!&p%Q9@(Fnyn6 zKpIRY4QAcTH6?v)%02O9Nf{z-M!tBTJ{5g#*ph!?@2NA+87|@);zsbN+%r>_xZg~g zh#U8uarRE@Z)j+!1P2ETPN(Q`;B&$l8dw^+GGk)&g!)0;O-VW8nt^gfKagW*_BVh( z!)>=BS0!ot3Az^`1mF!G&Z9oR{`%{h2J(mdhR_d9LrhGJ^zYwa%NAnt8h`SdJSQ#0 zn|eU|!~0w#P=4rZ=R*&u1Jnt&OB)Q_e@8p>JUu;wG45H|cRCHE8S`OWrz%PN4@L&* z{}{d!pTfdIjSt3F;9KxivDOESw?N*s3~-JjpIM)o*Q9}Vlsu*V-?(w3tY5!g&w;PJ z@`{Gz9s&4t8n*30%#kyI`(E680!TCNQPucOL*h&ShxQ-(xRBS>HH+nVV?sIM7;ry}&rRZIw#zZ%cyK-ky)Oc9+D*m@tC}?a zMow9}$}nj#nYfWI$`Ezoi6@>A*eu~Z?V5<2$%LVup)F#f{BTXgOx#J=s#UAF$G93_ zum7{SlSYld@&Cc^d8EPEMMI0BfhGA(+l0AWuM;R!oNHbAOI&$P{5dwphhSWXa!*+z zPO8B2i2jo@B}zpMPyM!1egWn)6RxW_(nk)n0ppdE;$F04(cHJMEgNo$N9*0Ovu}r=O{U7L;UjJhLo<~~9f0l+0mWB?N{7TNDKLnK5oR$T*0{fCyl?6fA|V5$S3A&jS2mG`ah(LaXDtn7R$HZdQ00~ z@__nEc_;qV1IXhVbpKan#+8DGP?i z1gMEtIoZbt>4LHK`}*$2-)@SMh9PLhtvC4cJFQdLua51Kml1iqhB z>?rX`U;pRIYR>lDoF%^fg8q>HVrkkl?YrQe&gOBw+gYCYD`lD!PjQrP&a#@btm!Q4 zI!iBS8RRU}oTWHQHPQRGB!4L5d8fx?D>b_ep_Vv+;<|E$tm0ZyhLOQVm*C7bi~-W7tEMK zd&G7|VsH4vpEOF>!hy6lu2G{#7p(1)q0=R_XYe^M!rp#|x!`-)rBC3WXJMag9DLv~ z)W@4xlsEj1qA`eZFiyt3&|vJ}GUm;A@v-wF1=y9t_mP->K>e$wyJ5q#(Ps(mCv7Cx zOT>ZM#4wyb|L?G?=V5b?!fw9Ch8Z(uypeG(##gu}&iK#=7eo$$_A11By=bSguMmU1 zr=i4wz7yA;oF8e|ITz7Z)0d^6!e{)1N<2e6vUgJ8K{nC#nPn`5?-^tOU<1gc7!?AbEcpqbBn~PnaR{EJiELVBZ z{c}A?AAy-TFw?#>lP8?N&Yk*1UYa{p$0fKQ&NS*A;$3GPanr%TfpK4+f#BXgW4=Zn z8SiDBu?NZz%FCn|=M=18W8miwB_0MBjz4{1;==i7$I=A7r_Go%_vB6g#Ni*nfpJg9 z&$T=P2gceMI7r9Ooo2?71O6rPfSZo8%H0M+2Fx_ z6Y_$I`|FG~F~-4I8RJZhZ!k{A7!zX~jFB2gptQU@Byi8 z{OOw^4iSUzT@Ix!;Ci3_Iq4=YjJLr$P?Ng^5eqkkLAEK(K=4R{b|Z0WBA;g zHafvL6JvdhlchOvU}w>VjyV2E^!?do-YK&|Ui2?1gVaO%{49wFGx@fCJ;D71AH8E2}c;SVij1AErCm!TE*VSB8bKjJBkQcN^e8$B1 zEzbcMov2J6S6tm(aF`6E$S7fam8+!Ka*#Y~#(@6*7 zm=i~h8ud25zb)g(kJtOaI3ua|F3j48JSRWMf3EK+3*-m!ub9{->K%b>xz4ra`sW4W zVnd+!dL78Qo^ct*mf&Xz&V6gT&H9UYFq0p|qvF^QKh9gU9bA{9`Oe7n@2-`+xCVv) zafY!(#wGAQQ{nzAaY#;1)_kWu;5^8-jSR3a+6AMlm?ugRml*?DPKA$zx6CM>dAi=3 z%8R@L?-!39JN7Ncc(_N8FZ>I~g7G!X%eo)>1LQmVXQod^AI+4Qt9}7LA4OZM5U)6g zzPS{*UefYM9b{Yd?Z|KLM53wc4iO`AzP^Yil;q2oH& z>m1Lu{v&=HgYVG|W#4R*<4hdzo&dpn1!Ta00U9^rz|1<-0oJ43&`+Yh;JHNXg=eB& zt`(}1wEd<1!8!VIY_AY|@|^Q&a~NB|I}3D-nR-F|n8*jS$4h^iF%|mlpkW0%t!m%I zPxo)+nS5m?9?a~I^AX;Wplt)ss*-lf9LI~iCf&5j*n3&~C;Qg@vme+RZT~C7!}!4X z&Vk_jj(V?{ej)dqD35=kZ{0uXHS;fJiS)8fX4*XJ9Ce#?QpR|Ghi5PFy#Q?=Zjf&F z&E!S;EAriy{~QBm+Fsf|jx*i~LHRp}{jev|2KP^HH1WG89yge&U)Qs5SH-K;3*Xsw zEBn5#S2}os?1rqWkXg^bcmaet2=`1*!)InmujCyp>3{g%u0>rf;j9+ht~5a&LszX@ zwHYy*OR!Nt;9SVR)~;P!&h8)vP=q!n=H%q)`>0brJ3Bi9``Np4b9420nmLT)44eL; zYiEq7;ruiAS${>p-M!rVZAmOw)%m{*2Kn z+A=HFO{F;iX%%M^p<3D>~e94?u@=lpXKJf3J??Bl;v~!JQOmz5$qn+zFt{=I6|d=h};V5nT6i-5G#&C- z`NwhM97I2eX~*N?+TY^(gKH12edz0QyATZ!=emJwrxf`*Va%nIezvZ=%R%yn7U4I7yjiwDZ;`VDM&m!*f}itk^$3C~!^UB7*;8lE|> z`0lmpc%u=oEc(rBHJmkZg*rDoYg+VM*J|S3YIOI8s=>;Nzu|Zf%V4}cW}q5?>j?bq zjn7Q4S1*EZ=%)YCAn_B+AU;H@j(4x?u;n%X_RiYY$*5dJtTCr$3QN^i= zsNGA~X{!RTUD_47Bi=&;PD#Km9(^QMsm*Y_A14-&lK~Y2JlQu> zd;HSZmG+0~ep6lAZHG6lGq=?x`OVE?cfgPjlXU$=v^c?q!bw;LbVU7F-6!6Qt(u~K ze_W5zHOZMI@Pt&10o9Yx<{$4_;7o_&idpm7`MY?~uT+|1bV$}tKRaSVn_ zfHz$NZlZb^TpA6msy=31_>hm~;VW{pGG20X+YQnigPskRS0s#^@N_r+j;EBPRL~Lw z%&v@kt?GHzd&H!s#wLuKFx@gOVM1bRp!ejI#BQmh$Hpeaq_$3oADuEWbz*d-xlE z_KXgR4haj37|>_fFnr)h@k`mqvrgdmor<&Evpuq-vxj9X54>X<_xGhh>h5RvzSzFRzS_Rdo@d`~-)-M-KV&~{KVd&@FSeK1RjzxkN3LhCCD%8% zZEiqraBkn+?YYNuOL9He2dtmAe)0Mx>sPN|w?1$E?)9K0np%!mon%eRO3#{~wK!`@ z*6OTvS$SF8vvz0g&pMQKT=T6YOJ$RHp4pac-|V*80oi>uA0Nsdo1K(BEjvA%jQMZ+ zF9-g2aiD1v@7Qi5!zPZNoPeKPPaPROebU&8iI%~mQ{wUK?TKSXhD2BfC&rAA9oc3| zY~qxWjt8kDlXSf{vD0F`Ye)C1R{ai5R=0=lAO6hrTi-Z$Ws)T&)_h8xo?1IDWnzK_-N4pboE1hpegj)K zSUWz>VznmX*SoD&OJJbI$MoaV4Hn;GK@)9aQpQXf(e^=0AewHII(d|DijQyWR887Q zpfh#GND|O8sF}~b79V66n3iRY#7>K!fmuXRO*^Sb8$0AmO}od5s; literal 0 HcmV?d00001 diff --git a/.venv/Scripts/pytest.exe b/.venv/Scripts/pytest.exe new file mode 100644 index 0000000000000000000000000000000000000000..b5e46be0110aba54641b90aab3544c203a7eac61 GIT binary patch literal 108422 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 literal 0 HcmV?d00001 diff --git a/.venv/Scripts/python.exe b/.venv/Scripts/python.exe new file mode 100644 index 0000000000000000000000000000000000000000..2cbe63d40ef371d0892f606e2af12a0193579ec5 GIT binary patch literal 268152 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 A=l}o! literal 0 HcmV?d00001 diff --git a/.venv/Scripts/pythonw.exe b/.venv/Scripts/pythonw.exe new file mode 100644 index 0000000000000000000000000000000000000000..e434afab00f6ced090d2e8d11046b620404bf696 GIT binary patch literal 256384 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�h-BS+H`{h3&sjs|(0}GX0)dCZld1O5D~FNL0mv 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�d9qf!$`nzTs{H`Xmdn6}lgA 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

WgF^P|k}z?WDyW%DVp@^pDN& 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 PUHnN(1L))Q=<$C5h5X{? literal 0 HcmV?d00001 diff --git a/.venv/pyvenv.cfg b/.venv/pyvenv.cfg new file mode 100644 index 0000000..13df7f3 --- /dev/null +++ b/.venv/pyvenv.cfg @@ -0,0 +1,5 @@ +home = C:\Python311 +include-system-site-packages = false +version = 3.11.0 +executable = C:\Python311\python.exe +command = C:\Python311\python.exe -m venv e:\Documents\Python Scripting\AI Snake\.venv diff --git a/README.md b/README.md new file mode 100644 index 0000000..6a67c07 --- /dev/null +++ b/README.md @@ -0,0 +1,60 @@ +# AI Snake Game + +A polished implementation of the classic Snake game with both human player and AI modes. + +## Features + +- Classic snake gameplay with modern graphics +- AI-controlled snake with multiple difficulty levels +- Score tracking and high score system +- Configurable game settings +- Sound effects and background music + +## Installation + +1. Clone the repository: +```bash +git clone https://git.spacetrainclubhouse.com/your-username/ai-snake.git +cd ai-snake +``` + +2. Create and activate virtual environment: +```bash +python -m venv venv +# On Windows: +.\venv\Scripts\activate +# On Unix or MacOS: +source venv/bin/activate +``` + +3. Install dependencies: +```bash +pip install -r requirements.txt +``` + +## Usage + +To start the game: +```bash +python src/main.py +``` + +## Project Structure + +``` +ai-snake/ +├── src/ # Source code +├── tests/ # Test files +├── assets/ # Game assets (images, sounds) +├── venv/ # Virtual environment +├── README.md # Project documentation +└── requirements.txt # Python dependencies +``` + +## Development + +This project is under active development. See the in-game menu for available modes and features. + +## License + +MIT License \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ca289e4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +pygame==2.5.2 +numpy==1.24.3 +black==23.12.1 # for code formatting +pytest==7.4.3 # for testing \ No newline at end of file diff --git a/src/game.py b/src/game.py new file mode 100644 index 0000000..0564f8b --- /dev/null +++ b/src/game.py @@ -0,0 +1,77 @@ +import pygame +import sys +from enum import Enum, auto + +class GameState(Enum): + MENU = auto() + PLAYING = auto() + GAME_OVER = auto() + PAUSED = auto() + +class Game: + def __init__(self): + # Initialize display + self.width = 800 + self.height = 600 + self.screen = pygame.display.set_mode((self.width, self.height)) + pygame.display.set_caption("AI Snake Game") + + # Initialize clock + self.clock = pygame.time.Clock() + self.fps = 60 + + # Game state + self.state = GameState.MENU + self.running = True + + def handle_events(self): + for event in pygame.event.get(): + if event.type == pygame.QUIT: + self.running = False + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_ESCAPE: + if self.state == GameState.PLAYING: + self.state = GameState.PAUSED + elif self.state == GameState.PAUSED: + self.state = GameState.PLAYING + + def update(self): + if self.state == GameState.PLAYING: + # Update game logic here + pass + elif self.state == GameState.MENU: + # Update menu logic here + pass + elif self.state == GameState.GAME_OVER: + # Update game over logic here + pass + elif self.state == GameState.PAUSED: + # Update pause menu logic here + pass + + def render(self): + # Clear screen + self.screen.fill((0, 0, 0)) # Black background + + if self.state == GameState.PLAYING: + # Render game here + pass + elif self.state == GameState.MENU: + # Render menu here + pass + elif self.state == GameState.GAME_OVER: + # Render game over screen here + pass + elif self.state == GameState.PAUSED: + # Render pause menu here + pass + + # Update display + pygame.display.flip() + + def run(self): + while self.running: + self.handle_events() + self.update() + self.render() + self.clock.tick(self.fps) \ No newline at end of file diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..6d52cc0 --- /dev/null +++ b/src/main.py @@ -0,0 +1,23 @@ +import pygame +import sys +from game import Game + +def main(): + # Initialize Pygame + pygame.init() + + # Create game instance + game = Game() + + try: + # Run the game + game.run() + except Exception as e: + print(f"Error: {e}") + finally: + # Clean up + pygame.quit() + sys.exit() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/snake.py b/src/snake.py new file mode 100644 index 0000000..27227d7 --- /dev/null +++ b/src/snake.py @@ -0,0 +1,92 @@ +import pygame +from enum import Enum, auto +from typing import List, Tuple + +class Direction(Enum): + UP = auto() + DOWN = auto() + LEFT = auto() + RIGHT = auto() + +class Snake: + def __init__(self, start_pos: Tuple[int, int], block_size: int): + self.block_size = block_size + self.direction = Direction.RIGHT + self.body = [start_pos] # Head is at index 0 + self.growing = False + + # Movement cooldown + self.move_cooldown = 100 # milliseconds + self.last_move_time = 0 + + def move(self, current_time: int) -> bool: + """Move the snake if enough time has passed. Returns True if moved.""" + if current_time - self.last_move_time < self.move_cooldown: + return False + + # Update position + head = self.body[0] + new_head = self._get_new_head_position(head) + + # Insert new head + self.body.insert(0, new_head) + + # Remove tail if not growing + if not self.growing: + self.body.pop() + else: + self.growing = False + + self.last_move_time = current_time + return True + + def _get_new_head_position(self, head: Tuple[int, int]) -> Tuple[int, int]: + x, y = head + if self.direction == Direction.UP: + return (x, y - self.block_size) + elif self.direction == Direction.DOWN: + return (x, y + self.block_size) + elif self.direction == Direction.LEFT: + return (x - self.block_size, y) + else: # Direction.RIGHT + return (x + self.block_size, y) + + def grow(self): + """Mark the snake to grow on next move""" + self.growing = True + + def check_collision(self, width: int, height: int) -> bool: + """Check if snake has collided with walls or itself""" + head = self.body[0] + + # Check wall collision + if (head[0] < 0 or head[0] >= width or + head[1] < 0 or head[1] >= height): + return True + + # Check self collision (skip head) + if head in self.body[1:]: + return True + + return False + + def change_direction(self, new_direction: Direction): + """Change direction if it's not opposite to current direction""" + opposites = { + Direction.UP: Direction.DOWN, + Direction.DOWN: Direction.UP, + Direction.LEFT: Direction.RIGHT, + Direction.RIGHT: Direction.LEFT + } + + if opposites[new_direction] != self.direction: + self.direction = new_direction + + def draw(self, screen: pygame.Surface): + """Draw the snake on the screen""" + for segment in self.body: + pygame.draw.rect( + screen, + (0, 255, 0), # Green color + pygame.Rect(segment[0], segment[1], self.block_size, self.block_size) + ) \ No newline at end of file