IP Library Granted Patent US 8,839,274
Granted Patent B2
US 8,839,274 · App. 13/227,111 · Granted Sep 16, 2014

Accelerated class check

Inventors: Gil Tene (Los Altos Hills, CA); Cliff N. Click, Jr. (San Jose, CA); Murali Sundaresan (Sunnyvale, CA); Michael A. Wolf (San Francisco, CA)
Assignee: Azul Systems, Inc.
G06F9/3016G06F9/443G06F9/30167
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,839,274
App. No.
13/227,111
Granted
Sep 16, 2014
Kind
B2
Abstract

Handling a virtual method call includes extracting, from a pointer to an object, an identifier associated with the class of the object, the pointer to the object being associated with the virtual method call, and the identifier being embedded within the pointer; using the identifier to obtain a virtual method table, including locating a first entry in a class identifier table mapping a plurality of class identifiers to a corresponding plurality of class data, the first entry being associated with the identifier and comprising the virtual method table or a pointer used to obtain the virtual method table; locating a second entry in the virtual method table, the second entry being associated with the virtual method call; and jumping to an address associated with the second entry to execute code at the address.

Claims (27)

1. A method for handling a virtual method call, comprising:

extracting, from a pointer to an object, a class identifier used to identify a class of the object, the pointer to the object being associated with the virtual method call, and the class identifier being embedded within the pointer;

obtaining a virtual method table at least in part by using the class identifier extracted from the pointer to the object, wherein obtaining the virtual method table does not require loading the object, wherein the obtaining includes locating a first entry in a class identifier table mapping a plurality of class identifiers to a corresponding plurality of class data, the first entry being associated with the class identifier and comprising the virtual method table or a pointer used to obtain the virtual method table, and wherein the pointer includes an object information pointer that is used to obtain the virtual method table;

locating a second entry in the virtual method table, the second entry being associated with the virtual method call, and wherein locating the second entry includes searching the virtual method table to find an address associated with a code section of the virtual method call; and

jumping to an address associated with the second entry to execute code at the address, wherein the jumping includes loading the address value into a register and performing a register jump operation.

2. A method as recited in claim 1 , wherein using the identifier to obtain a virtual method table includes comparing the identifier to a comparison value that is a predicted object class identifier for the object, and in an event that the identifier does not match the comparison value, locating the first entry in the class identifier table associated with the identifier.

3. A method as recited in claim 2 , wherein the comparison value is dynamically determined.

4. A method as recited in claim 3 , wherein reaching the determination includes performing a trap when the extracted identifier does not match the comparison value.

5. A method as recited in claim 2 , wherein the comparison value is associated with a previous virtual call.

6. A method as recited in claim 1 , further comprising modifying data associated with a stack frame.

7. A method as recited in claim 1 , wherein the object is not loaded.

8. A method as recited in claim 1 , wherein the identifier has fewer bits than a number of bits used to represent a class structure associated with the object.

9. A method as recited in claim 1 , wherein the identifier has fewer bits than a total number of bits not implemented as address bits in the pointer to the object.

10. A system for handling a virtual method call, comprising:

a processor configured to:

extract, from a pointer to an object, a class identifier used to identify a class of the object, the pointer to the object being associated with the virtual method call, and the class identifier being embedded within the pointer;

obtain a virtual method table at least in part by using the class identifier extracted from the pointer to the object, wherein obtaining the virtual method table does not require loading the object, wherein the obtaining includes locating a first entry in a class identifier table mapping a plurality of class identifiers to a corresponding plurality of class data, the first entry being associated with the class identifier and comprising the virtual method table or a pointer used to obtain the virtual method table, and wherein the pointer includes an object information pointer that is used to obtain the virtual method table;

locate a second entry in the virtual method table, the second entry being associated with the virtual method call, and wherein locating the second entry includes searching the virtual method table to find an address associated with a code section of the virtual method call; and

jump to an address associated with the second entry to execute code at the address, wherein the jumping includes loading the address value into a register and performing a register jump operation; and

a memory coupled to the processor, to provide the processor with instructions.

11. A system as recited in claim 10 , wherein using the identifier to obtain a virtual method table includes comparing the identifier to a comparison value that is a predicted object class identifier for the object, and in an event that the identifier does not match the comparison value, locating the first entry in the class identifier table associated with the identifier.

12. A system as recited in claim 11 , wherein the comparison value is dynamically determined.

13. A system as recited in claim 12 , wherein reaching the determination includes performing a trap when the extracted identifier does not match the comparison value.

14. A system as recited in claim 11 , wherein the comparison value is associated with a previous virtual call.

15. A system as recited in claim 10 , wherein the processor is further to modify data associated with a stack frame.

16. A system as recited in claim 10 , wherein the identifier has fewer bits than a number of bits used to represent a class structure associated with the object.

17. A system as recited in claim 10 , wherein the identifier has fewer bits than a total number of bits not implemented as address bits in the pointer to the object.

Assignments (7)
SECURITY INTEREST Recorded Dec 3, 2025
From: AZUL SYSTEMS, INC.
To: ARES CAPITAL CORPORATION, AS COLLATERAL AGENT
Reel/Frame 073828/0083 →
RELEASE OF SECURITY INTERESTS IN PATENTS RECORDED AT REEL/FRAME 052293/0121 Recorded Dec 3, 2025
From: GOLUB CAPITAL LLC, AS COLLATERAL AGENT
To: AZUL SYSTEMS, INC.
Reel/Frame 073466/0064 →
RELEASE OF SECURITY INTEREST Recorded Apr 2, 2020
From: SILICON VALLEY BANK
To: AZUL SYSTEMS, INC.
Reel/Frame 052293/0869 →
SECURITY INTEREST Recorded Apr 2, 2020
From: AZUL SYSTEMS, INC.
To: GOLUB CAPITAL LLC, AS COLLATERAL AGENT
Reel/Frame 052293/0121 →
RELEASE OF SECURITY INTEREST Recorded Feb 21, 2019
From: PARTNERS FOR GROWTH IV, L.P.
To: AZUL SYSTEMS, INC.
Reel/Frame 048411/0138 →
SECURITY INTEREST Recorded Mar 1, 2016
From: AZUL SYSTEMS, INC.
To: PARTNERS FOR GROWTH IV, L.P.
Reel/Frame 037959/0694 →
SECURITY INTEREST Recorded Feb 2, 2016
From: AZUL SYSTEMS, INC.
To: SILICON VALLEY BANK
Reel/Frame 037641/0665 →
Continuity (4)
Continuation 11296652 · Dec 6, 2005
Continuation In Part 11227419 · Sep 14, 2005
Provisional Application 60610028 · Sep 14, 2004
Related Publication 20110321064A1 · Dec 29, 2011