// AUTO-GENERATED by autogen.sh; DO NOT EDIT

#include "runtime.h"
#include "go-type.h"
#include "interface.h"

#line 10 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"
typedef struct __go_type_descriptor descriptor; 
typedef const struct __go_type_descriptor const_descriptor; 
typedef struct __go_interface interface; 
typedef struct __go_empty_interface empty_interface; 
bool runtime_ifacetypeeq(descriptor* a, descriptor* b) __asm__ (GOSYM_PREFIX "runtime.ifacetypeeq");
bool runtime_ifacetypeeq(descriptor* a, descriptor* b)
{
  bool eq;
#line 16 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	eq = __go_type_descriptors_equal(a, b);
return eq;
}
const_descriptor* runtime_efacetype(empty_interface e) __asm__ (GOSYM_PREFIX "runtime.efacetype");
const_descriptor* runtime_efacetype(empty_interface e)
{
  const_descriptor* d;
#line 21 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	return e.__type_descriptor;
return d;
}
const_descriptor* runtime_ifacetype(interface i) __asm__ (GOSYM_PREFIX "runtime.ifacetype");
const_descriptor* runtime_ifacetype(interface i)
{
  const_descriptor* d;
#line 26 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	if (i.__methods == nil) {
		return nil;
	}
	d = i.__methods[0];
return d;
}
struct runtime_ifaceE2E2_ret {
  empty_interface ret;
  bool ok;
};
struct runtime_ifaceE2E2_ret runtime_ifaceE2E2(empty_interface e) __asm__ (GOSYM_PREFIX "runtime.ifaceE2E2");
struct runtime_ifaceE2E2_ret runtime_ifaceE2E2(empty_interface e)
{
  empty_interface ret;
  bool ok;
#line 34 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	ret = e;
	ok = ret.__type_descriptor != nil;
  {
    struct runtime_ifaceE2E2_ret __ret;
    __ret.ret = ret;
    __ret.ok = ok;
    return __ret;
  }
}
struct runtime_ifaceI2E2_ret {
  empty_interface ret;
  bool ok;
};
struct runtime_ifaceI2E2_ret runtime_ifaceI2E2(interface i) __asm__ (GOSYM_PREFIX "runtime.ifaceI2E2");
struct runtime_ifaceI2E2_ret runtime_ifaceI2E2(interface i)
{
  empty_interface ret;
  bool ok;
#line 40 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	if (i.__methods == nil) {
		ret.__type_descriptor = nil;
		ret.__object = nil;
		ok = 0;
	} else {
		ret.__type_descriptor = i.__methods[0];
		ret.__object = i.__object;
		ok = 1;
	}
  {
    struct runtime_ifaceI2E2_ret __ret;
    __ret.ret = ret;
    __ret.ok = ok;
    return __ret;
  }
}
struct runtime_ifaceE2I2_ret {
  interface ret;
  bool ok;
};
struct runtime_ifaceE2I2_ret runtime_ifaceE2I2(descriptor* inter, empty_interface e) __asm__ (GOSYM_PREFIX "runtime.ifaceE2I2");
struct runtime_ifaceE2I2_ret runtime_ifaceE2I2(descriptor* inter, empty_interface e)
{
  interface ret;
  bool ok;
#line 53 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	if (e.__type_descriptor == nil) {
		ret.__methods = nil;
		ret.__object = nil;
		ok = 0;
	} else {
		ret.__methods = __go_convert_interface_2(inter,
							 e.__type_descriptor,
							 1);
		ret.__object = e.__object;
		ok = ret.__methods != nil;
	}
  {
    struct runtime_ifaceE2I2_ret __ret;
    __ret.ret = ret;
    __ret.ok = ok;
    return __ret;
  }
}
struct runtime_ifaceI2I2_ret {
  interface ret;
  bool ok;
};
struct runtime_ifaceI2I2_ret runtime_ifaceI2I2(descriptor* inter, interface i) __asm__ (GOSYM_PREFIX "runtime.ifaceI2I2");
struct runtime_ifaceI2I2_ret runtime_ifaceI2I2(descriptor* inter, interface i)
{
  interface ret;
  bool ok;
#line 68 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	if (i.__methods == nil) {
		ret.__methods = nil;
		ret.__object = nil;
		ok = 0;
	} else {
		ret.__methods = __go_convert_interface_2(inter,
							 i.__methods[0], 1);
		ret.__object = i.__object;
		ok = ret.__methods != nil;
	}
  {
    struct runtime_ifaceI2I2_ret __ret;
    __ret.ret = ret;
    __ret.ok = ok;
    return __ret;
  }
}
struct runtime_ifaceE2T2P_ret {
  void* ret;
  bool ok;
};
struct runtime_ifaceE2T2P_ret runtime_ifaceE2T2P(descriptor* inter, empty_interface e) __asm__ (GOSYM_PREFIX "runtime.ifaceE2T2P");
struct runtime_ifaceE2T2P_ret runtime_ifaceE2T2P(descriptor* inter, empty_interface e)
{
  void* ret;
  bool ok;
#line 82 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	if (!__go_type_descriptors_equal(inter, e.__type_descriptor)) {
		ret = nil;
		ok = 0;
	} else {
		ret = e.__object;
		ok = 1;
	}
  {
    struct runtime_ifaceE2T2P_ret __ret;
    __ret.ret = ret;
    __ret.ok = ok;
    return __ret;
  }
}
struct runtime_ifaceI2T2P_ret {
  void* ret;
  bool ok;
};
struct runtime_ifaceI2T2P_ret runtime_ifaceI2T2P(descriptor* inter, interface i) __asm__ (GOSYM_PREFIX "runtime.ifaceI2T2P");
struct runtime_ifaceI2T2P_ret runtime_ifaceI2T2P(descriptor* inter, interface i)
{
  void* ret;
  bool ok;
#line 93 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	if (i.__methods == nil
	    || !__go_type_descriptors_equal(inter, i.__methods[0])) {
		ret = nil;
		ok = 0;
	} else {
		ret = i.__object;
		ok = 1;
	}
  {
    struct runtime_ifaceI2T2P_ret __ret;
    __ret.ret = ret;
    __ret.ok = ok;
    return __ret;
  }
}
bool runtime_ifaceE2T2(descriptor* inter, empty_interface e, void* ret) __asm__ (GOSYM_PREFIX "runtime.ifaceE2T2");
bool runtime_ifaceE2T2(descriptor* inter, empty_interface e, void* ret)
{
  bool ok;
#line 105 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	if (!__go_type_descriptors_equal(inter, e.__type_descriptor)) {
		__builtin_memset(ret, 0, inter->__size);
		ok = 0;
	} else {
		__builtin_memcpy(ret, e.__object, inter->__size);
		ok = 1;
	}
return ok;
}
bool runtime_ifaceI2T2(descriptor* inter, interface i, void* ret) __asm__ (GOSYM_PREFIX "runtime.ifaceI2T2");
bool runtime_ifaceI2T2(descriptor* inter, interface i, void* ret)
{
  bool ok;
#line 116 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	if (i.__methods == nil
	    || !__go_type_descriptors_equal(inter, i.__methods[0])) {
		__builtin_memset(ret, 0, inter->__size);
		ok = 0;
	} else {
		__builtin_memcpy(ret, i.__object, inter->__size);
		ok = 1;
	}
return ok;
}
bool runtime_ifaceI2Tp(descriptor* to, descriptor* from) __asm__ (GOSYM_PREFIX "runtime.ifaceI2Tp");
bool runtime_ifaceI2Tp(descriptor* to, descriptor* from)
{
  bool ok;
#line 128 "../../../gcc-5.1.0/libgo/runtime/go-iface.goc"

	ok = __go_can_convert_to_interface(to, from);
return ok;
}
