CN1265204A - 检测被寻址单元预测失败的存储控制器 - Google Patents
检测被寻址单元预测失败的存储控制器 Download PDFInfo
- Publication number
- CN1265204A CN1265204A CN97182010A CN97182010A CN1265204A CN 1265204 A CN1265204 A CN 1265204A CN 97182010 A CN97182010 A CN 97182010A CN 97182010 A CN97182010 A CN 97182010A CN 1265204 A CN1265204 A CN 1265204A
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- prediction
- target
- storer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 161
- 238000013519 translation Methods 0.000 claims description 144
- 238000003860 storage Methods 0.000 claims description 89
- 239000000872 buffer Substances 0.000 claims description 70
- 238000000034 method Methods 0.000 claims description 61
- 230000008569 process Effects 0.000 claims description 39
- 230000004044 response Effects 0.000 claims description 19
- 238000001514 detection method Methods 0.000 claims description 9
- 230000009471 action Effects 0.000 claims description 4
- 238000011084 recovery Methods 0.000 claims description 4
- 230000014616 translation Effects 0.000 description 136
- 238000005457 optimization Methods 0.000 description 43
- 238000013461 design Methods 0.000 description 33
- 238000005516 engineering process Methods 0.000 description 28
- 238000012545 processing Methods 0.000 description 18
- 230000008707 rearrangement Effects 0.000 description 14
- 238000012360 testing method Methods 0.000 description 14
- 230000007704 transition Effects 0.000 description 14
- 238000007792 addition Methods 0.000 description 12
- 241001673391 Entandrophragma candollei Species 0.000 description 11
- 238000010586 diagram Methods 0.000 description 11
- 239000000284 extract Substances 0.000 description 11
- 230000006870 function Effects 0.000 description 11
- 238000012546 transfer Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 10
- 238000004088 simulation Methods 0.000 description 9
- 230000015572 biosynthetic process Effects 0.000 description 7
- 238000011068 loading method Methods 0.000 description 6
- 230000002860 competitive effect Effects 0.000 description 5
- 238000000605 extraction Methods 0.000 description 5
- 230000001965 increasing effect Effects 0.000 description 5
- 230000008030 elimination Effects 0.000 description 3
- 238000003379 elimination reaction Methods 0.000 description 3
- 230000002708 enhancing effect Effects 0.000 description 3
- 238000007689 inspection Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 101150006084 CHKB gene Proteins 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000005611 electricity Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000004321 preservation Methods 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 241000282341 Mustela putorius furo Species 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 230000005291 magnetic effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 230000001256 tonic effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- C—CHEMISTRY; METALLURGY
- C09—DYES; PAINTS; POLISHES; NATURAL RESINS; ADHESIVES; COMPOSITIONS NOT OTHERWISE PROVIDED FOR; APPLICATIONS OF MATERIALS NOT OTHERWISE PROVIDED FOR
- C09K—MATERIALS FOR MISCELLANEOUS APPLICATIONS, NOT PROVIDED FOR ELSEWHERE
- C09K8/00—Compositions for drilling of boreholes or wells; Compositions for treating boreholes or wells, e.g. for completion or for remedial operations
- C09K8/02—Well-drilling compositions
- C09K8/32—Non-aqueous well-drilling compositions, e.g. oil-based
- C09K8/34—Organic liquids
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1405—Saving, restoring, recovering or retrying at machine instruction level
- G06F11/141—Saving, restoring, recovering or retrying at machine instruction level for bus or memory accesses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Abstract
Description
Original C code while((n--)>0){ ★s++=c } ==================================================================== <dp n="d24"/> Win32×86 instructions produced by a compiler compiling this C code. mov %ecx,[%ebp+0×c] // load c from memory address into the %ecx mov %eax,[%ebp+0×8] // load s from memory address into the %eax mov [%eax],%ecx // store c into memory address s held in %eax add %eax,#4 // increment s by 4. mov [%ebp+0×8],%eax // store(s+4)back into memory mov %eax,[%ebp+0×10] // load n from memory address into the %eax lea %ecx,[%eax-1] // decrement n and store the result in %ecx mov [%ebp+0×10],%ecx // store(n-1) into memory and %eax,%eax // test n to set the condition codes jg .-0×1b // branch to the top of this section if “n>0”
Shows each X86 Instruction shown above followed by the host instructions necessary to implement the X86 Instruction. mov %ecx,[%ebp+0×c] // load c from memory address into ecx add R0,Rebp,0×c ; form the memory address and put it in R0 ld Recx,[R0] ; load c from memory address in R0 into Recx mov %eax,[%ebp+0×8] // load s from memory address into %eax add R2,Rebp,0×8 ; form the memory address and put it in R2 ld Reax,[R2] ; load s from memory address in R2 into Recx mov [%eax],%ecx // store c into memory address s held in %eax st [Reax],Recx ; store c into memory address s held in Reax add %eax,#4 // increment s by 4 add Reax,Reax,4 ; increment s by 4 mov [%ebp+0×8],%eax // store(s+4) back into memory add R5,Rebp,0×8 ; form the memory address and put it in R5 st [R5],Reax ; store(s+4) back into memory mov %eax,[%ebp+0×10] // load n from memory address into %eax <dp n="d25"/> add R7,Rebp,0×10 ; form the memory address and put it in R7 ld Reax,[R7] ; load n from memory address into the Reax lea %ecx,[%eax-1] // decrement n and store the result in %ecx sub Recx,Reax,1 ; decrement n and store the result in Recx mov [%ebp+0×10],%ecx // store(n-1) into memory add R9,Rebp,0×10 ; form the memory address and put it in R9 st [R9],Recx ; store(n-1) into memory and %eax,%eax // test n to set the condition codes andcc R11,Reax,Reax ; test n to set the condition codes jg .-0×1b // branch to the top of this section if “n>0” jg mainloop,mainloop ; jump to the main loop Host Instruction key: ld=load add=ADD st=store sub=subtract jg=jump if condition codes indicate greater andcc=and set the condition codes
Adds host instructions necassary to perform X86 address computation and upper and lower segment limit checks. mov %ecx,[%ebp+0×c] // load c add R0,Rebp,0×c ;form logical address into R0 chkl R0,Rss_limit ; Check the logical address against segment lower limit chku R0,R_FFFFFFFF ; Check the logical address against segment upper limit add R1,R0,Rss_base ;add the segment base to form the linear address ld Recx,[R1] ;load c from memory address in R1 into Recx mov %eax,[%ebp+0×8] // load s add R2,Rebp,0×8 ;form logical address into R0 chkl R2,Rss_limit ; Check the logical address against segment lower limit chku R2,R_FFFFFFFF ; Check the logical address against segment upper limit add R3,R2,Rss_base ;add the segment base to form the linear address ld Reax,[R3] ;load s from memory address in R3 into Ra mov [%eax],%ecx // store c into [s] chku Reax,Rds_limit ; Check the logical address against segment upper limit add R4,Reax,Rds_base ;add the segment base to form the linear address st [R4],Recx ;store c into memory address s add %eax,#4 // increment s by 4 addcc Reax,Reax,4 ;increment s by 4 mov [%ebp+0×8],%eax // store(s+4)to memory add R5,Rebp,0×8 ;form logical address into R5 chkl R5,Rss_limit ; Check the logical address against segment lower limit chku R5,R_FFFFFFFF ; Check the logical address against segment upper limit add R6,R5,Rss_base ;add the segment base to form the linear address st [R6],Reax ;store(s+4) to memory address in R6 <dp n="d27"/> mov %eax,[%ebp+0×10] // load n add R7,Rebp,0×10 ;form logical address into R7 chkl R7,Rss_limit ; Check the logical address against segment lower limit chku R7,R_FFFFFFFF ; Check the logical address against segment upper limit add R8,R7,Rss_base ;add the segment base to form the linear address ld Reax,[R8] ;load n from memory address in R8 intoReax lea %ecx,[%eax-1] // decrement n sub Recx,Reax,1 ;decrement n mov [%ebp+0×10],%ecx // store(n-1) add R9,Rebp,0×10 ;form logical address into R9 chkl R9,Rss_limit ; Check the logical address against segment lower limit chku R9,R_FFFFFFFF ; Check the logical address against segment upper limit add R10,R9,Rss_base ;add the segment base to form the linear address st [R10],Recx ;store n-1 in Recx into memory using address in R10 and %eax,%eax // test n to set the condition codes andcc R11,Reax,Reax ;test n to set the condition codes jg .-0×1b // branch to the top of this section if “n>0“
Adds instructions to maintain the target X86 instruction pointer“eip”and the commit instructions that use the special morph host hardware to update X86 state. mov %ecx,[%ebp+0×c] // load c add R0,Rebp,0×c chkl R0,Rss_limit chku R0,R_FFFFFFFF add R1,R0,Rss_base ld Recx,[R1] add Reip,Reip 3 ;add X86 instruction length to eip in Reip commit ;commits working state to official state <dp n="d28"/> mov %eax,[%ebp+0×8] // load s add R2,Rebp,0×8 chkl R2,Rss_limit chku R2,R_FFFFFFFF add R3,R2,Rss_base ld Reax,[R3] add Reip,Reip,3 ;add X86 instruction length to eip in Reip commit ;commits working state to official state mov [%eax],%ecx // store c into [s] chku Reax,Rds_limit add R4,Reax,Rds_base st [R4],Recx add Reip,Reip,2 ; add X86 instruction length to eip in Reip commit ; commits working state to official state add %eax,#4 // increment s by 4 addcc Reax,Reax,4 add Reip,Reip,5 ; add X86 instruction length to eip in Reip commit ; commits working state to official state mov [%ebp+0×8],%eax // store(s+4) add R5,Rebp,0×8 chkl R5,Rss_limit chku R5,R_FFFFFFFF add R6,R5,Rss_base st [R6],Reax add Reip,Reip,3 ; add X86 instruction length to eip in Reip commit ; commits working state to official state mov %eax,[%ebp+0×10] // load n add R7,Rebp,0×10 chkl R7,Rss_limit chku R7,R_FFFFFFFF add R8,R7,Rss_base ld Reax,[R8] add Reip,Reip,3 ; add X86 instruction length to eip in Reip commit ; commits working state to official state <dp n="d29"/> lea %ecx,[%eax-1] // decrement n sub Recx,Reax,1 add Reip,Reip,3 ; add X86 instruction length to eip in Reip commit ; commits working state to official state mov [%ebp+0×10],%ecx // store(n-1) add R9,Rebp,0×10 chkl R9,Rss_limit chku R9,R_FFFFFFFF add R10,R9,Rss_base st [R10],Recx add X86 instruction length to add Reip,Reip,3 eip in Reip ; commits working state to official state and %eax,%eax // test n andcc R11,Reax,Reax add Reip,Reip,3 ; commits working state to commit official state jg .-0×1b // branch“n>0” add Rseq,Reip,Length(jg) ldc Rtarg,EIP(target) selcc Reip,Rseq,Rtarg ; commits working state to commit official state jg mainloop,mainloop Host Instruction key; commit=copy the contents of the working registers to the official target registers and send working stores to memory
Optimization ==================================================================== Assumes 32 bit flat address space whlch allows the elimination of segment base additions and some limit checks. Win32 uses Flat 32b segmentation Record Assumptions: Rss_base==O Rss_limit==O Rds_base==O Rds_limit==FFFFFFFF SS and DS protection check mov %ecx,[%ebp+0×c] // load c add R0,Rebp,0×c chku R0,R_FFFFFFFF ld Recx,[R0] add Reip,Reip,3 commit mov %eax,[%ebp+0×8] // load s add R2,Rebp,0×8 chku R2,R_FFFFFFFF ld Reax,[R2] add Reip,Reip,3 commit <dp n="d31"/> mov [%eax],%ecx // store c into [s] chku Reax,R_FFFFFFFF st [Reax],Recx add Reip,Reip,2 commit add %eax,#4 // increment s by 4 addcc Reax,Reax,4 add Reip,Reip,5 commit mov [%ebp+0×8],%eax // store(s+4) add R5,Rebp,0×8 chku R5,R_FFFFFFFF st [R5],Reax add Reip,Reip,3 mov %eax,[%ebp+0×10] // load n add R7,Rebp,0×10 chku R7,R_FFFFFFFF ld Reax,[R7] add Reip,Reip,3 commit lea %ecx,[%eax-1] // decrement n sub Recx,Reax,1 add Reip,Reip,3 commit mov [%ebp+0×10],%ecx // store(n-1) add R9,Rebp,0×10 chku R9,R_FFFFFFFF st [R9],Recx add Reip,Reip,3 commit and %eax,%eax // test n andcc R11,Reax,Reax add Reip,Reip,3 commit jg .-0×1b // branch“n>0” add Rseq,Reip,Length(jg) ldc Rtarg,EIP(target) selcc Reip,Rseq,Rtarg commit jg mainloop,mainloop <dp n="d32"/> mov %ecx,[%ebp+0×c] // load c add R0,Rebp,0×c ld Recx,[R0] add Reip,Reip,3 commit mov %eax,[%ebp+0×8] // load s add R2,Rebp,0×8 ld Reax,[R2] add Reip,Reip,3 commit mov [%eax],%ecx // store c into [s] st [Reax],Recx add Reip,Reip,2 commit add %eax,#4 // increment s by 4 addcc Reax,Reax,4 add Reip,Reip,5 commit
mov [%ebp+0×8],%eax // store(s+4) add R5,Rebp,0×8 st [Rs],Reax add Reip,Reip,3 commit mov %eax,[%ebp+0×10] // load n add R7,Rebp,0×10 ld Reax,[R7] add Reip,Reip,3 lea %ecx,[%eax-1] // decrement n sub Recx,Reax,1 add Reip,Reip,3 commit mov [%ebp+0×10],%ecx // stcre(n-1) add R9,Rebp,0×10 st [R9],Recx add Reip,Reip,3 commit and %eax,%eax // test n andcc R11,Reax,Reax add Reip,Reip,3 commit jg .-0×1b // branch“n>0” add Rseq,Reip,Length(jg) ldc Rtarg,EIP (target) selcc Reip,Rseq,Rtarg commit jg mainloop,mainloop Host Instruction key: selcc=Select one of the source registers and copy its contents to the destination register based on the condition codes. <dp n="d34"/> Notation:[...] indicates an address expression for a memory operand. In the example above,the address for a memory operand is formed from the contents of a register added to a hexadecimal constant indicated by the Ox prefix. Target registers are indicated with the % prefix, e.g.%ecx is the ecx register. The destination of an operation is to the left. Target instruction key: jg=jump if greater mov=move lea=load effective address and=AND
Detect and eliminate redundant address calculations.The example shows the code after eliminating the redundant operations. mov %ecx,[%ebp+0×c] // load c add R0,Rebp,0×c ld Recx,[R0] add Reip,Reip,3 commit <dp n="d35"/> mov %eax,[%ebp+0×8] // load s add R2,Rebp,0×8 ld Reax,[R2] add Reip,Reip,3 commit mov [%eax],%ecx // store c into [s] st [Reax],Recx add Reip,Reip,2 commit add %eax,#4 // increment s by 4 addcc Reax,Reax,4 add Reip,Reip,5 commit mov [%ebp+0×8],%eax // store(s+4) st [R2],Reax add Reip,Reip,3 commit mov %eax,[%ebp+0×10] // load n add R7,Rebp,0×10 ld Reax,[R7] add Reip,Reip,3 commit lea %ecx,[%eax-1] // decrement n sub Recx,Reax,1 add Reip,Reip,3 commit mov [%ebp+0×10],%ecx // store(n-1) st [R7],Recx add Reip,Reip,3 commit and %eax,%eax // test n andcc R11,Reax,Reax add Reip,Reip,3 commit jg .-0×1b // branch“n>0” add Rseq,Reip,Length(jg) ldc Rtarg,EIP(target) selcc Reip,Rseq,Rtarg commit jg mainloop,mainloop
Assume that target exceptions will not occur within the translation so delay updating elp and target state. mov %ecx,[%ebp+0×c] // load c add R0,Rebp,0×c ld Recx,[R0] mov %eax,[%ebp+0×8] // load s add R2,Rebp,0×8 ld Reax,[R2] mov [%eax],%ecx // store c into [s] st [Reax],Recx add %eax,#4 // increment s by 4 add Reax,Reax,4 mov [%ebp+0×8],%eax // store(s+4) st [R2],Reax mov %eax,[%ebp+0×10] // load n add R7,Rebp,0×10 ld Reax,[R7] lea %ecx,[%eax-1] // decrement n sub Recx,Reax,1 <dp n="d37"/> mov [%ebp+0×10],%ecx // store(n-1) st [R7],Recx and %eax,%eax // test n andcc R11,Reax,Reax jg .-0×1b // branch“n>0” add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) selcc Reip,Rseq,Rtarg commit jg mainloop,mainloop
In summary: add R0,Rebp,0×c ld Recx,[R0] add R2,Rebp,0×8 ld Reax,[R2] st [Reax],Recx add Reax,Reax,4 st [R2],Reax add R7,Rebp,0×10 ld Reax,[R7] // Live out sub Recx,Reax,1 // Live out st [R7],Recx andcc R11,Reax,Reax add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) selcc Reip,Rseq,Rtarg jg mainlocp,mainloop The comment“Live Out”refers to the need to actually maintain Reax and Recx ccrrectly prior to the commit. Otherwise further optimization might be possible. ====================================================================
Renaming to reduce register resource dependencies.This will allow subsequent scheduling to be more effective.From this point on,the original target X86 code is omitted as the relationship between individual target X86 instructions and host instructions becomes increasingly blurred. add R0,Rebp,0×c ld R1,[R0] add R2,Rebp,0×8 ld R3,[R2] st [R3],R1 add R4,R3,4 st [R2],R4 add R7,Rebp,0×10 ld Reax,[R7] // Live out sub Recx,Reax,1 // Live out st [R7],Recx andcc R11,Reax,Reax add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) selcc Reip,Rseq,Rtarg jg mainloop,mainloop
After the scheduling process which organizes the primitive host operations as multiple operations that can execute in the parallel on the host VLIW hardware.Each line shows the parallel operations that the VLIW machine executes,and the“&”indicates the parallelism. add R2,Rebp,0×8 & add R0,Rebp,0×c nop & add R7,Rebp,0×10 ld R3,[R2] & add Rseq,Reip,Length(block) ld R1,[R0] & add R4,R3,4 st [R3],R1 & ldc Rtarg,EIP(target) ld Reax,[R7] & nop st [R2],R4 & sub Recx,Reax,1 st [R7],Recx & andcc R11,Reax,Reax selcc Reip,Rseq,Rtarg & jg mainloop,mainloop & commit Host Instruction key: nop=no operation
Resolve host branch targets and chain stored translations add R2,Rebp,0×8 & add R0,Rebp,0×c nop & add R7,Rebp,0×l0 ld R3,[R2] & add Rseq,Reip,Length(block) ld R1,[R0] & add R4,R3,4 st [R3],R1 & ldc Rtarg,EIP(target) ld Reax,[R7] & nop st [R2],R4 & sub Recx,Reax,1 st [R7],Recx & andcc R11,Reax,Reax selcc Reip,Rseq,Rtarg & jg Sequential,Target & commit
Advanced Optimizations,Backward Code Motion: This and subsequent examples start with the code prior to scheduling. This optimization first depends on detecting that the code is a loop. Then invariant operations can be moved out of the loop body and executed once before entering the loop body. entry: add R0,Rebp,0×c add R2,Rebp,0×8 add R7,Rebp,0×10 add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) Loop: ld R1,[R0] ld R3,[R2] st [R3],R1 add R4,R3,4 st [R2],R4 ld Reax,[R7] sub Recx,Reax,1 st [R7],Recx andcc R11,Reax,Reax selcc Reip,Rseq,Rtarg jg mainloop,Loop
Schedule the loop body after backward code motion.For example purposes,only the code in the loop body is shown scheduled Entry: add R0,Rebp,0×c add R2,Rebp,0×8 add R7,Rebp,0×10 add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) Loop: ld R3,[R2] & nop ld R1,[R0] & add R4,R3,4 st [R3],R1 & nop ld Reax,[R7] & nop st [R2],R4 & sub Recx,Reax,1
After Backward Code Motion: Target: add R0,Rebp,0×c add R2,Rebp,0×8 add R7,Rebp,0×10 add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) Loop: ld R1,[R0] ld R3,[R2] st [R3],R1 add R4,R3,4 st [R2],R4 ld Reax,[R7] // Live out sub Recx,Reax,1 // Live out st [R7],Recx andcc R11,Reax,Reax selcc Reip,Rseq,Rtarg commit jg mainloop,Loop <dp n="d42"/> Register Allocation: This shows the use of register alias detection hardware of the morph host that allows variables to be safely moved from memory into registers. The starting point is the code after“backward code motion”. This shows the optimization that can eliminate loads. First the loads are performed. The address is protected by the alias hardware,such that should a store to the address occur,an“alias” exception is raised. The loads in the loop body are then replaced with copies. After the main body of the loop,the alias hardware is freed. Entry: add R0,Rebp,0×c add R2,Rebp,0×8 add R7,Rebp,0×10 add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) ld Rc,[R0] ;First do the load of the variable from memory prot [R0],Alias1 ;Then protect the memory location from stores ld Rs,[R2] prot [R2],Alias2 ld Rn,[R7] prot [R7],Alias3 Loop: copy R1,Rc copy R3,Rs st [R3],R1 add R4,Rs 4 copy Rs,R4 st [R2],Rs,NoAliasCheck copy Reax,Rn // Live out sub Recx,Reax,1 // Live out copy Rn,Recx st [R7],Rn,noAliasCheck andcc R11,Reax,Reax selcc Reip,Rseq,Rtarg commit jg Epilog,Loop Eoilog: FA Alias1 Free the alias detection hardware FA Alias2 Free the alias detection hardware FA Alias3 Free the alias detection hardware j Sequential Host Instruction key: protect=protect address from loads FA=free alias copy=copy j=jump
Copy Propagation: After using the alias hardware to turn loads within the loop body into copies,copy propagation allows the elimination of some copies. Entry: add R0,Rebp,0×c add R2,Rebp,0×8 add R7,Rebp,0×10 add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) ld Rc,[R0] prot [R0],Alias1 ld Rs,[R2] prot [R2],Alias2 ld Recx,[R7] prot [R7],Alias3 Loop: st [Rs],Rc add Rs,Rs,4 st [R2],Rs,NoAliasCheck copy Reax,Recx // Live out sub Recx.Reax,1 // Live out st [R7],Recx,NoAliascheck andcc R11,Reax,Reax selcc Reip,Rseq,Rtarg commit jg Epilog.Loop Epilog: FA Alias1 FA Alias2 FA Alias3 j Sequential
Example illustrating scheduling of the loop body only. Entry: add R0,Rebp,0×c add R2,Rebp,0×8 add R7,Rebp,0×10 add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) ld Rc,[R0] prot [R0],Alias1 ld Rs,[R2] prot [R2],Alias2 ld Recx,[R7] prot [R7],Alias3 Loop: st [Rs],Rc, & add Rs,Rs,4 & copy Reax,Recx st [R2],Rs,NAC & sub Recx,Reax,1 st [R7],Recx,NAC & andcc R11,Reax,Reax selcc Reip,Rseq,Rtarg & jg Epilog,Loop & commit Epilog: FA Alias1 FA Alias2 FA Alias3 j Sequential Host Instruction key: NAC=No Alias Check
Store Elimination by use of the alias hardware. Entry: add R0,Rebp,0×c add R2,Rebp,0×8 add R7,Rebp,0×10 add Rseq,Reip,Length(block) ldc Rtarg,EIP(target) ld Rc,[R0] prot [R0],Alias1 ;protect the address from loads and stores ld Rs,[R2] prot [R2],Alias2 ;protect the address from loads and stores ld Recx,[R7] prot [R7],Alias3 ;protect the address from loads and stores Loop: st [Rs],Rc, & add Rs,Rs,4 & copy Reax,Recx sub Recx,Reax,1 & andcc R11,Reax,Reax selcc Reip,Rseq,Rtarg & jg Epilog,Loop & commit Epilog: FA Alias1 FA Alias2 FA Alias3 st [R2],Rs ;writeback the final value of Rs st [R7],Recx ;writeback the final value of Recx j sequential
Claims (22)
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US1997/014118 WO1999008188A1 (en) | 1996-08-20 | 1997-08-11 | A memory controller for detecting a failure of speculation of a component being addressed |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1265204A true CN1265204A (zh) | 2000-08-30 |
CN1161691C CN1161691C (zh) | 2004-08-11 |
Family
ID=22261431
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB971820104A Expired - Fee Related CN1161691C (zh) | 1997-08-11 | 1997-08-11 | 检测被寻址单元预测失败的存储控制器 |
Country Status (9)
Country | Link |
---|---|
US (1) | US5832205A (zh) |
EP (1) | EP1002271B1 (zh) |
JP (1) | JP3615770B2 (zh) |
KR (1) | KR100463810B1 (zh) |
CN (1) | CN1161691C (zh) |
AT (1) | ATE412940T1 (zh) |
CA (1) | CA2283559C (zh) |
DE (1) | DE69739078D1 (zh) |
WO (1) | WO1999008188A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100364274C (zh) * | 2004-02-12 | 2008-01-23 | 国际商业机器公司 | 恢复服务器机架中刀片服务处理器的失败闪存的方法和系统 |
CN1742257B (zh) * | 2003-01-21 | 2010-04-28 | 先进微装置公司 | 用于数据预测的系统及方法 |
CN110297455A (zh) * | 2018-03-23 | 2019-10-01 | 欧姆龙(上海)有限公司 | 可编程逻辑控制器及其自检和恢复方法 |
Families Citing this family (141)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5493687A (en) | 1991-07-08 | 1996-02-20 | Seiko Epson Corporation | RISC microprocessor architecture implementing multiple typed register sets |
US5539911A (en) * | 1991-07-08 | 1996-07-23 | Seiko Epson Corporation | High-performance, superscalar-based computer system with out-of-order instruction execution |
EP0547247B1 (en) * | 1991-07-08 | 2001-04-04 | Seiko Epson Corporation | Extensible risc microprocessor architecture |
US5961629A (en) * | 1991-07-08 | 1999-10-05 | Seiko Epson Corporation | High performance, superscalar-based computer system with out-of-order instruction execution |
WO1993020505A2 (en) | 1992-03-31 | 1993-10-14 | Seiko Epson Corporation | Superscalar risc instruction scheduling |
US5438668A (en) * | 1992-03-31 | 1995-08-01 | Seiko Epson Corporation | System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer |
DE69308548T2 (de) | 1992-05-01 | 1997-06-12 | Seiko Epson Corp | Vorrichtung und verfahren zum befehlsabschluss in einem superskalaren prozessor. |
US6735685B1 (en) | 1992-09-29 | 2004-05-11 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
DE69329778T2 (de) * | 1992-09-29 | 2001-04-26 | Seiko Epson Corp | System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor |
US5628021A (en) | 1992-12-31 | 1997-05-06 | Seiko Epson Corporation | System and method for assigning tags to control instruction processing in a superscalar processor |
EP0682789B1 (en) * | 1992-12-31 | 1998-09-09 | Seiko Epson Corporation | System and method for register renaming |
US6199152B1 (en) * | 1996-08-22 | 2001-03-06 | Transmeta Corporation | Translated memory protection apparatus for an advanced microprocessor |
US6117187A (en) * | 1997-09-30 | 2000-09-12 | Hewlett-Packard Company | Automatic generation of a software installation package |
US6370632B1 (en) | 1997-11-18 | 2002-04-09 | Intrinsity, Inc. | Method and apparatus that enforces a regional memory model in hierarchical memory systems |
US6260131B1 (en) | 1997-11-18 | 2001-07-10 | Intrinsity, Inc. | Method and apparatus for TLB memory ordering |
US6397242B1 (en) | 1998-05-15 | 2002-05-28 | Vmware, Inc. | Virtualization system including a virtual machine monitor for a computer with a segmented architecture |
US6496847B1 (en) | 1998-05-15 | 2002-12-17 | Vmware, Inc. | System and method for virtualizing computer systems |
US6205537B1 (en) | 1998-07-16 | 2001-03-20 | University Of Rochester | Mechanism for dynamically adapting the complexity of a microprocessor |
US6704925B1 (en) | 1998-09-10 | 2004-03-09 | Vmware, Inc. | Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache |
US8631066B2 (en) * | 1998-09-10 | 2014-01-14 | Vmware, Inc. | Mechanism for providing virtual machines for use by multiple users |
US6308318B2 (en) * | 1998-10-07 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for handling asynchronous exceptions in a dynamic translation system |
JP4573189B2 (ja) * | 1998-10-10 | 2010-11-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムコード変換方法 |
US7516453B1 (en) * | 1998-10-26 | 2009-04-07 | Vmware, Inc. | Binary translator with precise exception synchronization mechanism |
JP3583937B2 (ja) * | 1998-12-28 | 2004-11-04 | 富士通株式会社 | 情報処理装置 |
US6311326B1 (en) * | 1999-01-04 | 2001-10-30 | Emc Corporation | Online debugging and tracing system and method |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
EP2275930B1 (en) * | 1999-01-28 | 2017-06-14 | Advanced Silicon Technologies, LLC | Executing programs for a first computer architecture on a computer of a second architecture |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US6978462B1 (en) | 1999-01-28 | 2005-12-20 | Ati International Srl | Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled |
US7275246B1 (en) | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US6826748B1 (en) | 1999-01-28 | 2004-11-30 | Ati International Srl | Profiling program execution into registers of a computer |
US8121828B2 (en) | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
US7013456B1 (en) | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
US6662354B1 (en) | 1999-01-29 | 2003-12-09 | Unisys Corporation | Determining destinations of a dynamic branch |
US7065750B2 (en) * | 1999-02-17 | 2006-06-20 | Elbrus International | Method and apparatus for preserving precise exceptions in binary translated code |
US6397267B1 (en) * | 1999-03-04 | 2002-05-28 | Sun Microsystems, Inc. | Redirected I/O for scalable performance storage architecture |
US7058932B1 (en) | 1999-04-19 | 2006-06-06 | Unisys Corporation | System, computer program product, and methods for emulation of computer programs |
US6725189B2 (en) * | 1999-04-22 | 2004-04-20 | Unisys Corporation | Adapter for coupling a legacy operating system to a driver of an I/O channel which has an incompatible native operating system interface |
GB2349486B (en) * | 1999-04-27 | 2001-05-30 | Univ Manchester | Exception handling in program code conversion. |
US7353163B2 (en) * | 1999-04-27 | 2008-04-01 | Transitive Limited | Exception handling method and apparatus for use in program code conversion |
DE69938621D1 (de) * | 1999-05-03 | 2008-06-12 | St Microelectronics Sa | Befehlausgabe in einem Rechner |
US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
US6442664B1 (en) * | 1999-06-01 | 2002-08-27 | International Business Machines Corporation | Computer memory address translation system |
US7089404B1 (en) * | 1999-06-14 | 2006-08-08 | Transmeta Corporation | Method and apparatus for enhancing scheduling in an advanced microprocessor |
US7634635B1 (en) | 1999-06-14 | 2009-12-15 | Brian Holscher | Systems and methods for reordering processor instructions |
US6549959B1 (en) | 1999-08-30 | 2003-04-15 | Ati International Srl | Detecting modification to computer memory by a DMA device |
US6880152B1 (en) | 1999-10-13 | 2005-04-12 | Transmeta Corporation | Method of determining a mode of code generation |
US6363336B1 (en) * | 1999-10-13 | 2002-03-26 | Transmeta Corporation | Fine grain translation discrimination |
US6714904B1 (en) * | 1999-10-13 | 2004-03-30 | Transmeta Corporation | System for using rate of exception event generation during execution of translated instructions to control optimization of the translated instructions |
US7761857B1 (en) | 1999-10-13 | 2010-07-20 | Robert Bedichek | Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts |
EP1912124B8 (en) | 1999-10-14 | 2013-01-09 | Bluearc UK Limited | Apparatus and system for implementation of service functions |
US6748589B1 (en) | 1999-10-20 | 2004-06-08 | Transmeta Corporation | Method for increasing the speed of speculative execution |
US6751583B1 (en) | 1999-10-29 | 2004-06-15 | Vast Systems Technology Corporation | Hardware and software co-simulation including simulating a target processor using binary translation |
US6594750B1 (en) * | 1999-12-08 | 2003-07-15 | Ati International Srl | Method and apparatus for handling an accessed bit in a page table entry |
US6845353B1 (en) | 1999-12-23 | 2005-01-18 | Transmeta Corporation | Interpage prologue to protect virtual address mappings |
JP2001195250A (ja) * | 2000-01-13 | 2001-07-19 | Mitsubishi Electric Corp | 命令トランスレータ、トランスレータ付命令メモリおよびそれらを用いたデータ処理装置 |
US7100061B2 (en) * | 2000-01-18 | 2006-08-29 | Transmeta Corporation | Adaptive power control |
US6934832B1 (en) | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
US7085914B1 (en) | 2000-01-27 | 2006-08-01 | International Business Machines Corporation | Methods for renaming stack references to processor registers |
US6763327B1 (en) * | 2000-02-17 | 2004-07-13 | Tensilica, Inc. | Abstraction of configurable processor functionality for operating systems portability |
US7036106B1 (en) * | 2000-02-17 | 2006-04-25 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6594821B1 (en) | 2000-03-30 | 2003-07-15 | Transmeta Corporation | Translation consistency checking for modified target instructions by comparing to original copy |
US6349361B1 (en) | 2000-03-31 | 2002-02-19 | International Business Machines Corporation | Methods and apparatus for reordering and renaming memory references in a multiprocessor computer system |
US6968469B1 (en) | 2000-06-16 | 2005-11-22 | Transmeta Corporation | System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored |
US6615300B1 (en) | 2000-06-19 | 2003-09-02 | Transmeta Corporation | Fast look-up of indirect branch destination in a dynamic translation system |
US6826682B1 (en) | 2000-06-26 | 2004-11-30 | Transmeta Corporation | Floating point exception handling in pipelined processor using special instruction to detect generated exception and execute instructions singly from known correct state |
US7389208B1 (en) * | 2000-06-30 | 2008-06-17 | Accord Solutions, Inc. | System and method for dynamic knowledge construction |
US7260731B1 (en) * | 2000-10-23 | 2007-08-21 | Transmeta Corporation | Saving power when in or transitioning to a static mode of a processor |
US6772372B2 (en) * | 2001-03-06 | 2004-08-03 | Hewlett-Packard Development Company, L.P. | System and method for monitoring unaligned memory accesses |
US6775823B2 (en) * | 2001-03-07 | 2004-08-10 | Palmsource, Inc. | Method and system for on-line submission and debug of software code for a portable computer system or electronic device |
JP3610915B2 (ja) * | 2001-03-19 | 2005-01-19 | 株式会社デンソー | 処理実行装置及びプログラム |
US7013460B2 (en) * | 2001-05-15 | 2006-03-14 | Hewlett-Packard Development Company, L.P. | Specifying an invariant property (range of addresses) in the annotation in source code of the computer program |
US7266811B2 (en) * | 2001-09-05 | 2007-09-04 | Conexant Systems, Inc. | Methods, systems, and computer program products for translating machine code associated with a first processor for execution on a second processor |
US7251594B2 (en) * | 2001-12-21 | 2007-07-31 | Hitachi, Ltd. | Execution time modification of instruction emulation parameters |
JP4374834B2 (ja) * | 2002-08-12 | 2009-12-02 | セイコーエプソン株式会社 | カートリッジおよび記録装置 |
US8108843B2 (en) * | 2002-09-17 | 2012-01-31 | International Business Machines Corporation | Hybrid mechanism for more efficient emulation and method therefor |
US7496494B2 (en) * | 2002-09-17 | 2009-02-24 | International Business Machines Corporation | Method and system for multiprocessor emulation on a multiprocessor host system |
US7953588B2 (en) * | 2002-09-17 | 2011-05-31 | International Business Machines Corporation | Method and system for efficient emulation of multiprocessor address translation on a multiprocessor host |
US9043194B2 (en) * | 2002-09-17 | 2015-05-26 | International Business Machines Corporation | Method and system for efficient emulation of multiprocessor memory consistency |
US7146607B2 (en) * | 2002-09-17 | 2006-12-05 | International Business Machines Corporation | Method and system for transparent dynamic optimization in a multiprocessing environment |
US7457822B1 (en) | 2002-11-01 | 2008-11-25 | Bluearc Uk Limited | Apparatus and method for hardware-based file system |
US8041735B1 (en) | 2002-11-01 | 2011-10-18 | Bluearc Uk Limited | Distributed file system and method |
US20040122800A1 (en) * | 2002-12-23 | 2004-06-24 | Nair Sreekumar R. | Method and apparatus for hardware assisted control redirection of original computer code to transformed code |
US7310723B1 (en) | 2003-04-02 | 2007-12-18 | Transmeta Corporation | Methods and systems employing a flag for deferring exception handling to a commit or rollback point |
JP2005032018A (ja) * | 2003-07-04 | 2005-02-03 | Semiconductor Energy Lab Co Ltd | 遺伝的アルゴリズムを用いたマイクロプロセッサ |
US7698539B1 (en) * | 2003-07-16 | 2010-04-13 | Banning John P | System and method of instruction modification |
US7606997B1 (en) | 2003-07-18 | 2009-10-20 | Guillermo Rozas | Method and system for using one or more address bits and an instruction to increase an instruction set |
US7424620B2 (en) | 2003-09-25 | 2008-09-09 | Sun Microsystems, Inc. | Interleaved data and instruction streams for application program obfuscation |
US8220058B2 (en) | 2003-09-25 | 2012-07-10 | Oracle America, Inc. | Rendering and encryption engine for application program obfuscation |
US7353499B2 (en) | 2003-09-25 | 2008-04-01 | Sun Microsystems, Inc. | Multiple instruction dispatch tables for application program obfuscation |
US7415618B2 (en) | 2003-09-25 | 2008-08-19 | Sun Microsystems, Inc. | Permutation of opcode values for application program obfuscation |
US7363620B2 (en) | 2003-09-25 | 2008-04-22 | Sun Microsystems, Inc. | Non-linear execution of application program instructions for application program obfuscation |
US20050165837A1 (en) * | 2004-01-22 | 2005-07-28 | International Business Machines Corporation | System and method for embedded java memory footprint performance improvement |
US20050183077A1 (en) * | 2004-02-12 | 2005-08-18 | International Business Machines Corporation | System and method for JIT memory footprint improvement for embedded java devices |
US7734797B2 (en) * | 2004-03-29 | 2010-06-08 | Marvell International Ltd. | Inter-processor communication link with manageability port |
US7237085B2 (en) * | 2004-05-28 | 2007-06-26 | Oracle International Corporation | Architecture for a scalable heap analysis tool |
US7225297B2 (en) * | 2004-05-28 | 2007-05-29 | International Business Machines Corporation | Compressed cache lines incorporating embedded prefetch history data |
US7278014B2 (en) * | 2004-12-02 | 2007-10-02 | International Business Machines Corporation | System and method for simulating hardware interrupts |
GB2425372B (en) * | 2005-04-20 | 2007-06-13 | Transitive Ltd | Method and apparatus for precise handling of exceptions during program code conversion |
US8413162B1 (en) | 2005-06-28 | 2013-04-02 | Guillermo J. Rozas | Multi-threading based on rollback |
EP1752874A1 (en) * | 2005-07-19 | 2007-02-14 | Alcatel | Adaptive evolutionary computer software product |
US7684973B2 (en) * | 2005-12-29 | 2010-03-23 | Bull Hn Information Systems Inc. | Performance improvement for software emulation of central processor unit utilizing signal handler |
US9658849B2 (en) * | 2006-07-06 | 2017-05-23 | Imperas Software Ltd. | Processor simulation environment |
JP5226328B2 (ja) * | 2007-03-27 | 2013-07-03 | パナソニック株式会社 | コード変換装置 |
US9043553B2 (en) * | 2007-06-27 | 2015-05-26 | Microsoft Technology Licensing, Llc | Leveraging transactional memory hardware to accelerate virtualization and emulation |
US8176253B2 (en) * | 2007-06-27 | 2012-05-08 | Microsoft Corporation | Leveraging transactional memory hardware to accelerate virtualization and emulation |
US8266387B2 (en) * | 2007-06-27 | 2012-09-11 | Microsoft Corporation | Leveraging transactional memory hardware to accelerate virtualization emulation |
US8959277B2 (en) * | 2008-12-12 | 2015-02-17 | Oracle America, Inc. | Facilitating gated stores without data bypass |
US8078854B2 (en) * | 2008-12-12 | 2011-12-13 | Oracle America, Inc. | Using register rename maps to facilitate precise exception semantics |
US20100153776A1 (en) * | 2008-12-12 | 2010-06-17 | Sun Microsystems, Inc. | Using safepoints to provide precise exception semantics for a virtual machine |
US20100162045A1 (en) * | 2008-12-22 | 2010-06-24 | Russ Craig F | Method, apparatus and system for restarting an emulated mainframe iop |
US8898051B2 (en) * | 2009-06-12 | 2014-11-25 | Cadence Design Systems, Inc. | System and method for implementing a trace interface |
US8392694B2 (en) * | 2009-09-15 | 2013-03-05 | International Business Machines Corporation | System and method for software initiated checkpoint operations |
US9645822B2 (en) | 2011-04-07 | 2017-05-09 | Via Technologies, Inc | Conditional store instructions in an out-of-order execution microprocessor |
US9043580B2 (en) | 2011-04-07 | 2015-05-26 | Via Technologies, Inc. | Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA) |
US9244686B2 (en) | 2011-04-07 | 2016-01-26 | Via Technologies, Inc. | Microprocessor that translates conditional load/store instructions into variable number of microinstructions |
US9128701B2 (en) | 2011-04-07 | 2015-09-08 | Via Technologies, Inc. | Generating constant for microinstructions from modified immediate field during instruction translation |
US9336180B2 (en) | 2011-04-07 | 2016-05-10 | Via Technologies, Inc. | Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode |
US8880857B2 (en) | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor |
TWI450196B (zh) | 2011-04-07 | 2014-08-21 | Via Tech Inc | 非循序執行微處理器之條件儲存指令 |
EP2631787A3 (en) | 2011-04-07 | 2016-04-06 | VIA Technologies, Inc. | Load multiple and store multiple instructions in a microprocessor that emulates banked registers |
US9317288B2 (en) | 2011-04-07 | 2016-04-19 | Via Technologies, Inc. | Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US8880851B2 (en) | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US9146742B2 (en) | 2011-04-07 | 2015-09-29 | Via Technologies, Inc. | Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA |
US9176733B2 (en) | 2011-04-07 | 2015-11-03 | Via Technologies, Inc. | Load multiple and store multiple instructions in a microprocessor that emulates banked registers |
US9292470B2 (en) | 2011-04-07 | 2016-03-22 | Via Technologies, Inc. | Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program |
US8924695B2 (en) | 2011-04-07 | 2014-12-30 | Via Technologies, Inc. | Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor |
US9032189B2 (en) | 2011-04-07 | 2015-05-12 | Via Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
EP2624126B1 (en) | 2011-04-07 | 2016-11-02 | VIA Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
US9898291B2 (en) | 2011-04-07 | 2018-02-20 | Via Technologies, Inc. | Microprocessor with arm and X86 instruction length decoders |
US9274795B2 (en) | 2011-04-07 | 2016-03-01 | Via Technologies, Inc. | Conditional non-branch instruction prediction |
US9141389B2 (en) | 2011-04-07 | 2015-09-22 | Via Technologies, Inc. | Heterogeneous ISA microprocessor with shared hardware ISA registers |
US9378019B2 (en) | 2011-04-07 | 2016-06-28 | Via Technologies, Inc. | Conditional load instructions in an out-of-order execution microprocessor |
EP3179363B1 (en) | 2012-08-31 | 2019-04-24 | VIA Technologies, Inc. | Microprocessor that enables arm isa program to access general purpose registers written by x86 isa program |
EP2704001B1 (en) | 2012-08-31 | 2016-10-19 | VIA Technologies, Inc. | Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode |
US9250900B1 (en) | 2014-10-01 | 2016-02-02 | Cadence Design Systems, Inc. | Method, system, and computer program product for implementing a microprocessor with a customizable register file bypass network |
US20180101384A1 (en) * | 2015-04-17 | 2018-04-12 | Hewlett Packard Enterprise Development Lp | Morphed instruction according to configuration update |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS61166653A (ja) * | 1985-01-19 | 1986-07-28 | Panafacom Ltd | アドレス変換エラー処理方法 |
JP2589713B2 (ja) * | 1987-11-20 | 1997-03-12 | 株式会社日立製作所 | データプロセッサ及びデータ処理システム |
US5142672A (en) * | 1987-12-15 | 1992-08-25 | Advanced Micro Devices, Inc. | Data transfer controller incorporating direct memory access channels and address mapped input/output windows |
GB2260004B (en) * | 1991-09-30 | 1995-02-08 | Apple Computer | Memory management unit for a computer system |
US5465337A (en) * | 1992-08-13 | 1995-11-07 | Sun Microsystems, Inc. | Method and apparatus for a memory management unit supporting multiple page sizes |
US5442766A (en) * | 1992-10-09 | 1995-08-15 | International Business Machines Corporation | Method and system for distributed instruction address translation in a multiscalar data processing system |
IE940855A1 (en) * | 1993-12-20 | 1995-06-28 | Motorola Inc | Data processor with speculative instruction fetching and¹method of operation |
US5561814A (en) * | 1993-12-22 | 1996-10-01 | Intel Corporation | Methods and apparatus for determining memory operating characteristics for given memory locations via assigned address ranges |
US5526510A (en) * | 1994-02-28 | 1996-06-11 | Intel Corporation | Method and apparatus for implementing a single clock cycle line replacement in a data cache unit |
US5566298A (en) * | 1994-03-01 | 1996-10-15 | Intel Corporation | Method for state recovery during assist and restart in a decoder having an alias mechanism |
US5564111A (en) * | 1994-09-30 | 1996-10-08 | Intel Corporation | Method and apparatus for implementing a non-blocking translation lookaside buffer |
US5613083A (en) * | 1994-09-30 | 1997-03-18 | Intel Corporation | Translation lookaside buffer that is non-blocking in response to a miss for use within a microprocessor capable of processing speculative instructions |
-
1996
- 1996-08-20 US US08/700,302 patent/US5832205A/en not_active Expired - Lifetime
-
1997
- 1997-08-11 EP EP97937205A patent/EP1002271B1/en not_active Expired - Lifetime
- 1997-08-11 WO PCT/US1997/014118 patent/WO1999008188A1/en active IP Right Grant
- 1997-08-11 AT AT97937205T patent/ATE412940T1/de not_active IP Right Cessation
- 1997-08-11 JP JP51207399A patent/JP3615770B2/ja not_active Expired - Fee Related
- 1997-08-11 CA CA002283559A patent/CA2283559C/en not_active Expired - Fee Related
- 1997-08-11 DE DE69739078T patent/DE69739078D1/de not_active Expired - Lifetime
- 1997-08-11 CN CNB971820104A patent/CN1161691C/zh not_active Expired - Fee Related
- 1997-08-11 KR KR10-1999-7012139A patent/KR100463810B1/ko not_active IP Right Cessation
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1742257B (zh) * | 2003-01-21 | 2010-04-28 | 先进微装置公司 | 用于数据预测的系统及方法 |
CN100364274C (zh) * | 2004-02-12 | 2008-01-23 | 国际商业机器公司 | 恢复服务器机架中刀片服务处理器的失败闪存的方法和系统 |
CN110297455A (zh) * | 2018-03-23 | 2019-10-01 | 欧姆龙(上海)有限公司 | 可编程逻辑控制器及其自检和恢复方法 |
Also Published As
Publication number | Publication date |
---|---|
DE69739078D1 (de) | 2008-12-11 |
KR20010014095A (ko) | 2001-02-26 |
JP2001519956A (ja) | 2001-10-23 |
US5832205A (en) | 1998-11-03 |
EP1002271A4 (en) | 2002-09-25 |
CN1161691C (zh) | 2004-08-11 |
JP3615770B2 (ja) | 2005-02-02 |
WO1999008188A1 (en) | 1999-02-18 |
KR100463810B1 (ko) | 2004-12-29 |
ATE412940T1 (de) | 2008-11-15 |
EP1002271B1 (en) | 2008-10-29 |
CA2283559C (en) | 2004-05-25 |
EP1002271A1 (en) | 2000-05-24 |
CA2283559A1 (en) | 1999-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1161691C (zh) | 检测被寻址单元预测失败的存储控制器 | |
CN1141647C (zh) | 赋予高级微处理器内存储器数据别名的方法和装置 | |
CN1103079C (zh) | 用于高级微处理器的门控存储缓冲器 | |
US6031992A (en) | Combining hardware and software to provide an improved microprocessor | |
US7716452B1 (en) | Translated memory protection apparatus for an advanced microprocessor | |
KR100443759B1 (ko) | 개선된 마이크로프로세서 | |
KR100421687B1 (ko) | 개선된 마이크로프로세서를 위한 변환 메모리 보호 장치 | |
KR100522468B1 (ko) | 타겟 프로세서의 상태를 일시적으로 홀딩하는 장치를 갖는 호스트 마이크로프로세서 | |
CN1107909C (zh) | 带临时保存目标处理器状态的装置的主处理器 | |
CN1163826C (zh) | 改进的微处理器 | |
CN1286772A (zh) | 用于高级微处理器的翻译存储器保护装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: TRANSMITAR CO., LTD Free format text: FORMER OWNER: TRANSMITAR CO., LTD. Effective date: 20091106 Owner name: KNOWLEDGE VENTURE CAPITAL ROMPLAST-14 O., LTD Free format text: FORMER OWNER: TRANSMITAR CO., LTD Effective date: 20091106 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20091106 Address after: Nevada Patentee after: TRANSMETA Corp. Address before: California, USA Patentee before: Full simeida LLC Effective date of registration: 20091106 Address after: California, USA Patentee after: Full simeida LLC Address before: California, USA Patentee before: Transmeta Corp. |
|
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20040811 Termination date: 20120811 |