QBE
Файл util.c
#include "all.h"
#include <stdarg.h>
Граф включаемых заголовочных файлов для util.c:

См. исходные тексты.

Структуры данных

struct  Vec
 
struct  Bucket
 

Макросы

#define BSOP(f, op)
 

Определения типов

typedef struct Bitset Bitset
 
typedef struct Vec Vec
 
typedef struct Bucket Bucket
 
typedef char make_sure_NBit_is_64[(NBit==64)?1:-1]
 

Перечисления

enum  { VMin = 2, VMag = 0xcabba9e, NPtr = 256, IBits = 12, IMask = (1<<IBits) - 1 }
 

Функции

uint32_t hash (char *s)
 
void die_ (char *file, char *s,...)
 
void * emalloc (size_t n)
 
void * alloc (size_t n)
 
void freeall ()
 
void * vnew (ulong len, size_t esz, Pool pool)
 
void vfree (void *p)
 
void vgrow (void *vp, ulong len)
 
uint32_t intern (char *s)
 
char * str (uint32_t id)
 
int isreg (Ref r)
 
int iscmp (int op, int *pk, int *pc)
 
int argcls (Ins *i, int n)
 
void emit (int op, int k, Ref to, Ref arg0, Ref arg1)
 
void emiti (Ins i)
 
void idup (Ins **pd, Ins *s, ulong n)
 
Insicpy (Ins *d, Ins *s, ulong n)
 
int cmpneg (int c)
 
int cmpop (int c)
 
int clsmerge (short *pk, short k)
 
int phicls (int t, Tmp *tmp)
 
Ref newtmp (char *prfx, int k, Fn *fn)
 
void chuse (Ref r, int du, Fn *fn)
 
Ref getcon (int64_t val, Fn *fn)
 
void addcon (Con *c0, Con *c1)
 
void blit (Ref rdst, uint doff, Ref rsrc, uint sz, Fn *fn)
 
void bsinit (BSet *bs, uint n)
 
uint bscount (BSet *bs)
 
void bsset (BSet *bs, uint elt)
 
void bsclr (BSet *bs, uint elt)
 
void bscopy (BSet *a, BSet *b)
 
void bsunion (BSet *a, BSet *b)
 
void bsinter (BSet *a, BSet *b)
 
void bsdiff (BSet *a, BSet *b)
 
int bsequal (BSet *a, BSet *b)
 
void bszero (BSet *bs)
 
int bsiter (BSet *bs, int *elt)
 
void dumpts (BSet *bs, Tmp *tmp, FILE *f)
 

Переменные

Typtyp
 
Ins insb [NIns]
 
Inscuri
 

Макросы

◆ BSOP

#define BSOP (   f,
  op 
)
Макроопределение:
void \
f(BSet *a, BSet *b) \
{ \
uint i; \
\
assert(a->nt == b->nt); \
for (i=0; i<a->nt; i++) \
a->t[i] op b->t[i]; \
}
Definition: all.h:66

См. определение в файле util.c строка 480

Типы

◆ Bitset

typedef struct Bitset Bitset

См. определение в файле util.c строка 4

◆ Bucket

typedef struct Bucket Bucket

См. определение в файле util.c строка 6

◆ make_sure_NBit_is_64

typedef char make_sure_NBit_is_64[(NBit==64)?1:-1]

См. определение в файле util.c строка 410

◆ Vec

typedef struct Vec Vec

См. определение в файле util.c строка 5

Перечисления

◆ anonymous enum

anonymous enum
Элементы перечислений
VMin 
VMag 
NPtr 
IBits 
IMask 

См. определение в файле util.c строка 25

Функции

◆ addcon()

void addcon ( Con c0,
Con c1 
)

См. определение в файле util.c строка 364

Перекрестные ссылки Con::bits, Con::i, Con::label и Con::type.

◆ alloc()

void* alloc ( size_t  n)

См. определение в файле util.c строка 77

Используется в blknew(), bsinit() и idup().

◆ argcls()

int argcls ( Ins i,
int  n 
)

См. определение в файле util.c строка 223

Перекрестные ссылки Op::argcls, Ins::cls, Ins::op и optab.

◆ blit()

void blit ( Ref  rdst,
uint  doff,
Ref  rsrc,
uint  sz,
Fn fn 
)

См. определение в файле util.c строка 379

Перекрестные ссылки cls, emit(), getcon(), Kl, Kw, newtmp(), Oadd, Oload, Oloadub, Oloaduh, Ostoreb, Ostoreh, Ostorel, Ostorew и R.

◆ bsclr()

void bsclr ( BSet bs,
uint  elt 
)

См. определение в файле util.c строка 474

◆ bscopy()

void bscopy ( BSet a,
BSet b 
)

См. определение в файле util.c строка 491

Используется в filllive() и liveon().

◆ bscount()

uint bscount ( BSet bs)

См. определение в файле util.c строка 450

Перекрестные ссылки BSet::nt.

◆ bsdiff()

void bsdiff ( BSet a,
BSet b 
)

См. определение в файле util.c строка 494

◆ bsequal()

int bsequal ( BSet a,
BSet b 
)

См. определение в файле util.c строка 497

Используется в filllive().

◆ bsinit()

void bsinit ( BSet bs,
uint  n 
)

См. определение в файле util.c строка 403

Перекрестные ссылки alloc(), NBit, BSet::nt и BSet::t.

Используется в filllive().

◆ bsinter()

void bsinter ( BSet a,
BSet b 
)

См. определение в файле util.c строка 493

◆ bsiter()

int bsiter ( BSet bs,
int *  elt 
)

См. определение в файле util.c строка 521

Перекрестные ссылки BIT, NBit, BSet::nt и BSet::t.

Используется в filllive().

◆ bsset()

void bsset ( BSet bs,
uint  elt 
)

См. определение в файле util.c строка 467

◆ bsunion()

void bsunion ( BSet a,
BSet b 
)

См. определение в файле util.c строка 492

Используется в filllive().

◆ bszero()

void bszero ( BSet bs)

См. определение в файле util.c строка 509

Перекрестные ссылки BSet::nt и BSet::t.

◆ chuse()

void chuse ( Ref  r,
int  du,
Fn fn 
)

См. определение в файле util.c строка 344

◆ clsmerge()

int clsmerge ( short *  pk,
short  k 
)

См. определение в файле util.c строка 296

Перекрестные ссылки Kl, Kw и Kx.

◆ cmpneg()

int cmpneg ( int  c)

См. определение в файле util.c строка 282

Перекрестные ссылки NCmp.

◆ cmpop()

int cmpop ( int  c)

См. определение в файле util.c строка 289

Перекрестные ссылки NCmp.

◆ die_()

void die_ ( char *  file,
char *  s,
  ... 
)

См. определение в файле util.c строка 53

◆ dumpts()

void dumpts ( BSet bs,
Tmp tmp,
FILE *  f 
)

См. определение в файле util.c строка 543

◆ emalloc()

void* emalloc ( size_t  n)

См. определение в файле util.c строка 66

Перекрестные ссылки die.

Используется в copy(), simpljmp() и ssa().

◆ emit()

void emit ( int  op,
int  k,
Ref  to,
Ref  arg0,
Ref  arg1 
)

См. определение в файле util.c строка 229

Перекрестные ссылки curi, die, insb и Ins::op.

Используется в blit() и emiti().

◆ emiti()

void emiti ( Ins  i)

См. определение в файле util.c строка 240

Перекрестные ссылки Ins::arg, Ins::cls, emit(), Ins::op и Ins::to.

◆ freeall()

void freeall ( void  )

См. определение в файле util.c строка 93

◆ getcon()

Ref getcon ( int64_t  val,
Fn fn 
)

См. определение в файле util.c строка 351

Используется в blit().

◆ hash()

uint32_t hash ( char *  s)

См. определение в файле util.c строка 43

Используется в intern().

◆ icpy()

Ins* icpy ( Ins d,
Ins s,
ulong  n 
)

См. определение в файле util.c строка 253

◆ idup()

void idup ( Ins **  pd,
Ins s,
ulong  n 
)

См. определение в файле util.c строка 246

Перекрестные ссылки alloc().

◆ intern()

uint32_t intern ( char *  s)

См. определение в файле util.c строка 158

Перекрестные ссылки hash() и IMask.

◆ iscmp()

int iscmp ( int  op,
int *  pk,
int *  pc 
)

См. определение в файле util.c строка 199

Перекрестные ссылки Kd, Kl, Ks, Kw, NCmpI, Ocmpd, Ocmpd1, Ocmpl, Ocmpl1, Ocmps, Ocmps1, Ocmpw и Ocmpw1.

◆ isreg()

int isreg ( Ref  r)

См. определение в файле util.c строка 193

◆ newtmp()

Ref newtmp ( char *  prfx,
int  k,
Fn fn 
)

См. определение в файле util.c строка 326

Перекрестные ссылки Tmp::cls, Tmp::name, Tmp::ndef, Fn::ntmp, Tmp::nuse, Tmp::slot, TMP, Fn::tmp и vgrow().

Используется в blit().

◆ phicls()

int phicls ( int  t,
Tmp tmp 
)

См. определение в файле util.c строка 313

◆ str()

char* str ( uint32_t  id)

См. определение в файле util.c строка 186

Перекрестные ссылки IBits.

◆ vfree()

void vfree ( void *  p)

См. определение в файле util.c строка 129

Перекрестные ссылки Vec::mag, Pheap, Vec::pool и VMag.

Используется в vgrow().

◆ vgrow()

void vgrow ( void *  vp,
ulong  len 
)

См. определение в файле util.c строка 142

Перекрестные ссылки Vec::cap, Vec::esz, len, Vec::mag, Vec::pool, vfree(), VMag и vnew().

Используется в newtmp().

◆ vnew()

void* vnew ( ulong  len,
size_t  esz,
Pool  pool 
)

См. определение в файле util.c строка 111

Используется в vgrow().

Переменные

◆ curi

Ins * curi

См. определение в файле util.c строка 34

Используется в emit().

◆ insb

Ins insb[NIns]

См. определение в файле util.c строка 34

Используется в emit().

◆ typ

Typ* typ

См. определение в файле util.c строка 33