// // Copyright (c) 1995-2000 Microsoft Corporation // // Module Name: // // codeseq.c // // Abstract: // // This module contains descriptions of the hand generated fragments. // There should be as few as possible. They should be as simple as // possible. This file is (potentially) included multiple times with // the macros redefined to produce different representations of the code. // This is the only representation of the hand written assembler that // is put into the translation cache. Hand written assembler that is // not put into the translation cache appears elsewhere. // // Author: // // Dave Hastings (daveh) creation-date 12-Jan-1996 // // Notes: // // Definitions for any macros used is done by the including code // // Fragment Naming: // No specifier -- DWORD aligned // U -- unaligned // Q -- contained in a qword // D -- contained in a dword // // Unaligned is always the worst case code. // Contained in indicates that the entire value // falls inside an aligned memory location of // This allows us to generate slightly better code, in that // we don't have to do two fetches // // 'Asm' macros and their usage // // Each instruction has a macro of the same name as the instruction // with the same parameters as the instruction. // // Labels have to be declared. Only on instruction can branch to // a specific label in a given fragment (because of the way forward // destinations are determined). If two instructions need to branch // to the same location in the fragment, TWO labels must be declared // and used. Each label requires a GEN_CT(