HP UX Developer Tools manual Macro Processing, Defining New Instructions With Macros

Page 37

Program Structure

Macro Processing

Macro Processing

A macro is a user-defined word that is replaced by a sequence of instructions. Including a macro in a source program causes the sequence of instructions to be inserted into the program wherever the macro appears.

A user may define a word as a macro by using the .MACRO directive.

Detailed information about macro arguments, placement and redefinition of macros, nested macro definitions, and nested macro calls is in “Assembler Directives and Pseudo-Operations” on page 53.

Defining New Instructions With Macros

If you are testing new CPUs or coprocessors, you may need to use opcodes that are unknown to the Assembler. A variant of a macro definition may be used to create a mnemonic for the instruction. After being defined, the new mnemonic instruction can be invoked as easily as a standard instruction.

Opcodes, subopcodes, completers, and operands are encoded into the instruction word in a bit-intensive manner because all PA-RISC instructions are one word, or 32-bits, in length.

To write a macro, you must specify explicitly which bit fields are to contain constants and which are to contain macro arguments. The macro processor has no built-in knowledge of instruction formats. Defining new instructions through macros is only possible because a convenient way to delimit bit fields has been provided. It is up to the programmer to choose the correct bit field.

Bit positions within the 32-bit word are numbered from zero to 31, from left to right. A bit range is indicated by the starting bit position followed by the ending bit position. The two bit positions are separated by two periods and enclosed in braces. The bit field beginning at bit position 6 and ending at bit position 10 is represented as:

{6..10}

If the bit field being assigned from is bigger than the bit field being assigned to, then a warning is issued and the assigned-from bit field is truncated on the left. When no bit field is specified for the assigned-from

Chapter 2

37

Image 37
Contents 92432-90012 June HP 9000 ComputersRestricted Rights Legend Legal NoticesHanover Street Palo Alto, California Contents Assembler Directives and Pseudo-Operations Contents Contents Contents Contents Pseudo-Instruction Set Assembling Your Program Programming Examples Diagnostic MessagesIndex Printing History PrefaceEdition Date Software Version Related Documentation AudienceThis Manual Typographical ConventionsSummary of Technical Changes for HP-UX Assembler Features Assembly LanguageAssembler Features Summary of Changes for PA-RISC 2.0W Wide Mode, 64-bit Summary of Changes for PA-RISCSummary of Changes for PA-RISC ChapterSummary of Changes for PA-RISC 2.0W Wide Mode, 64-bit Program Structure Label Opcode Operands Comments Program StructureSymbols and Constants Symbols and ConstantsInteger Constants Signed Unsigned Registers and Register Mnemonics Registers and Register MnemonicsRegisters by using an L or R suffix General Registers Single-Precision Floating-Point Registers Space Registers Double-Precision Floating-Point RegistersControl Registers Synonyms Register Synonyms Description Register Procedure Calling ConventionsExpressions ExpressionsStandard Arithmetic Operators Operator OperationLegal Combinations For Relocatable Terms Operation Result Available Field Selectors Meaning Field Meaning Selector Multiple of 2048 allows a three-instruction sequence Parenthesized Subexpressions Operands and Completers Operands and CompletersAddi Defining New Instructions With Macros Macro ProcessingMacro Processing Contains general register 19, or binary 10011. These Spaces HP-UX Architecture ConventionsSpaces Memory Layout on HP-UX Sr4 Sr5 Sr6 Attributes SubspacesSubspaces Standard Subspaces and Sort Keys DirectivesSpace Subspace Sort Key Use Sections in 64-bit Mode Sections in 64-bit Mode$INIT$ Location Counters Location CountersCompiler Conventions Compiler ConventionsCompiler Conventions Global Symbol Usage Mfctl Shared Libraries Assembly ListingShared Libraries Assembly Listing Assembler Directives IntroductionDirective Function Requests common storage for a specified number Bytes Pseudo-Operations Directive Function Reserves 16 bits a half word of storage Syntax Align DirectiveParameters ExampleDiscussion Allow DirectiveAllow Directive To the .LEVEL specified for the file Block and .BLOCKZ Pseudo-Operations Block and .BLOCKZ Pseudo-OperationsSpace $TEXT$ Subspa $CODE$ Block Byte Pseudo-Operation Byte Pseudo-OperationByte initvalue , initvalue Call Directive Call DirectiveCall argumentdescription argumentdescription Return value for a procedure Form of argument-description is Arg=location Where arg canfirst word in the argument list Second word in the argument listLIT Align Word Procend Export Callinfo Directive Callinfo DirectiveCallinfo parameter , parameter Register ENTRYSR= Unwound It restores the RP value when it encounters a .LEAVE Callinfo Directive Stack Frames Re-enter code subspace Comm Directive Comm DirectiveLabel .COMM numbytes Label Labels the location of the reserved storageCopyright Directive Copyright DirectiveCompany-name Proc Callinfo Enter Fraction E power Integer .fraction E powerDouble Pseudo-Operation Double Pseudo-OperationDword Pseudo-Operation Dword Pseudo-OperationDword initvalue , initvalue END Directive END DirectiveEndm Directive Endm DirectiveEnter and .LEAVE Pseudo-Operations Enter and .LEAVE Pseudo-OperationsSpace $TEXT$ Entry and .EXIT Directives Entry and .EXIT DirectivesEQU Directive Symbolicname .EQU valueEQU Directive ValueExport Directive Export DirectiveArgument Export proc,ENTRY,ARGW0=GR Float Pseudo-Operation Float Pseudo-OperationHalf Pseudo-Operation Half Pseudo-OperationHalf initvalue , initvalue Import Directive Import DirectiveNOP END Label Directive Label DirectiveLabel labelid Labelid Names the label identifierLevel Directive Level DirectiveLevel Directive Listoff and .LISTON Directives Listoff and .LISTON DirectivesListon Code Space $TEXT$ SPNUM=0,SORT=0 Subspa $CODE$ Locct Directive Locct DirectiveMacro Directive Macro DirectiveLabel .MACRO formalparameter,formalparameter Examples 100 Origin Directive Origin DirectiveChapter 101 Proc and .PROCEND Directives Proc and .PROCEND Directives102 Chapter 103 REG Directive REG DirectiveLabel .REG typedregister Label User-defined register nameShlibversion Directive Shlibversion DirectiveChapter 105 Space Directive Space Directive106 Chapter 107 Spnum Pseudo-Operation Spnum Pseudo-Operation108 String and .STRINGZ Pseudo-Operations String and .STRINGZ Pseudo-OperationsChapter 109 110 Subspa Directive Subspa DirectiveName An identifier that names the current subspace Chapter 111112 Chapter 113 Version Directive Version Directive114 Word Pseudo-Operation Word Pseudo-OperationWord initvalue , initvalue Chapter 115Programming Aids Directive Space Name Default ParametersProgramming Aids Predefined Subspace DirectivesChapter 117 ShortdataProgramming Aids 118 119 Pseudo-Instruction Set120 Cond Description Compare and Branch Conditions Comb and ComibChapter 121 122 Add and Branch Conditions Addb and Addib Description123 Invoking the AssemblerUsing the as Command Using the as CommandAssemble code for the architecture 124Level filenameChapter 125 Tables, see HP-UX Linker and Libraries WnumberOnline User Guide 126Using the cc Command Using the cc CommandPassing Arguments to the Assembler Wa, ,as-argument as-argument128 Cpp Preprocessor129 Programming ExamplesBinary Search for Highest Bit Position Binary Search for Highest Bit Position130 Chapter 131 Copying a String Copying a String132 Chapter 133 Dividing a Double-Word Dividend Dividing a Double-Word Dividend134 Chapter 135 Programming ExamplesDemonstrating the Procedure Calling Convention Demonstrating the Procedure Calling ConventionProgram Listing 136Chapter 137 Assembly Program ListingAssembly Program Listing From the C Compiler Output of the cc -S CommandOutput of the cc -S Command 138Chapter 139 Output of the cc -S Command 140 141 142 Option operandChapter 143 144 ReserveUse a general register Wrong register type usedChapter 145 Use a control register Use a space register146 Chapter 147 148 Chapter 149 150 Chapter 151 152 Used to invoke the assemblerChapter 153 Error Messages Error Messages154 Chapter 155 156 Chapter 157 158 1028 10271029 10301032 10311033 10341036 10351037 1038162 Chapter 163 1055 10541056 1057Chapter 165 166 Chapter 167 168 1080 Format keyword=value1081 1082170 1089 10881090 Chapter 1711094 10911095 10961098 10971099 11001102 11011103 1104Chapter 175 1105Panic Messages Panic Messages176 2006 20052007 2008User Warning Messages User Warning Messages178 7004 70037005 7006180 Chapter 181 182 Limit Error Messages Limit Error Messages7200 72017203 72027204 184Chapter 185 Diagnostic Messages186 Branching Error Messages Branching Error MessagesChapter 187 188 Chapter 189 190 Chapter 191 192 7828 78277834 78357837 7836Expr 194Index 195 IndexNumerics 196Copyright Index 197HP C/HP-UX,49 198Mfctl Index 199Double 200See also memory Index 201202
Related manuals
Manual 29 pages 37.9 Kb Manual 44 pages 5.6 Kb Manual 2 pages 37.54 Kb