# CEMU detailed changelog for 1.4.1
# Patreon release date: 2016-04-07
# Public release date: 2016-04-14
CPU: Added new instructions to recompiler: LWARX, STWCX, STWBRX, LHAUX, LHZUX, type 5, 6 & 7 for PSQ_L and type 5, 6 & 7 for PSQ_ST, DCBZ, ADDC, MFCR, FDIV, FADD, PS_SUB, PS_NEG.
CPU: Improved handling of XMM registers in recompiler. Drastically reducing the number of load/store operations when not enough registers are available.
CPU: Added SUBFME to interpreter.
coreinit: New API __ghs_mtx_init(), __ghs_mtx_dst(), __ghs_mtx_lock(), __ghs_mtx_unlock(), OSSleepThread()
coreinit: Added weak-symbol 'environ'
RPL: Added support for SDA and SDA2
fsa: Asynchronous file operations now support sending the result via message queue (instead of callback)
GX2: Added vertex data cache (cache vertex data in GPU memory instead of re-uploading it for every drawcall)
GX2: Fixed texture decoding for compressed textures with a size smaller than 16x16
GX2: Fixed AMD issue that occurred when glDrawBuffers() enables unused color attachment
GX2: Fixed AMD issue that occurred when glPrimitiveRestartIndexNV is used instead of glPrimitiveRestartIndex
GX2: Fixed AMD driver crash that could happen after shader compilation.
GX2: Fixed a multitude of issues when using Intel GPUs. Graphics are still horribly broken due to Intel's lacking OpenGL driver, but at least we can say we tried our best
GX2: Invalidate destination texture in cache after GX2SurfaceCopy()
vpad: Clamp left and right stick to length 1.0
### New in public release ###
general: CEMU now displays which GPU is used in the titlebar.
GX2: Fixed a timing related bug that could cause the emulator to stop rendering frames.