#ifndef POLZ_H
#define POLZ_H

#include <stdint.h>
#include "params.h"

typedef struct {
  int32_t low[N];
  int32_t mid[N];
  int32_t high[N];
} __attribute__((aligned(32))) polz;

#include "polx.h"

void polz_uniform(polz *r);
void polz_topolx(polx *r,const polz *a);
void polz_frompolx(polz *r,const polx *a);
void polz_reduce(polz *r);
void polz_cmodq(const polz *r);
double polz_sprod(const polz *a,const polz *b);
double polz_norm64(const polz *r);
double polz_norm70(const polz *r);
void polz_pack(unsigned char r[10*N],const polz * restrict a);
void polz_add(polz *r,const polz *a,const polz *b);
void polz_sub(polz *r,const polz *a,const polz *b);
void polz_scale(polz *r,const polz *a);
void polz_sigmam1(polz *r,const polz *a);
void polz_sigma5(polz *r,const polz *a);
void polz_sigma5inv(polz *r,const polz *a);

#endif
