unsafe.asm

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· 汇编 代码 · 共 710 行 · 第 1/2 页

ASM
710
字号
; -----------------------------------------------
; $Id: unsafe.asm,v 1.6 2004/01/20 19:30:17 epr Exp $
;
; Native method implementation for org.jnode.vm.Unsafe
;
; Author       : E. Prangsma
; -----------------------------------------------

	extern VmThread_runThread
	extern bootHeapStart
	extern bootHeapEnd
	extern freeMemoryStart

Q43org5jnode2vm6Unsafe23addressOf2e28Ljava2flang2fObject3b29Lorg2fjnode2fvm2fAddress3b:
Q43org5jnode2vm6Unsafe23addressToInt2e28Lorg2fjnode2fvm2fAddress3b29I:
Q43org5jnode2vm6Unsafe23intToAddress2e28I29Lorg2fjnode2fvm2fAddress3b:
	mov eax,[esp+4] ; object
	ret 4

Q43org5jnode2vm6Unsafe23addressToLong2e28Lorg2fjnode2fvm2fAddress3b29J:
	mov eax,[esp+4] ; address -> lsb
	xor edx,edx		; msb
	ret 4

Q43org5jnode2vm6Unsafe23longToAddress2e28J29Lorg2fjnode2fvm2fAddress3b:
	mov eax,[esp+4] ; LSB long -> address
	ret 8 			; We ignore the MSB here.

Q43org5jnode2vm6Unsafe23pushInt2e28I29V:
Q43org5jnode2vm6Unsafe23pushLong2e28J29V:
Q43org5jnode2vm6Unsafe23pushObject2e28Ljava2flang2fObject3b29V:
	ret

Q43org5jnode2vm6Unsafe23objectAt2e28Lorg2fjnode2fvm2fAddress3b29Ljava2flang2fObject3b:
	mov eax,[esp+4] ; memPtr
	ret 4
	
Q43org5jnode2vm6Unsafe23getVmClass2e28Ljava2flang2fObject3b29Lorg2fjnode2fvm2fclassmgr2fVmClassType3b:
	mov eax,[esp+4] ; object reference
	mov eax,[eax+ObjectLayout_TIB_SLOT*4] ; vmt reference
	mov eax,[eax+(TIBLayout_VMTYPE_INDEX+VmArray_DATA_OFFSET)*4]
	ret 4

Q43org5jnode2vm6Unsafe23getTIB2e28Ljava2flang2fObject3b295bLjava2flang2fObject3b:
	mov eax,[esp+4] ; object reference
	mov eax,[eax+ObjectLayout_TIB_SLOT*4] ; TIB reference
	ret 4

Q43org5jnode2vm6Unsafe23getSuperClasses2e28Ljava2flang2fObject3b295bLorg2fjnode2fvm2fclassmgr2fVmType3b:
	mov eax,[esp+4] ; object reference
	mov eax,[eax+ObjectLayout_TIB_SLOT*4] ; TIB reference
	mov eax,[eax+(TIBLayout_SUPERCLASSES_INDEX+VmArray_DATA_OFFSET)*4] 
	ret 4

Q43org5jnode2vm6Unsafe23getObjectFlags2e28Ljava2flang2fObject3b29I
	mov eax,[esp+4] ; object reference
	mov eax,[eax+ObjectLayout_FLAGS_SLOT*4] ; size
	ret 4

Q43org5jnode2vm6Unsafe23setObjectFlags2e28Ljava2flang2fObject3bI29V
	mov eax,[esp+8] ; object reference
	mov edx,[esp+4] ; new flags
	mov [eax+ObjectLayout_FLAGS_SLOT*4],edx
	ret 8

Q43org5jnode2vm6Unsafe23getBoolean2e28Lorg2fjnode2fvm2fAddress3b29Z:
	mov eax,[esp+4] ; memPtr
	movzx eax,byte [eax]
	ret 4

; boolean getBoolean(Object object, int offset);
Q43org5jnode2vm6Unsafe23getBoolean2e28Ljava2flang2fObject3bI29Z:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	movzx eax,byte [eax]
	ret 8

Q43org5jnode2vm6Unsafe23getByte2e28Lorg2fjnode2fvm2fAddress3b29B:
	mov eax,[esp+4] ; memPtr
	movsx eax,byte [eax]
	ret 4
	
; byte getByte(Object object, int offset);
Q43org5jnode2vm6Unsafe23getByte2e28Ljava2flang2fObject3bI29B:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	movsx eax,byte [eax]
	ret 8
	
Q43org5jnode2vm6Unsafe23getChar2e28Lorg2fjnode2fvm2fAddress3b29C:
	mov eax,[esp+4] ; memPtr
	movzx eax,word [eax]
	ret 4

Q43org5jnode2vm6Unsafe23getShort2e28Lorg2fjnode2fvm2fAddress3b29S:
	mov eax,[esp+4] ; memPtr
	movsx eax,word [eax]
	ret 4

; short getShort(Object object, int offset);
Q43org5jnode2vm6Unsafe23getShort2e28Ljava2flang2fObject3bI29S:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	movsx eax,word [eax]
	ret 8

; char getChar(Object object, int offset);
Q43org5jnode2vm6Unsafe23getChar2e28Ljava2flang2fObject3bI29C:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	movzx eax,word [eax]
	ret 8

; int getInt(Address memPtr);
Q43org5jnode2vm6Unsafe23getInt2e28Lorg2fjnode2fvm2fAddress3b29I:
	mov eax,[esp+4] ; memPtr
	mov eax,dword [eax]
	ret 4
	
; int getInt(Object object, int offset);
Q43org5jnode2vm6Unsafe23getInt2e28Ljava2flang2fObject3bI29I:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	mov eax,dword [eax]
	ret 8
	
; long getLong(Address memPtr);
Q43org5jnode2vm6Unsafe23getLong2e28Lorg2fjnode2fvm2fAddress3b29J:
	mov eax,[esp+4] ; memPtr
	mov edx,dword [eax+4] ; MSB
	mov eax,dword [eax+0] ; LSB
	ret 4

; long getLong(Object object, int offset);
Q43org5jnode2vm6Unsafe23getLong2e28Ljava2flang2fObject3bI29J:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	mov edx,dword [eax+4] ; MSB
	mov eax,dword [eax+0] ; LSB
	ret 8

; float getFloat(Address memPtr);
Q43org5jnode2vm6Unsafe23getFloat2e28Lorg2fjnode2fvm2fAddress3b29F:
	mov eax,[esp+4] ; memPtr
	mov eax,dword [eax]
	ret 4

; float getFloat(Object objec, int offset);
Q43org5jnode2vm6Unsafe23getFloat2e28Ljava2flang2fObject3bI29F:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	mov eax,dword [eax]
	ret 8

; double getDouble(Address memPtr);
Q43org5jnode2vm6Unsafe23getDouble2e28Lorg2fjnode2fvm2fAddress3b29D:
	mov eax,[esp+4] ; memPtr
	mov edx,dword [eax+4] ; MSB
	mov eax,dword [eax+0] ; LSB
	ret 4

; double getDouble(Object object, int offset);
Q43org5jnode2vm6Unsafe23getDouble2e28Ljava2flang2fObject3bI29D:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	mov edx,dword [eax+4] ; MSB
	mov eax,dword [eax+0] ; LSB
	ret 8

; Object getObject(Address memPtr);
; Address getAddress(Address memPtr);
Q43org5jnode2vm6Unsafe23getObject2e28Lorg2fjnode2fvm2fAddress3b29Ljava2flang2fObject3b:
Q43org5jnode2vm6Unsafe23getAddress2e28Lorg2fjnode2fvm2fAddress3b29Lorg2fjnode2fvm2fAddress3b:
	mov eax,[esp+4] ; memPtr
	mov eax,dword [eax]
	ret 4

; Object getObject(Object object, int offset);
; Address getAddress(Object object, int offset);
Q43org5jnode2vm6Unsafe23getObject2e28Ljava2flang2fObject3bI29Ljava2flang2fObject3b:
Q43org5jnode2vm6Unsafe23getAddress2e28Ljava2flang2fObject3bI29Lorg2fjnode2fvm2fAddress3b:
	mov eax,[esp+8] ; Object
	add eax,[esp+4] ; Offset
	mov eax,dword [eax]
	ret 8

; void setBoolean(Address memPtr, boolean value);
Q43org5jnode2vm6Unsafe23setBoolean2e28Lorg2fjnode2fvm2fAddress3bZ29V:
	mov eax,[esp+8] ; memPtr
	mov edx,[esp+4] ; value
	mov byte [eax],dl
	ret 8

; void setBoolean(Object object, int offset, boolean value);
Q43org5jnode2vm6Unsafe23setBoolean2e28Ljava2flang2fObject3bIZ29V:
	mov eax,[esp+12] ; Object
	add eax,[esp+8]  ; Offset
	mov edx,[esp+4]  ; value
	mov byte [eax],dl
	ret 12

; void setByte(Address memPtr, byte value);
Q43org5jnode2vm6Unsafe23setByte2e28Lorg2fjnode2fvm2fAddress3bB29V:
	mov eax,[esp+8] ; memPtr
	mov edx,[esp+4] ; value
	mov byte [eax],dl
	ret 8

; void setByte(Object object, int offset, byte value);
Q43org5jnode2vm6Unsafe23setByte2e28Ljava2flang2fObject3bIB29V:
	mov eax,[esp+12] ; Object
	add eax,[esp+8]  ; Offset
	mov edx,[esp+4] ; value
	mov byte [eax],dl
	ret 12

; void setShort(Address memPtr, short value);
Q43org5jnode2vm6Unsafe23setShort2e28Lorg2fjnode2fvm2fAddress3bS29V:
	mov eax,[esp+8] ; memPtr
	mov edx,[esp+4] ; value
	mov word [eax],dx
	ret 8

; void setShort(Object object, int offset, short value);
Q43org5jnode2vm6Unsafe23setShort2e28Ljava2flang2fObject3bIS29V:
	mov eax,[esp+12] ; Object
	add eax,[esp+8]  ; Offset
	mov edx,[esp+4] ; value
	mov word [eax],dx
	ret 12

; void setChar(Address memPtr, char value);
Q43org5jnode2vm6Unsafe23setChar2e28Lorg2fjnode2fvm2fAddress3bC29V:
	mov eax,[esp+8] ; memPtr
	mov edx,[esp+4] ; value
	mov word [eax],dx
	ret 8

; void setChar(Object object, int offset, char value);
Q43org5jnode2vm6Unsafe23setChar2e28Ljava2flang2fObject3bIC29V:
	mov eax,[esp+12] ; Object
	add eax,[esp+8]  ; Offset
	mov edx,[esp+4] ; value
	mov word [eax],dx
	ret 12

; void setInt(Address memPtr, int value);
Q43org5jnode2vm6Unsafe23setInt2e28Lorg2fjnode2fvm2fAddress3bI29V:
	mov eax,[esp+8] ; memPtr
	mov edx,[esp+4] ; value
	mov dword [eax],edx
	ret 8

; void setInt(Object object, int offset, int value);
Q43org5jnode2vm6Unsafe23setInt2e28Ljava2flang2fObject3bII29V:
	mov eax,[esp+12] ; Object
	add eax,[esp+8]  ; Offset
	mov edx,[esp+4] ; value
	mov dword [eax],edx
	ret 12

; void setLong(Address memPtr, long value);
Q43org5jnode2vm6Unsafe23setLong2e28Lorg2fjnode2fvm2fAddress3bJ29V:
	mov eax,[esp+12] ; memPtr
	mov edx,[esp+8] ; value MSB
	mov dword [eax+4],edx
	mov edx,[esp+4] ; value LSB
	mov dword [eax+0],edx
	ret 12

; void setLong(Object object, int offset, long value);
Q43org5jnode2vm6Unsafe23setLong2e28Ljava2flang2fObject3bIJ29V:
	mov eax,[esp+16] ; Object
	add eax,[esp+12]  ; Offset
	mov edx,[esp+8] ; value MSB
	mov dword [eax+4],edx
	mov edx,[esp+4] ; value LSB
	mov dword [eax+0],edx
	ret 16

; void setFloat(Address memPtr, float value);
Q43org5jnode2vm6Unsafe23setFloat2e28Lorg2fjnode2fvm2fAddress3bF29V:
	mov eax,[esp+8] ; memPtr
	mov edx,[esp+4] ; value
	mov dword [eax],edx
	ret 8

; void setFloat(Object object, int offset, float value);
Q43org5jnode2vm6Unsafe23setFloat2e28Ljava2flang2fObject3bIF29V:
	mov eax,[esp+12] ; Object
	add eax,[esp+8]  ; Offset
	mov edx,[esp+4] ; value
	mov dword [eax],edx
	ret 12

; void setDouble(Address memPtr, double value);
Q43org5jnode2vm6Unsafe23setDouble2e28Lorg2fjnode2fvm2fAddress3bD29V:
	mov eax,[esp+12] ; memPtr
	mov edx,[esp+8] ; value MSB
	mov dword [eax+4],edx
	mov edx,[esp+4] ; value LSB
	mov dword [eax+0],edx
	ret 12

; void setDouble(Object object, int offset, double value);
Q43org5jnode2vm6Unsafe23setDouble2e28Ljava2flang2fObject3bID29V:
	mov eax,[esp+16] ; Object
	add eax,[esp+12]  ; Offset
	mov edx,[esp+8] ; value MSB
	mov dword [eax+4],edx
	mov edx,[esp+4] ; value LSB
	mov dword [eax+0],edx
	ret 16

; void setObject(Address memPtr, Object value);
Q43org5jnode2vm6Unsafe23setObject2e28Lorg2fjnode2fvm2fAddress3bLjava2flang2fObject3b29V:
	mov eax,[esp+8] ; memPtr
	mov edx,[esp+4] ; value
	mov dword [eax],edx
	ret 8

; void setObject(Object object, int offset, Object value);
Q43org5jnode2vm6Unsafe23setObject2e28Ljava2flang2fObject3bILjava2flang2fObject3b29V:
	mov eax,[esp+12] ; Object
	add eax,[esp+8]  ; Offset
	mov edx,[esp+4] ; value
	mov dword [eax],edx
	ret 12

Q43org5jnode2vm6Unsafe23intBitsToFloat2e28I29F:
	mov eax,[esp+4]
	ret 4

Q43org5jnode2vm6Unsafe23floatToRawIntBits2e28F29I:
	mov eax,[esp+4]
	ret 4

Q43org5jnode2vm6Unsafe23longBitsToDouble2e28J29D:
	mov edx,[esp+8] ; MSB
	mov eax,[esp+4] ; LSB
	ret 8

Q43org5jnode2vm6Unsafe23doubleToRawLongBits2e28D29J:
	mov edx,[esp+8] ; MSB
	mov eax,[esp+4] ; LSB
	ret 8

Q43org5jnode2vm6Unsafe23clear2e28Lorg2fjnode2fvm2fAddress3bI29V:
	mov edx,[esp+8] ; memPtr
	mov eax,[esp+4] ; Size
	push edi
	push ecx
	mov edi,edx
	mov ecx,eax
	shr ecx,2

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?