Skip to content
Snippets Groups Projects
Select Git revision
20 results

asm.m4

Blame
  • Forked from Nettle / nettle
    267 commits behind the upstream repository.
    asm.m4 2.14 KiB
    divert(-1)
    
    dnl FORTRAN style comment character
    define(`C', `
    dnl')dnl
    dnl Disable m4 comment processing, since the default, #, is used for
    dnl constants on some architectures, in particular ARM.
    changecom()dnl
    
    dnl Including files from the srcdir
    define(`include_src', `include(srcdir/$1)')dnl
    
    dnl default definition, changed in fat builds
    define(`fat_transform', `$1')
    define(`C_NAME', `SYMBOL_PREFIX`'fat_transform($1)')
    
    dnl Pseudo ops
    define(`DECLARE_FUNC',
    `ifelse(ELF_STYLE,yes,
    `.type $1,TYPE_FUNCTION',
    COFF_STYLE, yes,
    `.def $1
    .scl 2
    .type 32
    .endef',
    `')')
    
    define(`GMP_NUMB_BITS',`')dnl
    
    define(`PROLOGUE',
    `.globl C_NAME($1)
    DECLARE_FUNC(C_NAME($1))
    C_NAME($1): ASM_X86_ENDBR')
    
    define(`EPILOGUE',
    `ifelse(ELF_STYLE,yes,
    `.size C_NAME($1), . - C_NAME($1)',`')')
    
    define(`m4_log2', `m4_log2_internal($1,1,0)')
    define(`m4_log2_internal',
    `ifelse($3, 10, `not-a-power-of-two',
    $1, $2, $3,
    `m4_log2_internal($1, eval(2*$2), eval(1 + $3))')')
    
    dnl Argument to ALIGN is always in bytes, and converted to a
    dnl logarithmic .align if necessary.
    
    define(`ALIGN',
    `.align ifelse(ALIGN_LOG,yes,`m4_log2($1)',$1)
    ')
    
    define(`IF_BE', `ifelse(
    WORDS_BIGENDIAN,yes,`$1',
    WORDS_BIGENDIAN,no,`$2',
    `errprint(`Unsupported endianness value',WORDS_BIGENDIAN,`
    ')
      m4exit(1)')')
    define(`IF_LE', `IF_BE(`$2', `$1')')
    
    dnl Struct defining macros
    
    dnl STRUCTURE(prefix) 
    define(`STRUCTURE', `define(`SOFFSET', 0)define(`SPREFIX', `$1')')dnl
    
    dnl STRUCT(name, size)
    define(`STRUCT',
    `define(SPREFIX`_'$1, SOFFSET)dnl
     define(`SOFFSET', eval(SOFFSET + ($2)))')dnl
    
    dnl UCHAR(name)
    define(`UCHAR', `STRUCT(`$1', 1)')dnl
    
    dnl UNSIGNED(name)
    define(`UNSIGNED', `STRUCT(`$1', 4)')dnl
    
    dnl Offsets in arcfour_ctx
    STRUCTURE(ARCFOUR)
      STRUCT(S, 256)
      UCHAR(I)
      UCHAR(J)
    
    dnl Offsets in aes_table
    define(AES_SBOX_SIZE,	256)dnl
    define(AES_TABLE_SIZE,	1024)dnl
    
    STRUCTURE(AES)
      STRUCT(SBOX, AES_SBOX_SIZE)
      STRUCT(TABLE0, AES_TABLE_SIZE)
      STRUCT(TABLE1, AES_TABLE_SIZE)
      STRUCT(TABLE2, AES_TABLE_SIZE)
      STRUCT(TABLE3, AES_TABLE_SIZE)
    
    C For 64-bit implementation
    STRUCTURE(P1305)
      STRUCT(R0, 8)
      STRUCT(R1, 8)
      STRUCT(S0, 8)
      STRUCT(S1, 8)
      STRUCT(H0, 8)
      STRUCT(H1, 8)
      STRUCT(H2, 8)
    
    divert