Author Topic: CPU emulator  (Read 5566 times)

Offline shaynox

  • Full Member
  • **
  • Posts: 118
  • Country: fr
  • use Windows 10 x64
CPU emulator
« on: March 30, 2015, 10:20:12 PM »
Hello, do you know how use avx in machine emulator ? I have already tried qemu/bochs/Hyper-V, but no one work, it's reboot instead read avx instruction then jump into infinite loop.
My test project is in attachment.

(This project is build with windows)
« Last Edit: May 15, 2015, 04:17:13 PM by shaynox »
Basic asm standard:
reg(lowercase) - instruction(lowercase) -> instruction     dest, src

Offline shaynox

  • Full Member
  • **
  • Posts: 118
  • Country: fr
  • use Windows 10 x64
Re: CPU emulator
« Reply #1 on: June 30, 2016, 11:49:29 AM »
Well thanks.

The answer was simple finally: code ourselves the instructions into macros.

But I decided to pass this project and use a real machine instead.

« Last Edit: June 30, 2016, 11:51:07 AM by shaynox »
Basic asm standard:
reg(lowercase) - instruction(lowercase) -> instruction     dest, src

Offline shaynox

  • Full Member
  • **
  • Posts: 118
  • Country: fr
  • use Windows 10 x64
Re: CPU emulator
« Reply #2 on: September 18, 2018, 07:55:57 AM »
Maybe, but the problem of machine emulator is that they have more than 1 incompatibility with my OS, I forgot how many, there is the LFB address as example that is different, but when using it with real machine, the problem disappear.
« Last Edit: October 21, 2018, 05:18:36 PM by shaynox »
Basic asm standard:
reg(lowercase) - instruction(lowercase) -> instruction     dest, src

Offline fredericopissarra

  • Jr. Member
  • *
  • Posts: 74
  • Country: br
Re: CPU emulator
« Reply #3 on: April 11, 2019, 12:09:31 PM »
You must check if the emulated processor has support for AVX (or AVX2):

Code: [Select]
  bits  64
  default rel

  section .text

  global  supports_avx
  global  supports_avx2

;
; SysV and MS calling convention mandates RBX must be
; saved between calls. I usualy use asm routines from C functions!
;

supports_avx:
  push  rbx
  mov   eax,1
  cpuid
  xor   eax,eax
  test  ecx,1 << 28
  setnz al
  pop   rbx
  ret

supports_avx2:
  push  rbx
  xor   ecx,ecx
  mov   eax,7
  cpuid
  xor   eax,eax
  test  ebx,1 << 5
  setnz al
  pop   rbx
  ret

Here's some features from Intel's Software Development Manuals:
« Last Edit: April 11, 2019, 12:11:33 PM by fredericopissarra »