iPXE
Typedefs | Functions | Variables
bigint.h File Reference

Big integer support. More...

#include <stdint.h>
#include <string.h>

Go to the source code of this file.

Typedefs

typedef uint32_t bigint_element_t
 Element of a big integer. More...
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
static __attribute__ ((always_inline)) void bigint_init_raw(uint32_t *value0
 Initialise big integer. More...
 
__asm__ __volatile__ ("\n1:\n\t" "movb -1(%3,%1), %%al\n\t" "stosb\n\t" "loop 1b\n\t" "xorl %%eax, %%eax\n\t" "mov %4, %1\n\t" "rep stosb\n\t" :"=&D"(discard_D), "=&c"(discard_c), "+m"(*value) :"r"(data), "g"(pad_len), "0"(value0), "1"(len) :"eax")
 
__asm__ __volatile__ ("xor %0, %0\n\t" "\n1:\n\t" "lodsl\n\t" "adcl %%eax, (%4,%0,4)\n\t" "inc %0\n\t" "loop 1b\n\t" :"=&r"(index), "=&S"(discard_S), "=&c"(discard_c), "+m"(*value) :"r"(value0), "1"(addend0), "2"(size) :"eax")
 
__asm__ __volatile__ ("xor %0, %0\n\t" "\n1:\n\t" "lodsl\n\t" "sbbl %%eax, (%4,%0,4)\n\t" "inc %0\n\t" "loop 1b\n\t" :"=&r"(index), "=&S"(discard_S), "=&c"(discard_c), "+m"(*value) :"r"(value0), "1"(subtrahend0), "2"(size) :"eax")
 
__asm__ __volatile__ ("xor %0, %0\n\t" "\n1:\n\t" "rcll $1, (%3,%0,4)\n\t" "inc %0\n\t" "loop 1b\n\t" :"=&r"(index), "=&c"(discard_c), "+m"(*value) :"r"(value0), "1"(size))
 
__asm__ __volatile__ ("clc\n\t" "\n1:\n\t" "rcrl $1, -4(%2,%0,4)\n\t" "loop 1b\n\t" :"=&c"(discard_c), "+m"(*value) :"r"(value0), "0"(size))
 
static __attribute__ ((always_inline, pure)) int bigint_is_zero_raw(const uint32_t *value0
 Test if big integer is equal to zero. More...
 
__asm__ __volatile__ ("xor %0, %0\n\t" "repe scasl\n\t" "sete %b0\n\t" :"=&a"(result), "=&D"(discard_D), "=&c"(discard_c) :"1"(value0), "2"(size))
 
__asm__ __volatile__ ("\n1:\n\t" "movl -4(%3, %1, 4), %k2\n\t" "cmpl -4(%4, %1, 4), %k2\n\t" "loope 1b\n\t" "setae %b0\n\t" :"=q"(result), "=&c"(discard_c), "=&r"(discard_tmp) :"r"(value0), "r"(reference0), "0"(0), "1"(size))
 
__asm__ __volatile__ ("\n1:\n\t" "bsrl -4(%2,%1,4), %0\n\t" "loopz 1b\n\t" "rol %1\n\t" "rol %1\n\t" "leal 1(%k0,%k1,8), %k0\n\t" "jnz 2f\n\t" "xor %0, %0\n\t" "\n2:\n\t" :"=&r"(result), "=&c"(discard_c) :"r"(value0), "1"(size))
 
__asm__ __volatile__ ("rep movsl\n\t" "xorl %%eax, %%eax\n\t" "mov %4, %2\n\t" "rep stosl\n\t" :"=&D"(discard_D), "=&S"(discard_S), "=&c"(discard_c), "+m"(*dest) :"g"(pad_size), "0"(dest0), "1"(source0), "2"(source_size) :"eax")
 
__asm__ __volatile__ ("rep movsl\n\t" :"=&D"(discard_D), "=&S"(discard_S), "=&c"(discard_c), "+m"(*dest) :"0"(dest0), "1"(source0), "2"(dest_size) :"eax")
 
__asm__ __volatile__ ("\n1:\n\t" "movb -1(%3,%1), %%al\n\t" "stosb\n\t" "loop 1b\n\t" :"=&D"(discard_D), "=&c"(discard_c), "+m"(*out_bytes) :"r"(value0), "0"(out), "1"(len) :"eax")
 
__asm__ __volatile__ ("mull %3\n\t" "addl %5, %0\n\t" "adcl $0, %1\n\t" "addl %0, %2\n\t" "adcl $0, %1\n\t" :"=&a"(discard_a), "=&d"(*carry), "+m"(*result) :"g"(multiplicand), "0"(multiplier), "r"(*carry))
 

Variables

static unsigned int size
 
static unsigned int const void * data
 
static unsigned int const void size_t len
 
long pad_len = ( sizeof ( *value ) - len )
 
void * discard_D
 
long discard_c
 
static uint32_tvalue0
 
long index
 
void * discard_S
 
int result
 
static const uint32_treference0
 
long discard_tmp
 
static unsigned int source_size
 
static unsigned int uint32_tdest0
 
static unsigned int uint32_t unsigned int dest_size
 
long pad_size = ( dest_size - source_size )
 
static unsigned int source_size __unused
 
static unsigned int size void * out
 
static const uint32_t multiplier
 Port multiplier number. More...
 
static const uint32_t uint32_t uint32_tcarry
 

Detailed Description

Big integer support.

Definition in file bigint.h.

Typedef Documentation

◆ bigint_element_t

Element of a big integer.

Definition at line 15 of file bigint.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ __attribute__() [1/2]

static __attribute__ ( (always_inline)  )
inlinestatic

Initialise big integer.

Multiply big integer elements.

Finalise big integer.

Shrink big integer.

Grow big integer.

Find highest bit set in big integer.

Shift big integer right.

Shift big integer left.

Subtract big integers.

Add big integers.

Parameters
value0Element 0 of big integer to initialise
sizeNumber of elements
dataRaw data
lenLength of raw data
addend0Element 0 of big integer to add
value0Element 0 of big integer to be added to
sizeNumber of elements
subtrahend0Element 0 of big integer to subtract
value0Element 0 of big integer to be subtracted from
sizeNumber of elements
value0Element 0 of big integer
sizeNumber of elements
value0Element 0 of big integer
sizeNumber of elements
Return values
max_bitHighest bit set + 1 (or 0 if no bits set)
Parameters
source0Element 0 of source big integer
source_sizeNumber of elements in source big integer
dest0Element 0 of destination big integer
dest_sizeNumber of elements in destination big integer
value0Element 0 of big integer to finalise
sizeNumber of elements
outOutput buffer
lenLength of output buffer
multiplicandMultiplicand element
multiplierMultiplier element
resultResult element
carryCarry element

◆ __volatile__() [1/12]

__asm__ __volatile__ ( "\n1:\n\t" "movb 1%3,%1,
%%al\n\t" "stosb\n\t" "loop 1b\n\t" "xorl %%  eax,
%%eax\n\t" "mov %  4 
)

◆ __volatile__() [2/12]

__asm__ __volatile__ ( "xor %  0,
%0\n\t" "\n1:\n\t" "lodsl\n\t" "adcl %%  eax 
)

◆ __volatile__() [3/12]

__asm__ __volatile__ ( "xor %  0,
%0\n\t" "\n1:\n\t" "lodsl\n\t" "sbbl %%  eax 
)

◆ __volatile__() [4/12]

__asm__ __volatile__ ( "xor %  0,
%0\n\t" "\n1:\n\t" "rcll  $1 
)

◆ __volatile__() [5/12]

__asm__ __volatile__ ( "clc\n\t" "\n1:\n\t" "rcrl  $1)

◆ __attribute__() [2/2]

static __attribute__ ( (always_inline, pure)  ) const
inlinestatic

Test if big integer is equal to zero.

Compare big integers.

Parameters
value0Element 0 of big integer
sizeNumber of elements
Return values
is_zeroBig integer is equal to zero
Parameters
value0Element 0 of big integer
reference0Element 0 of reference big integer
sizeNumber of elements
Return values
geqBig integer is greater than or equal to the reference

◆ __volatile__() [6/12]

__asm__ __volatile__ ( "xor %  0)

◆ __volatile__() [7/12]

__asm__ __volatile__ ( "\n1:\n\t" "movl -  4%3, %1, 4,
%k2\n\t" "cmpl -  4%4, %1, 4 
)

◆ __volatile__() [8/12]

__asm__ __volatile__ ( "\n1:\n\t" "bsrl -  4%2,%1,4,
%0\n\t" "loopz 1b\n\t" "rol %1\n\t" "rol %1\n\t" "leal   1%k0,%k1, 8,
%k0\n\t" "jnz 2f\n\t" "xor %  0 
)

◆ __volatile__() [9/12]

__asm__ __volatile__ ( "rep movsl\n\t" "xorl %%  eax,
%%eax\n\t" "mov %  4 
)

◆ __volatile__() [10/12]

__asm__ __volatile__ ( )

◆ __volatile__() [11/12]

__asm__ __volatile__ ( "\n1:\n\t" "movb 1%3,%1)

◆ __volatile__() [12/12]

__asm__ __volatile__ ( "mull %3\n\t" "addl %  5,
%0\n\t" "adcl  $0,
%1\n\t" "addl %  0,
%2\n\t" "adcl  $0 
)

Variable Documentation

◆ size

unsigned int size
Initial value:
{
bigint_t ( size ) __attribute__ (( may_alias )) *value =
( ( void * ) value0 )
static uint32_t * value0
Definition: bigint.h:57
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
static __attribute__((always_inline)) void bigint_init_raw(uint32_t *value0
Initialise big integer.
static unsigned int size
Definition: bigint.h:26
typedef bigint_t(X25519_SIZE) x25519_t
An X25519 unsigned big integer used in internal calculations.

Definition at line 26 of file bigint.h.

◆ data

unsigned int const void* data

Definition at line 26 of file bigint.h.

◆ len

unsigned int size void size_t len
Initial value:
{
bigint_t ( size ) __attribute__ (( may_alias )) *value =
( ( void * ) value0 )
static uint32_t * value0
Definition: bigint.h:57
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
static __attribute__((always_inline)) void bigint_init_raw(uint32_t *value0
Initialise big integer.
static unsigned int size
Definition: bigint.h:26
typedef bigint_t(X25519_SIZE) x25519_t
An X25519 unsigned big integer used in internal calculations.

Definition at line 27 of file bigint.h.

◆ pad_len

long pad_len = ( sizeof ( *value ) - len )

◆ discard_D

void * discard_D

◆ discard_c

long discard_c

◆ value0

static uint32_t * value0

◆ index

long index

Definition at line 61 of file bigint.h.

Referenced by _tg3_flag(), _tg3_flag_clear(), _tg3_flag_set(), a3c90x_prepare_rx_desc(), acpi_find(), acpi_find_via_rsdt(), acpi_table(), acpi_test_find(), amd8111e_poll(), amd8111e_transmit(), amd8111e_wait_tx_ring(), arbel_cmd_hw2sw_eq(), arbel_cmd_read_mgm(), arbel_cmd_sw2hw_eq(), arbel_cmd_sw2hw_mpt(), arbel_cmd_write_mgm(), arbel_mcast_attach(), arbel_mcast_detach(), ath5k_hw_rfb_op(), atl1e_clean_tx_ring(), b44_cam_write(), bitmap_set(), bitmap_test(), deflate_inflate(), deflate_length(), deflate_set_length(), des_generate(), dns_send_packet(), draw_menu_item(), dynui_item(), ecam_find(), ecam_read(), ecam_write(), efi_block_boot(), efi_entropy_tick(), efi_file_read_dir(), efi_usb_async_start(), efi_usb_async_stop(), efi_usb_close(), efi_usb_control_transfer(), efi_usb_get_endpoint_descriptor(), efi_usb_get_string_descriptor(), efi_usb_is_open(), efi_usb_open(), efi_usb_sync_transfer(), efi_wait_for_event_wrapper(), efifb_draw(), efifb_draw_unknown(), efifb_dynamic(), efifb_glyph(), efipci_discover_any(), efipci_discover_one(), ehci_dequeue(), ehci_endpoint_poll(), ehci_enqueue(), ena_admin(), ena_admin_req(), ena_poll_rx(), ena_poll_tx(), ena_refill_rx(), ena_transmit(), exanic_expired(), exanic_probe_port(), exanic_remove_port(), falcon_read_sram(), falcon_write_sram(), gve_address(), gve_admin(), gve_admin_command(), gve_buffer(), gve_poll_rx(), gve_transmit(), hermon_cmd_hw2sw_eq(), hermon_cmd_hw2sw_mpt(), hermon_cmd_query_eq(), hermon_cmd_read_mcg(), hermon_cmd_sw2hw_eq(), hermon_cmd_sw2hw_mpt(), hermon_cmd_write_mcg(), hermon_mcast_attach(), hermon_mcast_detach(), intelxl_admin_command(), intelxl_admin_event_init(), intelxl_context(), intelxl_context_dump(), intelxl_context_line(), intelxlvf_admin_event(), isapnp_read_iobase(), isapnp_read_irqno(), jump_scroll(), nodnic_port_add_mac_filter(), nodnic_port_recv_db_dma(), nodnic_port_remove_mac_filter(), nodnic_port_send_db_dma(), nodnic_port_update_ring_doorbell(), nvconfig_get_tlv_type_and_class(), nvconfig_nvdata_access(), nvconfig_nvdata_default_access(), nvconfig_read_rom_ini_values(), nvconfig_set_fw_reset_level(), pcnet32_dwio_read_bcr(), pcnet32_dwio_read_csr(), pcnet32_dwio_write_bcr(), pcnet32_dwio_write_csr(), pcnet32_wio_read_bcr(), pcnet32_wio_read_csr(), pcnet32_wio_write_bcr(), pcnet32_wio_write_csr(), peerdist_info_block(), peerdist_info_segment(), peerdist_info_v1_block_offset(), peerdist_info_v1_segment(), peerdist_info_v2_segment(), phantom_clp_cmd(), phantom_refill_rx_ring(), phantom_transmit(), phantom_update_macaddr(), pnm_bitmap(), pxe_menu_draw_item(), qib7322_send_buffer_offset(), read_smbios_string(), ring_next(), select_setting_row(), sign_extend32(), smbios_fetch(), smscusb_get_statistics(), uhci_dequeue(), uhci_endpoint_poll(), uhci_enqueue(), usb_autoconfigure(), usb_clear_feature(), usb_config_descriptor(), usb_control(), usb_endpoint_described(), usb_endpoint_descriptor(), usb_get_config_descriptor(), usb_get_descriptor(), usb_get_status(), usb_get_string_descriptor(), usb_hub_clear_port_feature(), usb_hub_set_port_feature(), usb_message(), usb_set_configuration(), usb_set_feature(), usb_settings_fetch(), usbio_bulk_in_poll(), usbio_bulk_out_poll(), usbio_control_poll(), usbio_endpoint_close(), usbio_endpoint_enqueue(), usbio_interrupt_callback(), usbio_interrupt_poll(), vesafb_glyph(), xen_hvm_get_param(), xhci_dequeue(), xhci_enqueue(), xhci_ring_consumed(), and xhci_set_tr_dequeue_pointer().

◆ discard_S

void * discard_S

◆ result

const uint32_t uint32_t* result

Definition at line 160 of file bigint.h.

◆ reference0

const uint32_t* reference0

Definition at line 180 of file bigint.h.

Referenced by bigint_is_geq_sample().

◆ discard_tmp

long discard_tmp

Definition at line 183 of file bigint.h.

◆ source_size

unsigned int source_size

Definition at line 233 of file bigint.h.

Referenced by bigint_grow_sample(), bigint_shrink_sample(), and efi_load_image_wrapper().

◆ dest0

static unsigned int source_size uint32_t * dest0

Definition at line 233 of file bigint.h.

Referenced by bigint_copy_sample(), bigint_grow_sample(), and bigint_shrink_sample().

◆ dest_size

static unsigned int source_size uint32_t unsigned int dest_size
Initial value:
{
bigint_t ( dest_size ) __attribute__ (( may_alias )) *dest =
( ( void * ) dest0 )
static unsigned int uint32_t unsigned int dest_size
Definition: bigint.h:234
static __attribute__((always_inline)) void bigint_init_raw(uint32_t *value0
Initialise big integer.
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" return dest
Definition: string.h:150
static unsigned int uint32_t * dest0
Definition: bigint.h:233
typedef bigint_t(X25519_SIZE) x25519_t
An X25519 unsigned big integer used in internal calculations.

Definition at line 234 of file bigint.h.

Referenced by bigint_grow_sample(), and bigint_shrink_sample().

◆ pad_size

long pad_size = ( dest_size - source_size )

Definition at line 237 of file bigint.h.

◆ __unused

unsigned int size __unused

Definition at line 262 of file bigint.h.

◆ out

unsigned int size void* out

Definition at line 287 of file bigint.h.

◆ multiplier

uint8_t multiplier

◆ carry

const uint32_t uint32_t uint32_t* carry
Initial value:
{
uint32_t discard_a
unsigned int uint32_t
Definition: stdint.h:12

Definition at line 316 of file bigint.h.

Referenced by apm_poweroff(), and gcm_multiply_x().