programmers resources
  http://www.intel-assembler.it/  (c)2017 intel-assembler.it   info@intel-assembler.it
 
Search :  
Lingua Italiana    English Language   
Index
 
just an empty assembly space
just an arrow Intel Platform
just an arrow Article & Guides
just an arrow Download Software


23/01/2009 Featured Article: How to remove Buzus Virus (permalink)




:::3210417:::
Bottone Scambio Directory Pubblicitaonline.it
Home Page | Articles & Guides | Download | Intel Platform | Contacts

Google
 


Bookmark and Share
Download 
Tell a friend



Pairing Pentium Instructions

A brief doc on Pentium optimized programming

(by quantasm / mike schmit)

A short document which shows how to program optimized Pentium assembly code using U-PIPE and V-PIPE.
This article is online from 2448 days and has been seen 5099 times




Mike Schmit's Top Ten Rules for Pairing Pentium Instructions

--- Instruction pairing rules for Intel Pentium Processor ---

1. Both instructions must be simple

2. Shifts or rotates can only pair in the U pipe
   SHL, SHR, SAL, SAR, ROL, ROR, RCL or RCR

3. ADC and SBB can only pair in the U pipe

4. JMP, CALL and Jcc can only pair in the V pipe.
   Jcc = jump on condition code

5. Neither instruction can contain BOTH a displacement and an immediate
   operand. For example:

   mov     [bx+2], 3  ; 2 is a displacement, 3 is immediate
   mov     mem1, 4    ; mem1 is a displacement, 4 is immediate

6. Prefixed instructions can only pair in the U pipe. This includes
   extended instructions that start with 0Fh except for the special
   case of the 16-bit conditional jumps of the 386 and above. Examples
   of prefixed instructions:

   mov     ES:[bx],
   mov     eax, [si]  ; 32-bit operand in 16-bit code segment
   mov     ax, [esi]  ; 16-bit operand in 32-bit code segment


7. The U pipe instruction must be only 1 byte in length or it will
   not pair until the second time it executes from the cache.

8. There can be no read-after-write or write-after-write register
   dependencies between the instructions except for special cases for
   the flags register and the stack pointer (rules 9 and 10)

   mov     ebx, 2   ; writes to EBX
   add     ecx, ebx ; reads EBX and ECX, writes to ECX
                    ; EBX is read after being written, no pairing
   mov     ebx, 1   ; writes to EBX
   mov     ebx, 2   ; writes to EBX
                    ; write after write, no pairing

9. The flags register exception allows an ALU instruction to be paired
   with a Jcc even though the ALU instruction writes the flags and Jcc
   reads the flags. For example:

   cmp     al, 0    ; CMP modifies the flags
   je      addr     ; JE reads the flags, but pairs
   dec     cx       ; DEC modifies the flags
   jnz     loop1    ; JNZ reads the flags, but pairs

10. The stack pointer exception allows two PUSHes or two POPs to
    be paired even though they both read and write to the SP (or ESP)
    register

    push    eax      ; ESP is read and modified
    push    ebx      ; ESP is read and modified, but still pairs


--- Simple Instructions (for Pentium pairing) ---

The following is a list of simple instructions, as required by rule
#1 above.

Instruction format 16-bit example     32-bit example
------------------------------------------------------------
MOV reg, reg       mov ax, bx         mov eax, edx
MOV reg, mem       mov ax, [bx]       mov eax, [edx]
MOV reg, imm       mov ax, 1          mov eax, 1
MOV mem, reg       mov [bx], ax       mov [edx], eax
MOV mem, imm       mov [bx], 1        mov [edx], 1
alu reg, reg       add ax, bx         cmp eax, edx
alu reg, mem       add ax, [bx]       cmp eax, [edx]
alu reg, imm       add ax, 1          cmp eax, 1
alu mem, reg       add [bx], ax       cmp [edx], eax
alu mem, imm       add [bx], 1        cmp [edx], 1

where alu = add, adc, and, or, xor, sub, sbb, cmp, test

INC  reg           inc  ax            inc  eax
INC  mem           inc  var1          inc  [eax]
DEC  reg           dec  bx            dec  ebx
DEC  mem           dec  [bx]          dec  var2
PUSH reg           push ax            push eax
POP  reg           pop  ax            pop  eax
LEA  reg, mem      lea  ax, [si+2]    lea  eax, [eax+4*esi+8]
JMP  near          jmp  label         jmp  lable2
CALL near          call proc          call proc2
Jcc  near          jz   lbl           jnz  lbl2

where Jcc = ja, jae, jb, jbe, jg, jge, jl, jle, je, jne, jc, js,
           jnp, jo, jp, jnbe, jnb, jnae, jna, jnle, jnl, jnge,
           jng, jz, jnz, jnc, jns, jpo, jno, jpe

NOP                nop                nop
shift reg, 1       shl  ax, 1         rcl  eax, 1
shift mem, 1       shr  [bx], 1       rcr  [ebx], 1
shift reg, imm     sal  ax, 2         rol  esi, 2
shift mem, imm     sar  ax, 15        ror  [esi], 31

where shift = shl, shr, sal, sar, rcl, rcr, rol, ror


--- Notes ---

- rcl and rcr are not pairable with immediate counts other than 1
- all memory-immediate (mem, imm) instructions are not pairable with
  a displacement in the memory operand
- instructions with segment registers are not pairable

Copyright Quantasm



Top
Download 
Tell a friend
Bookmark and Share



Similar Articles

FPU timing
8087-Pentium coprocessor timing and pairing
(by Quantasm)

How to optimize code on a 386/486/Pentium
Intel Assembler Code Optimization and Pipelining
(by Michael Kunstelj)

Notes on Intel Pentium Processor
CMPXCHG8B CPUID MOV RDMSR RDTSC RSM WRMSR
(by Microsoft)

Optimizations for Intel's 32-Bit Processors
A 49 page guide on Intel Asm Code Optimization
(by Bev Zaharie)

Pentium Code Optimization using U-pipe V-pipe
A cross reference by instructions
(by Quantasm)

The Complete Pentium Instruction Set Table
(32 Bit Addressing Mode Only)
(by Sang Cho)

Tips on Saving Bytes in ASM Programs
Tricks on How to write compact code
(by Larry Hammick)

Write Optimized Pentium Code
A series of document on optimizing asm code
(by Agner Fog)

 Tags: optimize, pentium


webmaster jes
writers rguru, tech-g, aiguru, drAx

site optimized for IE/Firefox/Chrome with 1024x768 resolution

Valid HTML 4.01 Transitional


ALL TRADEMARKS ® ARE PROPERTY OF LEGITTIMATE OWNERS.
© ALL RIGHTS RESERVED.

hosting&web - www.accademia3.it

grossocactus
find rguru on
http://www.twitter.com/sicurezza3/
... send an email ...
Your name

Destination email

Message

captcha! Code