itgTableDaa.py revision 2532c528b686eb371278fc8d8b26b1fdba7960b0
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync# -*- coding: utf-8 -*-
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsyncDAA (instruction) result table.
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsyncCopyright (C) 2012-2013 Oracle Corporation
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsyncThis file is part of VirtualBox Open Source Edition (OSE), as
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsyncavailable from http://www.virtualbox.org. This file is free software;
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsyncyou can redistribute it and/or modify it under the terms of the GNU
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsyncGeneral Public License (GPL) as published by the Free Software
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsyncFoundation, in version 2 as it comes in the "COPYING" file of the
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsyncVirtualBox OSE distribution. VirtualBox OSE is distributed in the
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsynchope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync## The 32-bit GCC (C99) program that produced the table below.
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync#include <stdio.h>
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync for (unsigned uInputAL = 0; uInputAL < 256; uInputAL++)
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync for (unsigned fAux = 0; fAux < 2; fAux++)
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync for (unsigned fCarry = 0; fCarry < 2; fCarry++)
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync unsigned uInputEFlags = fCarry | (fAux << 4);
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync unsigned uResultAL;
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync unsigned uResultEFlags;
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync __asm__ __volatile__("pushl %1\\n"
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync "pop %1\\n"
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync : "=a" (uResultAL),
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync "=r" (uResultEFlags)
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync : "0" (uInputAL),
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync "1" (uInputEFlags)
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync printf(" ( 0x%02x, 0x%02x ), # AL=0x%02x, AF=%u CF=%u\\n",
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync uResultAL, uResultEFlags & 0xd5, uInputAL, fAux, fCarry);
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync /* 0xd5 = CF, PF, AF, ZF, SF */
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync# Compile and run the above program if requested to do so.
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync oProc = subprocess.Popen(['gcc', '-x', 'c', '-std=gnu99', '-m32', '-o', './itgTableDaa', '-'], stdin = subprocess.PIPE);
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync oProc = subprocess.Popen(['./itgTableDaa',]).wait();
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync# The DAA results.
2532c528b686eb371278fc8d8b26b1fdba7960b0vboxsync# The index / input relation is: index = (AL << 2) | (CF << 1) | AF