[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Okay, let's talk assembly and Lua (was Re: A bit more on bits...)
- From: Sean Conner <sean@...>
- Date: Fri, 17 Feb 2023 18:27:11 -0500
It was thus said that the Great Luiz Henrique de Figueiredo once stated:
> Can we please go back to discussing Lua? Thanks.
Sure. Here's a Lua module I wrote for 32-bit x86 (Linux in particular,
using nasm, but it could be adopted for other operating systems). It's a
wrapper around the x86 instruction RDTSC (ReaD TimeStamp Counter) with as
minimal overhead as possible:
;***************************************************************************
;
; Copyright 2020 by Sean Conner.
;
; This library is free software; you can redistribute it and/or modify it
; under the terms of the GNU Lesser General Public License as published by
; the Free Software Foundation; either version 3 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 Lesser General Public
; License for more details.
;
; You should have received a copy of the GNU Lesser General Public License
; along with this library; if not, see <http://www.gnu.org/licenses/>.
;
; Comments, questions and criticisms can be sent to: sean@conman.org
;
;***************************************************************************
bits 32
global rdtsc
extern lua_pushinteger
extern lua_pushcclosure
;***************************************************************************
section .text
ldl_rdtsc: rdtsc
push edx
push eax
push dword [esp + 12]
call lua_pushinteger
xor eax,eax
inc eax
lea esp,[esp + 12]
ret
;---------------------------------------------------------------------------
rdtsc: xor eax,eax
push eax
push ldl_rdtsc
push dword [esp + 12]
call lua_pushcclosure
xor eax,eax
inc eax
lea esp,[esp + 12]
ret
-spc