IP Library Granted Patent US 7,577,801
Granted Patent B1
US 7,577,801 · App. 11/296,191 · Granted Aug 18, 2009

Array access

Assignee: Azul Systems, Inc.
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 7,577,801
App. No.
11/296,191
Granted
Aug 18, 2009
Kind
B1
Abstract

Accessing memory in an array includes performing a first instruction, including by determining whether an index used by the first instruction is within a valid range and in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index. Accessing memory in the array further includes, in the event that the index is within a valid range, performing a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction.

Claims (90)

1. A method of accessing memory in an array, comprising:

performing a first instruction, including:

determining whether an index used by the first instruction is within a valid range; and

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within a valid range, performing a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein the first instruction does not include an array length field.

2. A method as recited in claim 1 , wherein performing the first instruction further includes, in the event that the index is not within the valid range, indicating that an error has occurred.

3. A method as recited in claim 1 , wherein determining whether the index used by the first instruction is within the valid range includes sign extending the index.

4. A method as recited in claim 1 , wherein determining whether the index used by the first instruction is within the valid range includes comparing the index with the array length field.

5. A method as recited in claim 1 , wherein determining whether the index used by the first instruction is within the valid range includes performing an unsigned comparison of the index and the array length field.

6. A method as recited in claim 1 , wherein determining whether the index used by the first instruction is within the valid range includes comparing the index with a minimum valid index and with a maximum valid index.

7. A method as recited in claim 6 , wherein the minimum valid index has a default value of zero.

8. A method as recited in claim 1 , wherein the first instruction includes an index field, an array address field, and a register field for storing the determined memory address.

9. A method as recited in claim 1 , wherein accessing the array element includes reading a value from the array element.

10. A method as recited in claim 1 , wherein accessing the array element includes storing a value to the array element.

11. A method as recited in claim 1 , wherein the second instruction determines an address of the array element based on an offset field and the memory address determined by the first instruction.

12. A method as recited in claim 11 , wherein the second instruction determines the address of the array element by adding the offset to the memory address determined by the first instruction.

13. A method as recited in claim 11 , wherein the second instruction determines the address of the array element by scaling the offset and adding the scaled offset to the memory address determined by the first instruction.

14. A method as recited in claim 1 , wherein the first and the second instructions each performs exactly one memory access operation.

15. A method as recited in claim 1 , wherein the first instruction and the second instruction are selected from a plurality of instructions, and the selection being dependent at least in part on the size of the array element.

16. A method of accessing memory in an array, comprising:

performing a first instruction, including:

determining whether an index used by the first instruction is within a valid range; and

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within a valid range, performing a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein the first instruction is provided with an array address field indicating the address of an array data structure, and determining whether the index used by the first instruction is within the valid range includes loading a length value stored at a fixed offset from the address of the array data structure.

17. A method of accessing memory in an array, comprising:

performing a first instruction, including:

determining whether an index used by the first instruction is within a valid range; and

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within a valid range, performing a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein the first instruction is provided with an array address field indicating the address of an array data structure, and determining whether the index used by the first instruction is within the valid range includes loading a minimum valid range value stored at a fixed offset from the address of the array data structure.

18. A method of accessing memory in an array, comprising:

performing a first instruction, including:

determining whether an index used by the first instruction is within a valid range; and

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within a valid range, performing a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein the first instruction is provided with an array address field indicating the address of an array data structure, and determining whether the index used by the first instruction is within range includes loading a maximum valid range value stored in memory at a fixed offset from the address of the array data structure.

19. A method of accessing memory in an array, comprising:

performing a first instruction, including:

determining whether an index used by the first instruction is within a valid range; and

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within a valid range, performing a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein determining the memory address related to the array element includes shifting the index to obtain a shifted value that equals the index multiplied by the size of an element in the array, and adding the shifted value to a reference.

20. A processor comprising:

a logical unit configured to access an array, including to:

perform a first instruction, including:

determining whether an index used by the first instruction is within a valid range,

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within the valid range, perform a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein the first instruction does not include an array length field; and

a memory coupled to the logic unit, configured to store the array.

21. The processor of claim 20 , wherein performing the first instruction further includes, in the event that the index is not within the valid range, indicating that an error has occurred.

22. The processor of claim 20 , wherein determining whether the index used by the first instruction is within the valid range includes sign extending the index.

23. The processor of claim 20 , wherein determining whether the index used by the first instruction is within the valid range includes comparing the index with the array length field.

24. The processor of claim 20 , wherein determining whether the index used by the first instruction is within the valid range includes performing an unsigned comparison of the index and the array length field.

25. The processor of claim 20 , wherein the first instruction includes an index field, an array address field, and a register field for storing the determined memory address.

26. The processor of claim 20 , wherein the first and the second instructions each performs exactly one memory access operation.

27. The processor of claim 20 , wherein the first instruction and the second instruction are selected from a plurality of instructions, and the selection being dependent at least in part on the size of the array element.

28. A system for accessing memory in an array, comprising:

a processor configured to:

perform a first instruction, including:

determining whether an index used by the first instruction is within a valid range,

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within the valid range, perform a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein the first instruction does not include an array length field; and

a memory coupled to the processor, configured to the provide the processor with the first and the second instruction.

29. The system of claim 28 , wherein performing the first instruction further includes, in the event that the index is not within the valid range, indicating that an error has occurred.

30. The system of claim 28 , wherein determining whether the index used by the first instruction is within the valid range includes sign extending the index.

31. The system of claim 28 , wherein determining whether the index used by the first instruction is within the valid range includes comparing the index with the array length field.

32. The system of claim 28 , wherein determining whether the index used by the first instruction is within the valid range includes performing an unsigned comparison of the index and the array length field.

33. The system of claim 28 , wherein the first instruction includes an index field, an array address field, and a register field for storing the determined memory address.

34. The system of claim 28 , wherein the first and the second instructions each performs exactly one memory access operation.

35. The system of claim 28 , wherein the first instruction and the second instruction are selected from a plurality of instructions, and the selection being dependent at least in part on the size of the array element.

36. A processor comprising:

a logical unit configured to access an array, including to:

perform a first instruction, including:

determining whether an index used by the first instruction is within a valid range,

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within the valid range, perform a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein the first instruction is provided with an array address field indicating the address of an array data structure, and determining whether the index used by the first instruction is within the valid range includes loading a length value stored at a fixed offset from the address of the array data structure; and

a memory coupled to the logic unit, configured to store the array.

37. A system for accessing memory in an array, comprising:

a processor configured to:

perform a first instruction, including:

determining whether an index used by the first instruction is within a valid range,

in the event that the index is within a valid range, determining a memory address related to an array element that corresponds to the index; and

in the event that the index is within the valid range, perform a second instruction to access the array element, the access being based at least in part on the memory address determined by the first instruction;

wherein the first instruction is provided with an array address field indicating the address of an array data structure, and determining whether the index used by the first instruction is within the valid range includes loading a length value stored at a fixed offset from the address of the array data structure; and

a memory coupled to the processor, configured to the provide the processor with the first and the second instruction.

Assignments (8)
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 →
SECURITY INTEREST Recorded Dec 3, 2025
From: AZUL SYSTEMS, INC.
To: ARES CAPITAL CORPORATION, AS COLLATERAL AGENT
Reel/Frame 073828/0083 →
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 Apr 2, 2020
From: SILICON VALLEY BANK
To: AZUL SYSTEMS, INC.
Reel/Frame 052293/0869 →
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 AGREEMENT Recorded Nov 18, 2009
From: AZUL SYSTEMS, INC.
To: SILICON VALLEY BANK
Reel/Frame 023538/0316 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 24, 2006
From: TENE, GIL; CHOQUETTE, JACK H.; SELLERS, SCOTT; CLICK, JR., CLIFF N.
To: AZUL SYSTEMS, INC.
Reel/Frame 017377/0916 →