From 438b784f2d50b46cd582bf8c96f5f891cd05ffaf Mon Sep 17 00:00:00 2001 From: Elaina Claus Date: Fri, 4 Oct 2024 09:53:01 -0400 Subject: [PATCH] kmemset and kmemcpy cdecl16 versions --- include/kmem_func.inc | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/include/kmem_func.inc b/include/kmem_func.inc index e7e7080..e69ca31 100644 --- a/include/kmem_func.inc +++ b/include/kmem_func.inc @@ -17,37 +17,35 @@ ; 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. +%include 'cdecl16.inc' -; uint8_t* kmemset(void* dest, uint8_t val, size_t len); +; uint8_t* kmemset(void* dest, uint8_t val, uint8_t len); kmemset: - push di ; function uses di, so save it. - - mov cx, [bp - 2] ; size_t len - mov al, [bp - 4] ; uint8_t val - mov di, [bp - 6] ; void * ptr + __CDECL16_ENTRY + .func: + mov cx, [bp + 8] ; size_t len + mov al, [bp + 6] ; uint8_t val + mov di, [bp + 4] ; void * ptr cld - rep stosb -.endf: - mov ax, [bp - 6] ; return pointer to dest - pop di ; restore di + rep stosb + mov ax, di ; return pointer to dest +.endp: + __CDECL16_EXIT ret -; uint8_t* kmemset(uint8_t* dest, uint8_t* src, size_t len); +; uint8_t* kmemset(uint8_t* dest, uint8_t* src, uint8_t len); ; not overlap safe kmemcpy: - push di - push si ; di, si are callee save - - mov cx, [bp - 2] ; length - mov si, [bp - 4] ; source - mov di, [bp - 6] ; dest + __CDECL16_ENTRY +.func: + mov cx, [bp + 8] ; len + mov si, [bp + 6] ; src + mov di, [bp + 4] ; dest cld ; ensure we are incrementing rep movsb - + mov ax, di ; return pointer to dest .endf: - mov ax, [bp - 6] ; return pointer to dest - pop si - pop di + __CDECL16_EXIT ret \ No newline at end of file