#ifndef _VIS_PROTO_H
#define _VIS_PROTO_H
#ifdef __cplusplus
extern "C" {
#endif
#include "vis_types.h"
#define _VISATTR \
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
_VISATTR
static __inline vis_d64
vis_fpadd16(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fpadd16 %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fpsub16(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fpsub16 %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fpadd32(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fpadd32 %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fpsub32(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fpsub32 %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fpadd16s(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fpadd16s %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fpsub16s(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fpsub16s %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fpadd32s(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fpadd32s %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fpsub32s(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fpsub32s %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fpack16(vis_d64 r1)
{
vis_f32 out;
__asm("fpack16 %1,%0"
: "=f"(out)
: "f"(r1));
return out;
}
_VISATTR
static __inline vis_d64
vis_fpack32(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fpack32 %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fpackfix(vis_d64 r1)
{
vis_f32 out;
__asm("fpackfix %1,%0"
: "=f"(out)
: "f"(r1));
return out;
}
_VISATTR
static __inline vis_d64
vis_fexpand(vis_f32 r1)
{
vis_d64 out;
__asm("fexpand %1,%0"
: "=f"(out)
: "f"(r1));
return out;
}
_VISATTR
static __inline vis_d64
vis_fpmerge(vis_f32 r1, vis_f32 r2)
{
vis_d64 out;
__asm("fpmerge %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline void *
vis_alignaddr(void *addr, int offset)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_alignaddr(addr, offset);
#else
void *out;
__asm("alginaddr %1,%2,%0"
: "=r"(out)
: "r"(addr), "r"(offset));
return out;
#endif
}
_VISATTR
static __inline vis_d64
vis_faligndata(vis_d64 hi, vis_d64 lo)
{
vis_d64 out;
__asm("faligndata %1,%2,%0"
: "=f"(out)
: "f"(hi), "f"(lo));
return out;
}
_VISATTR
static __inline vis_s32
vis_edge8(void *a1, void *a2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_edge8(a1, a2);
#else
vis_s32 out;
__asm("edge8 %1,%2,%0"
: "=r"(out)
: "r"(a1), "f"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge16(void *a1, void *a2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_edge16(a1, a2);
#else
vis_s32 out;
__asm("edge16 %1,%2,%0"
: "=r"(out)
: "r"(a1), "f"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge32(void *a1, void *a2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_edge32(a1, a2);
#else
vis_s32 out;
__asm("edge32 %1,%2,%0"
: "=r"(out)
: "r"(a1), "f"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge8l(void *a1, void *a2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_edge8l(a1, a2);
#else
vis_s32 out;
__asm("edge8l %1,%2,%0"
: "=r"(out)
: "r"(a1), "f"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge16l(void *a1, void *a2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_edge16l(a1, a2);
#else
vis_s32 out;
__asm("edge16l %1,%2,%0"
: "=r"(out)
: "r"(a1), "f"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge32l(void *a1, void *a2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_edge32l(a1, a2);
#else
vis_s32 out;
__asm("edge32l %1,%2,%0"
: "=r"(out)
: "r"(a1), "f"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_addr
_VISATTR
vis_array8(vis_u64 d1, vis_s32 d2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_array8(d1, d2);
#else
vis_addr out;
__asm("array8 %1,%2,%0"
: "=r"(out)
: "r"(d1), "f"(d2));
return out;
#endif
}
_VISATTR
static __inline vis_addr
vis_array16(vis_u64 d1, vis_s32 d2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_array16(d1, d2);
#else
vis_addr out;
__asm("array16 %1,%2,%0"
: "=r"(out)
: "r"(d1), "f"(d2));
return out;
#endif
}
_VISATTR
static __inline vis_addr
vis_array32(vis_u64 d1, vis_s32 d2)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_array32(d1, d2);
#else
vis_addr out;
__asm("array32 %1,%2,%0"
: "=r"(out)
: "r"(d1), "r"(d2));
return out;
#endif
}
_VISATTR
static __inline vis_u64
vis_read_gsr64(void)
{
#if defined(__VIS__) && defined(__GNUC__)
return __builtin_vis_read_gsr();
#else
vis_u64 out;
__asm("rd %%gsr,%0"
: "=r"(out));
return out;
#endif
}
_VISATTR
static __inline void
vis_write_gsr64(vis_u64 gsr)
{
#if defined(__VIS__) && defined(__GNUC__)
__builtin_vis_write_gsr(gsr);
#else
__asm("mov %0,%%gsr"
:
: "r"(gsr));
#endif
}
_VISATTR
static __inline vis_u32
vis_read_gsr32(void)
{
return vis_read_gsr64();
}
_VISATTR
static __inline void
vis_write_gsr32(vis_u32 gsr)
{
vis_write_gsr64(gsr);
}
_VISATTR
static __inline vis_f32
vis_read_hi(vis_d64 var)
{
vis_u64 reg = *((vis_u64 *)&var);
vis_u32 hi = (reg >> 32) & 0xffffffff;
vis_f32 out = *((vis_f32 *)&hi);
return out;
}
_VISATTR
static __inline vis_f32
vis_read_lo(vis_d64 var)
{
vis_u64 reg = *((vis_u64 *)&var);
vis_u32 lo = reg & 0xffffffff;
vis_f32 out = *((vis_f32 *)&lo);
return out;
}
_VISATTR
static __inline vis_d64
vis_write_lo(vis_d64 in, vis_f32 lower)
{
vis_u64 out = *((vis_u64 *)&in);
vis_u32 hi = (out >> 32) & 0xffffffff;
vis_u32 lo = *((vis_u32 *)&lower);
out = ((vis_u64)hi << 32ULL) | lo;
return *((vis_d64 *)&out);
}
_VISATTR
static __inline vis_d64
vis_write_hi(vis_d64 in, vis_f32 upper)
{
vis_u64 out = *((vis_u64 *)&in);
vis_u32 hi = *((vis_u32 *)&upper);
vis_u32 lo = out & 0xffffffff;
out = ((vis_u64)hi << 32ULL) | lo;
return *((vis_d64 *)&out);
}
_VISATTR
static __inline vis_d64
vis_freg_pair(vis_f32 f1, vis_f32 f2)
{
vis_u64 out;
vis_u32 r1 = *((vis_u32 *)&f1);
vis_u32 r2 = *((vis_u32 *)&f2);
out = ((vis_u64)r1 << 32ULL) | r2;
return *((vis_d64 *)&out);
}
_VISATTR
static __inline vis_f32
vis_to_float(vis_u32 data)
{
return *((vis_f32 *)&data);
}
_VISATTR
static __inline vis_d64
vis_to_double(vis_u32 d1, vis_u32 d2)
{
vis_u64 out;
out = ((vis_u64)d1 << 32ULL) | d2;
return *((vis_d64 *)&out);
}
_VISATTR
static __inline vis_d64
vis_to_double_dup(vis_u32 data)
{
return vis_to_double(data, data);
}
_VISATTR
static __inline vis_d64
vis_ll_to_double(vis_u64 data)
{
return *((vis_d64 *)&data);
}
_VISATTR
static __inline vis_d64
vis_fmul8x16(vis_f32 pixels, vis_d64 scale)
{
vis_d64 out;
__asm("fmul8x16 %1,%2,%0"
: "=f"(out)
: "f"(pixels), "f"(scale));
return out;
}
_VISATTR
static __inline vis_d64
vis_fmul8x16au(vis_f32 pixels, vis_f32 scale)
{
vis_d64 out;
__asm("fmul8x16au %1,%2,%0"
: "=f"(out)
: "f"(pixels), "f"(scale));
return out;
}
_VISATTR
static __inline vis_d64
vis_fmul8x16al(vis_f32 pixels, vis_f32 scale)
{
vis_d64 out;
__asm("fmul8x16al %1,%2,%0"
: "=f"(out)
: "f"(pixels), "f"(scale));
return out;
}
_VISATTR
static __inline vis_d64
vis_fmul8sux16(vis_d64 d1, vis_d64 d2)
{
vis_d64 out;
__asm("fmul8sux16 %1,%2,%0"
: "=f"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fmul8ulx16(vis_d64 d1, vis_d64 d2)
{
vis_d64 out;
__asm("fmul8ulx16 %1,%2,%0"
: "=f"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fmuld8sux16(vis_f32 d1, vis_f32 d2)
{
vis_d64 out;
__asm("fmuld8sux16 %1,%2,%0"
: "=f"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fmuld8ulx16(vis_f32 d1, vis_f32 d2)
{
vis_d64 out;
__asm("fmuld8ulx16 %1,%2,%0"
: "=f"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmpgt16(vis_d64 d1, vis_d64 d2)
{
int out;
__asm("fcmpgt16 %1,%2,%0"
: "=r"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmple16(vis_d64 d1, vis_d64 d2)
{
int out;
__asm("fcmple16 %1,%2,%0"
: "=r"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmpeq16(vis_d64 d1, vis_d64 d2)
{
int out;
__asm("fcmpeq16 %1,%2,%0"
: "=r"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmpne16(vis_d64 d1, vis_d64 d2)
{
int out;
__asm("fcmpne16 %1,%2,%0"
: "=r"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmpgt32(vis_d64 d1, vis_d64 d2)
{
int out;
__asm("fcmpgt32 %1,%2,%0"
: "=r"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmple32(vis_d64 d1, vis_d64 d2)
{
int out;
__asm("fcmple32 %1,%2,%0"
: "=r"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmpeq32(vis_d64 d1, vis_d64 d2)
{
int out;
__asm("fcmpeq32 %1,%2,%0"
: "=r"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmpne32(vis_d64 d1, vis_d64 d2)
{
int out;
__asm("fcmpne32 %1,%2,%0"
: "=r"(out)
: "f"(d1), "f"(d2));
return out;
}
_VISATTR
static __inline int
vis_fcmplt16(vis_d64 d1, vis_d64 d2)
{
return vis_fcmpgt16(d2, d1);
}
_VISATTR
static __inline int
vis_fcmpge16(vis_d64 d1, vis_d64 d2)
{
return vis_fcmple16(d2, d1);
}
_VISATTR
static __inline int
vis_fcmplt32(vis_d64 d1, vis_d64 d2)
{
return vis_fcmpgt32(d2, d1);
}
_VISATTR
static __inline int
vis_fcmpge32(vis_d64 d1, vis_d64 d2)
{
return vis_fcmple32(d2, d1);
}
_VISATTR
static __inline vis_d64
vis_pdist(vis_d64 pixels1, vis_d64 pixels2, vis_d64 acc)
{
__asm("pdist %1,%2,%0"
: "+f"(acc)
: "f"(pixels1), "f"(pixels2));
return acc;
}
_VISATTR
static __inline vis_d64
vis_fzero(void)
{
vis_d64 out;
__asm("fzero %0"
: "=f"(out));
return out;
}
_VISATTR
static __inline vis_d64
vis_fone(void)
{
vis_d64 out;
__asm("fone %0"
: "=f"(out));
return out;
}
_VISATTR
static __inline vis_f32
vis_fzeros(void)
{
vis_f32 out;
__asm("fzeros %0"
: "=f"(out));
return out;
}
_VISATTR
static __inline vis_f32
vis_fones(void)
{
vis_f32 out;
__asm("fones %0"
: "=f"(out));
return out;
}
_VISATTR
static __inline vis_d64
vis_fsrc(vis_d64 r1)
{
vis_d64 out;
__asm("fsrc1 %1,%0"
: "=f"(out)
: "f"(r1));
return out;
}
_VISATTR
static __inline vis_d64
vis_fnot(vis_d64 r1)
{
vis_d64 out;
__asm("fnot1 %1,%0"
: "=f"(out)
: "f"(r1));
return out;
}
_VISATTR
static __inline vis_f32
vis_fsrcs(vis_f32 r1)
{
vis_f32 out;
__asm("fsrc1s %1,%0"
: "=f"(out)
: "f"(r1));
return out;
}
_VISATTR
static __inline vis_f32
vis_fnots(vis_f32 r1)
{
vis_f32 out;
__asm("fnot1s %1,%0"
: "=f"(out)
: "f"(r1));
return out;
}
_VISATTR
static __inline vis_d64
vis_for(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("for %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fand(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fand %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fxor(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fxor %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fnor(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fnor %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fnand(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fnand %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fxnor(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fxnor %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fornot(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fornot1 %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_d64
vis_fandnot(vis_d64 r1, vis_d64 r2)
{
vis_d64 out;
__asm("fandnot1 %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fors(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fors %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fands(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fands %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fxors(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fxors %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fnors(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fnors %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fnands(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fnands %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fxnors(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fxnors %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fornots(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fornot1s %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline vis_f32
vis_fandnots(vis_f32 r1, vis_f32 r2)
{
vis_f32 out;
__asm("fandnot1s %1,%2,%0"
: "=f"(out)
: "f"(r1), "f"(r2));
return out;
}
_VISATTR
static __inline void
vis_pst_8(vis_d64 data, void *addr, vis_u8 mask)
{
__asm("stda %1,[%0]%2,0xc0"
: "=r"(addr)
: "f"(data), "r"(mask));
}
_VISATTR
static __inline void
vis_pst_16(vis_d64 data, void *addr, vis_u8 mask)
{
__asm("stda %1,[%0]%2,0xc2"
: "=r"(addr)
: "f"(data), "r"(mask));
}
_VISATTR
static __inline void
vis_pst_32(vis_d64 data, void *addr, vis_u8 mask)
{
__asm("stda %1,[%0]%2,0xc4"
: "=r"(addr)
: "f"(data), "r"(mask));
}
_VISATTR
static __inline void
vis_st_u8(vis_u64 data, void *addr)
{
__asm("stda %1,[%0]0xd0"
: "=r"(addr)
: "f"(data));
}
_VISATTR
static __inline void
vis_st_u8_le(vis_d64 data, void *addr)
{
__asm("stda %1,[%0]0xd8"
: "=r"(addr)
: "f"(data));
}
_VISATTR
static __inline void
vis_st_u16(vis_d64 data, void *addr)
{
__asm("stda %1,[%0]0xd2"
: "=r"(addr)
: "f"(data));
}
_VISATTR
static __inline void
vis_st_u16_le(vis_d64 data, void *addr)
{
__asm("stda %1,[%0]0xda"
: "=r"(addr)
: "f"(data));
}
_VISATTR
static __inline void
vis_st_u8_i(vis_d64 data, void *addr, long idx)
{
vis_u8 *ptr = addr;
vis_st_u8(data, ptr + idx);
}
_VISATTR
static __inline void
vis_st_u16_i(vis_d64 data, void *addr, long idx)
{
vis_u8 *ptr = addr;
vis_st_u16(data, ptr + idx);
}
_VISATTR
static __inline vis_d64
vis_ld_u8(void *addr)
{
vis_u8 val;
vis_d64 out;
val = *((vis_u8 *)addr);
*((vis_u8 *)&out) = val;
return out;
}
_VISATTR
static __inline vis_d64
vis_ld_u16(void *addr)
{
vis_u16 val;
vis_d64 out;
val = *((vis_u16 *)addr);
*((vis_u16 *)&out) = val;
return out;
}
_VISATTR
static __inline vis_d64
vis_ld_u8_i(void *addr, long idx)
{
vis_u8 *ptr = addr;
return vis_ld_u8(ptr + idx);
}
_VISATTR
static __inline vis_d64
vis_ld_u16_i(void *addr, long idx)
{
vis_u8 *ptr = addr;
return vis_ld_u16(ptr + idx);
}
_VISATTR
static __inline vis_u32
vis_read_bmask(void)
{
vis_u32 out;
__asm("rd %%gsr,%0"
"srlx %0,32,%0"
: "+f"(out));
return out;
}
_VISATTR
static __inline void
vis_write_bmask(vis_u32 mask1, vis_u32 mask2)
{
#if defined(__VIS__) && __VIS__ >= 0x200 && defined(__GNUC__)
(void)__builtin_vis_bmask(mask1, mask2);
#else
vis_u32 out;
__asm("bmask %1,%2,%0"
: "=r"(out)
: "r"(mask1), "r"(mask2));
(void)out;
#endif
}
_VISATTR
static __inline vis_d64
vis_bshuffle(vis_d64 pixels1, vis_d64 pixels2)
{
vis_d64 out;
__asm("bshuffle %1,%2,%0"
: "=f"(out)
: "f"(pixels1), "f"(pixels2));
return out;
}
_VISATTR
static __inline vis_s32
vis_edge8n(void *a1, void *a2)
{
#if defined(__VIS__) && __VIS__ >= 0x200 && defined(__GNUC__)
return __builtin_vis_edge8n(a1, a2);
#else
vis_s32 out;
__asm("edge8n %1,%2,%0"
: "=r"(out)
: "r"(a1), "r"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge16n(void *a1, void *a2)
{
#if defined(__VIS__) && __VIS__ >= 0x200 && defined(__GNUC__)
return __builtin_vis_edge16n(a1, a2);
#else
vis_s32 out;
__asm("edge16n %1,%2,%0"
: "=r"(out)
: "r"(a1), "r"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge32n(void *a1, void *a2)
{
#if defined(__VIS__) && __VIS__ >= 0x200 && defined(__GNUC__)
return __builtin_vis_edge32n(a1, a2);
#else
vis_s32 out;
__asm("edge32n %1,%2,%0"
: "=r"(out)
: "r"(a1), "r"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge8ln(void *a1, void *a2)
{
#if defined(__VIS__) && __VIS__ >= 0x200 && defined(__GNUC__)
return __builtin_vis_edge8ln(a1, a2);
#else
vis_s32 out;
__asm("edge8ln %1,%2,%0"
: "=r"(out)
: "r"(a1), "r"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge16ln(void *a1, void *a2)
{
#if defined(__VIS__) && __VIS__ >= 0x200 && defined(__GNUC__)
return __builtin_vis_edge16ln(a1, a2);
#else
vis_s32 out;
__asm("edge16ln %1,%2,%0"
: "=r"(out)
: "r"(a1), "r"(a2));
return out;
#endif
}
_VISATTR
static __inline vis_s32
vis_edge32ln(void *a1, void *a2)
{
#if defined(__VIS__) && __VIS__ >= 0x200 && defined(__GNUC__)
return __builtin_vis_edge32ln(a1, a2);
#else
vis_s32 out;
__asm("edge32ln %1,%2,%0"
: "=r"(out)
: "r"(a1), "r"(a2));
return out;
#endif
}
#ifdef __cplusplus
}
#endif
#endif