Ruby  2.4.2p198(2017-09-14revision59899)
Data Structures | Macros | Typedefs | Functions
ffi.c File Reference
#include <ffi.h>
#include <ffi_common.h>
#include <stdlib.h>
#include <stdbool.h>
#include <float.h>
#include "ia64_flags.h"
Include dependency graph for ffi.c:

Go to the source code of this file.

Data Structures

struct  fpreg
 
struct  ia64_args
 

Macros

#define stf_spill(addr, value)   asm ("stf.spill %0 = %1%P0" : "=m" (*addr) : "f"(value));
 
#define ldf_fill(result, addr)   asm ("ldf.fill %0 = %1%P1" : "=f"(result) : "m"(*addr));
 

Typedefs

typedef void *PTR64 __attribute__((mode(DI)))
 

Functions

static void * endian_adjust (void *addr, size_t len)
 
static size_t hfa_type_size (int type)
 
static void hfa_type_load (fpreg *fpaddr, int type, void *addr)
 
static void hfa_type_store (int type, void *addr, fpreg *fpaddr)
 
static int hfa_element_type (ffi_type *type, int nested)
 
ffi_status ffi_prep_cif_machdep (ffi_cif *cif)
 
int ffi_call_unix (struct ia64_args *, PTR64, void(*)(void), UINT64)
 
void ffi_call (ffi_cif *cif, void(*fn)(void), void *rvalue, void **avalue)
 
void ffi_closure_unix ()
 
ffi_status ffi_prep_closure_loc (ffi_closure *closure, ffi_cif *cif, void(*fun)(ffi_cif *, void *, void **, void *), void *user_data, void *codeloc)
 
UINT64 ffi_closure_unix_inner (ffi_closure *closure, struct ia64_args *stack, void *rvalue, void *r8)
 

Macro Definition Documentation

◆ ldf_fill

#define ldf_fill (   result,
  addr 
)    asm ("ldf.fill %0 = %1%P1" : "=f"(result) : "m"(*addr));

Definition at line 85 of file ffi.c.

Referenced by ffi_closure_unix_inner(), and hfa_type_store().

◆ stf_spill

#define stf_spill (   addr,
  value 
)    asm ("stf.spill %0 = %1%P0" : "=m" (*addr) : "f"(value));

Definition at line 79 of file ffi.c.

Referenced by ffi_call(), and hfa_type_load().

Typedef Documentation

◆ __attribute__

typedef void* PTR64 __attribute__((mode(DI)))

Definition at line 41 of file ffi.c.

Function Documentation

◆ endian_adjust()

static void* endian_adjust ( void *  addr,
size_t  len 
)
inlinestatic

Definition at line 65 of file ffi.c.

References len.

Referenced by ffi_closure_unix_inner().

◆ ffi_call()

void ffi_call ( ffi_cif *  cif,
void(*)(void)  fn,
void *  rvalue,
void **  avalue 
)

◆ ffi_call_unix()

int ffi_call_unix ( struct ia64_args ,
PTR64  ,
void(*)(void)  ,
UINT64   
)

Referenced by ffi_call(), and ffi_prep_cif_machdep().

◆ ffi_closure_unix()

void ffi_closure_unix ( )

Referenced by ffi_call().

◆ ffi_closure_unix_inner()

UINT64 ffi_closure_unix_inner ( ffi_closure *  closure,
struct ia64_args stack,
void *  rvalue,
void *  r8 
)

◆ ffi_prep_cif_machdep()

ffi_status ffi_prep_cif_machdep ( ffi_cif *  cif)

◆ ffi_prep_closure_loc()

ffi_status ffi_prep_closure_loc ( ffi_closure *  closure,
ffi_cif *  cif,
void(*)(ffi_cif *, void *, void **, void *)  fun,
void *  user_data,
void *  codeloc 
)

Definition at line 409 of file ffi.c.

References FFI_UNIX.

◆ hfa_element_type()

static int hfa_element_type ( ffi_type *  type,
int  nested 
)
static

◆ hfa_type_load()

static void hfa_type_load ( fpreg fpaddr,
int  type,
void *  addr 
)
static

Definition at line 111 of file ffi.c.

References FFI_IA64_TYPE_HFA_DOUBLE, FFI_IA64_TYPE_HFA_FLOAT, FFI_IA64_TYPE_HFA_LDOUBLE, and stf_spill.

Referenced by ffi_call().

◆ hfa_type_size()

static size_t hfa_type_size ( int  type)
static

◆ hfa_type_store()

static void hfa_type_store ( int  type,
void *  addr,
fpreg fpaddr 
)
static