From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38833) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZvIpG-0007y8-Ej for qemu-devel@nongnu.org; Sun, 08 Nov 2015 00:47:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZvIpD-0000U7-6b for qemu-devel@nongnu.org; Sun, 08 Nov 2015 00:47:38 -0500 Received: from col004-omc2s7.hotmail.com ([65.55.34.81]:53808) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZvIpC-0000U0-Nx for qemu-devel@nongnu.org; Sun, 08 Nov 2015 00:47:35 -0500 Message-ID: Content-Type: multipart/mixed; boundary="_73385e28-778d-4164-bf0e-3af1b91969e4_" From: Chen Gang Date: Sun, 8 Nov 2015 13:47:33 +0800 In-Reply-To: References: MIME-Version: 1.0 Subject: [Qemu-devel] [PATCH 4/4] target-tilegx: Let fpu implementation code can be built and used List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "rth@twiddle.net" , Peter Maydell , Chris Metcalf Cc: qemu-devel --_73385e28-778d-4164-bf0e-3af1b91969e4_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable >>From 8fab455a5ac5508d06cc69f778e926ad098fbe5b Mon Sep 17 00:00:00 2001=0A= From: Chen Gang =0A= Date: Sun=2C 8 Nov 2015 09:11:36 +0800=0A= Subject: [PATCH 4/4] target-tilegx: Let fpu implementation code can be buil= t=0A= =A0and used=0A= =0A= It passes gcc testsuite: it can get the same result as the original fpu=0A= implementation have done.=0A= =0A= Signed-off-by: Chen Gang =0A= ---=0A= =A0target-tilegx/Makefile.objs | =A03 +-=0A= =A0target-tilegx/cpu.h =A0 =A0 =A0 =A0 | =A02 ++=0A= =A0target-tilegx/helper.h =A0 =A0 =A0| 12 ++++++++=0A= =A0target-tilegx/translate.c =A0 | 68 +++++++++++++++++++++++++++++++++++++= ++------=0A= =A04 files changed=2C 75 insertions(+)=2C 10 deletions(-)=0A= =0A= diff --git a/target-tilegx/Makefile.objs b/target-tilegx/Makefile.objs=0A= index 0db778f..c2cf2f1 100644=0A= --- a/target-tilegx/Makefile.objs=0A= +++ b/target-tilegx/Makefile.objs=0A= @@ -1 +1=2C2 @@=0A= -obj-y +=3D cpu.o translate.o helper.o simd_helper.o=0A= +obj-y +=3D cpu.o translate.o helper.o simd_helper.o \=0A= + fsingle_helper.o fdouble_helper.o=0A= diff --git a/target-tilegx/cpu.h b/target-tilegx/cpu.h=0A= index 03df107..445a606 100644=0A= --- a/target-tilegx/cpu.h=0A= +++ b/target-tilegx/cpu.h=0A= @@ -88=2C6 +88=2C8 @@ typedef struct CPUTLGState {=0A= =A0 =A0 =A0uint64_t spregs[TILEGX_SPR_COUNT]=3B /* Special used registers b= y outside */=0A= =A0 =A0 =A0uint64_t pc=3B =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* Cu= rrent pc */=0A= =A0=0A= + =A0 =A0float_status fp_status=3B =A0 =A0 =A0 =A0 =A0 =A0/* floating point= status */=0A= +=0A= =A0#if defined(CONFIG_USER_ONLY)=0A= =A0 =A0 =A0uint64_t excaddr=3B =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* except= ion address */=0A= =A0 =A0 =A0uint64_t atomic_srca=3B =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Arguments = to atomic "exceptions" */=0A= diff --git a/target-tilegx/helper.h b/target-tilegx/helper.h=0A= index 9281d0f..b785bf2 100644=0A= --- a/target-tilegx/helper.h=0A= +++ b/target-tilegx/helper.h=0A= @@ -24=2C3 +24=2C15 @@ DEF_HELPER_FLAGS_2(v1shrs=2C TCG_CALL_NO_RWG_SE=2C i= 64=2C i64=2C i64)=0A= =A0DEF_HELPER_FLAGS_2(v2shl=2C TCG_CALL_NO_RWG_SE=2C i64=2C i64=2C i64)=0A= =A0DEF_HELPER_FLAGS_2(v2shru=2C TCG_CALL_NO_RWG_SE=2C i64=2C i64=2C i64)=0A= =A0DEF_HELPER_FLAGS_2(v2shrs=2C TCG_CALL_NO_RWG_SE=2C i64=2C i64=2C i64)=0A= +=0A= +DEF_HELPER_3(fsingle_add1=2C i64=2C env=2C i64=2C i64)=0A= +DEF_HELPER_3(fsingle_sub1=2C i64=2C env=2C i64=2C i64)=0A= +DEF_HELPER_3(fsingle_mul1=2C i64=2C env=2C i64=2C i64)=0A= +DEF_HELPER_2(fsingle_pack2=2C i64=2C env=2C i64)=0A= +DEF_HELPER_3(fdouble_unpack_min=2C i64=2C env=2C i64=2C i64)=0A= +DEF_HELPER_3(fdouble_unpack_max=2C i64=2C env=2C i64=2C i64)=0A= +DEF_HELPER_3(fdouble_add_flags=2C i64=2C env=2C i64=2C i64)=0A= +DEF_HELPER_3(fdouble_sub_flags=2C i64=2C env=2C i64=2C i64)=0A= +DEF_HELPER_4(fdouble_addsub=2C i64=2C env=2C i64=2C i64=2C i64)=0A= +DEF_HELPER_3(fdouble_mul_flags=2C i64=2C env=2C i64=2C i64)=0A= +DEF_HELPER_4(fdouble_pack2=2C i64=2C env=2C i64=2C i64=2C i64)=0A= diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c=0A= index b8ca401..4d74b1d 100644=0A= --- a/target-tilegx/translate.c=0A= +++ b/target-tilegx/translate.c=0A= @@ -597=2C6 +597=2C11 @@ static TileExcp gen_rr_opcode(DisasContext *dc=2C = unsigned opext=2C=0A= =A0 =A0 =A0 =A0 =A0}=0A= =A0 =A0 =A0 =A0 =A0qemu_log_mask(CPU_LOG_TB_IN_ASM=2C "%s %s"=2C mnemonic= =2C reg_names[srca])=3B=0A= =A0 =A0 =A0 =A0 =A0return ret=3B=0A= +=0A= + =A0 =A0case OE_RR_X0(FSINGLE_PACK1):=0A= + =A0 =A0case OE_RR_Y0(FSINGLE_PACK1):=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fsingle_pack1"=3B=0A= + =A0 =A0 =A0 =A0goto done2=3B=0A= =A0 =A0 =A0}=0A= =A0=0A= =A0 =A0 =A0tdest =3D dest_gr(dc=2C dest)=3B=0A= @@ -613=2C9 +618=2C6 @@ static TileExcp gen_rr_opcode(DisasContext *dc=2C u= nsigned opext=2C=0A= =A0 =A0 =A0 =A0 =A0gen_helper_cnttz(tdest=2C tsrca)=3B=0A= =A0 =A0 =A0 =A0 =A0mnemonic =3D "cnttz"=3B=0A= =A0 =A0 =A0 =A0 =A0break=3B=0A= - =A0 =A0case OE_RR_X0(FSINGLE_PACK1):=0A= - =A0 =A0case OE_RR_Y0(FSINGLE_PACK1):=0A= - =A0 =A0 =A0 =A0return TILEGX_EXCP_OPCODE_UNIMPLEMENTED=3B=0A= =A0 =A0 =A0case OE_RR_X1(LD1S):=0A= =A0 =A0 =A0 =A0 =A0memop =3D MO_SB=3B=0A= =A0 =A0 =A0 =A0 =A0mnemonic =3D "ld1s"=3B /* prefetch_l1_fault */=0A= @@ -734=2C6 +736=2C7 @@ static TileExcp gen_rr_opcode(DisasContext *dc=2C u= nsigned opext=2C=0A= =A0 =A0 =A0 =A0 =A0return TILEGX_EXCP_OPCODE_UNKNOWN=3B=0A= =A0 =A0 =A0}=0A= =A0=0A= +done2:=0A= =A0 =A0 =A0qemu_log_mask(CPU_LOG_TB_IN_ASM=2C "%s %s=2C %s"=2C mnemonic=2C= =0A= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0reg_names[dest]=2C reg_names[srca])= =3B=0A= =A0 =A0 =A0return ret=3B=0A= @@ -742=2C13 +745=2C21 @@ static TileExcp gen_rr_opcode(DisasContext *dc=2C= unsigned opext=2C=0A= =A0static TileExcp gen_rrr_opcode(DisasContext *dc=2C unsigned opext=2C=0A= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 unsigned de= st=2C unsigned srca=2C unsigned srcb)=0A= =A0{=0A= - =A0 =A0TCGv tdest =3D dest_gr(dc=2C dest)=3B=0A= - =A0 =A0TCGv tsrca =3D load_gr(dc=2C srca)=3B=0A= - =A0 =A0TCGv tsrcb =3D load_gr(dc=2C srcb)=3B=0A= + =A0 =A0TCGv tdest=2C tsrca=2C tsrcb=3B=0A= =A0 =A0 =A0TCGv t0=3B=0A= =A0 =A0 =A0const char *mnemonic=3B=0A= =A0=0A= =A0 =A0 =A0switch (opext) {=0A= + =A0 =A0case OE_RRR(FSINGLE_ADDSUB2=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fsingle_addsub2"=3B=0A= + =A0 =A0 =A0 =A0goto done2=3B=0A= + =A0 =A0}=0A= +=0A= + =A0 =A0tdest =3D dest_gr(dc=2C dest)=3B=0A= + =A0 =A0tsrca =3D load_gr(dc=2C srca)=3B=0A= + =A0 =A0tsrcb =3D load_gr(dc=2C srcb)=3B=0A= +=0A= + =A0 =A0switch (opext) {=0A= =A0 =A0 =A0case OE_RRR(ADDXSC=2C 0=2C X0):=0A= =A0 =A0 =A0case OE_RRR(ADDXSC=2C 0=2C X1):=0A= =A0 =A0 =A0 =A0 =A0gen_saturate_op(tdest=2C tsrca=2C tsrcb=2C tcg_gen_add_t= l)=3B=0A= @@ -906=2C14 +917=2C39 @@ static TileExcp gen_rrr_opcode(DisasContext *dc= =2C unsigned opext=2C=0A= =A0 =A0 =A0 =A0 =A0mnemonic =3D "exch"=3B=0A= =A0 =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FDOUBLE_ADDSUB=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fdouble_addsub(tdest=2C cpu_env=2C=0A= + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0load_g= r(dc=2C dest)=2Ctsrca=2C tsrcb)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fdouble_addsub"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FDOUBLE_ADD_FLAGS=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fdouble_add_flags(tdest=2C cpu_env=2C tsrca=2C = tsrcb)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fdouble_add_flags"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FDOUBLE_MUL_FLAGS=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fdouble_mul_flags(tdest=2C cpu_env=2C tsrca=2C = tsrcb)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fdouble_mul_flags"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FDOUBLE_PACK1=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0tcg_gen_mov_i64(tdest=2C tsrcb)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fdouble_pack1"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FDOUBLE_PACK2=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fdouble_pack2(tdest=2C cpu_env=2C=0A= + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 load_gr(d= c=2C dest)=2C tsrca=2C tsrcb)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fdouble_pack2"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FDOUBLE_SUB_FLAGS=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fdouble_sub_flags(tdest=2C cpu_env=2C tsrca=2C = tsrcb)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fdouble_sub_flags"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FDOUBLE_UNPACK_MAX=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fdouble_unpack_max(tdest=2C cpu_env=2C tsrca=2C= tsrcb)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fdouble_unpack_max"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FDOUBLE_UNPACK_MIN=2C 0=2C X0):=0A= - =A0 =A0 =A0 =A0return TILEGX_EXCP_OPCODE_UNIMPLEMENTED=3B=0A= + =A0 =A0 =A0 =A0gen_helper_fdouble_unpack_min(tdest=2C cpu_env=2C tsrca=2C= tsrcb)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fdouble_unpack_min"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FETCHADD4=2C 0=2C X1):=0A= =A0 =A0 =A0 =A0 =A0gen_atomic_excp(dc=2C dest=2C tdest=2C tsrca=2C tsrcb=2C= =0A= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0TILEGX_EXCP_OPCODE_FETCH= ADD4)=3B=0A= @@ -955=2C12 +991=2C25 @@ static TileExcp gen_rrr_opcode(DisasContext *dc= =2C unsigned opext=2C=0A= =A0 =A0 =A0 =A0 =A0mnemonic =3D "fetchor"=3B=0A= =A0 =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FSINGLE_ADD1=2C 0=2C X0):=0A= - =A0 =A0case OE_RRR(FSINGLE_ADDSUB2=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fsingle_add1(tdest=2C cpu_env=2C tsrca=2C tsrcb= )=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fsingle_add1"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FSINGLE_MUL1=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fsingle_mul1(tdest=2C cpu_env=2C tsrca=2C tsrcb= )=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fsingle_mul1"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FSINGLE_MUL2=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0tcg_gen_mov_i64(tdest=2C tsrca)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fsingle_mul2"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FSINGLE_PACK2=2C 0=2C X0):=0A= + =A0 =A0 =A0 =A0gen_helper_fsingle_pack2(tdest=2C cpu_env=2C tsrca)=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fsingle_pack2"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(FSINGLE_SUB1=2C 0=2C X0):=0A= - =A0 =A0 =A0 =A0return TILEGX_EXCP_OPCODE_UNIMPLEMENTED=3B=0A= + =A0 =A0 =A0 =A0gen_helper_fsingle_sub1(tdest=2C cpu_env=2C tsrca=2C tsrcb= )=3B=0A= + =A0 =A0 =A0 =A0mnemonic =3D "fsingle_sub1"=3B=0A= + =A0 =A0 =A0 =A0break=3B=0A= =A0 =A0 =A0case OE_RRR(MNZ=2C 0=2C X0):=0A= =A0 =A0 =A0case OE_RRR(MNZ=2C 0=2C X1):=0A= =A0 =A0 =A0case OE_RRR(MNZ=2C 4=2C Y0):=0A= @@ -1464=2C6 +1513=2C7 @@ static TileExcp gen_rrr_opcode(DisasContext *dc= =2C unsigned opext=2C=0A= =A0 =A0 =A0 =A0 =A0return TILEGX_EXCP_OPCODE_UNKNOWN=3B=0A= =A0 =A0 =A0}=0A= =A0=0A= +done2:=0A= =A0 =A0 =A0qemu_log_mask(CPU_LOG_TB_IN_ASM=2C "%s %s=2C %s=2C %s"=2C mnemon= ic=2C=0A= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0reg_names[dest]=2C reg_names[srca]= =2C reg_names[srcb])=3B=0A= =A0 =A0 =A0return TILEGX_EXCP_NONE=3B=0A= --=A0=0A= 1.9.3=0A= =0A= = --_73385e28-778d-4164-bf0e-3af1b91969e4_ Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0004-target-tilegx-Let-fpu-implementation-code-can-be-bui.patch" RnJvbSA4ZmFiNDU1YTVhYzU1MDhkMDZjYzY5Zjc3OGU5MjZhZDA5OGZiZTViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDaGVuIEdhbmcgPGdhbmcuY2hlbi41aTVqQGdtYWlsLmNvbT4K RGF0ZTogU3VuLCA4IE5vdiAyMDE1IDA5OjExOjM2ICswODAwClN1YmplY3Q6IFtQQVRDSCA0LzRd IHRhcmdldC10aWxlZ3g6IExldCBmcHUgaW1wbGVtZW50YXRpb24gY29kZSBjYW4gYmUgYnVpbHQK IGFuZCB1c2VkCgpJdCBwYXNzZXMgZ2NjIHRlc3RzdWl0ZTogaXQgY2FuIGdldCB0aGUgc2FtZSBy ZXN1bHQgYXMgdGhlIG9yaWdpbmFsIGZwdQppbXBsZW1lbnRhdGlvbiBoYXZlIGRvbmUuCgpTaWdu ZWQtb2ZmLWJ5OiBDaGVuIEdhbmcgPGdhbmcuY2hlbi41aTVqQGdtYWlsLmNvbT4KLS0tCiB0YXJn ZXQtdGlsZWd4L01ha2VmaWxlLm9ianMgfCAgMyArLQogdGFyZ2V0LXRpbGVneC9jcHUuaCAgICAg ICAgIHwgIDIgKysKIHRhcmdldC10aWxlZ3gvaGVscGVyLmggICAgICB8IDEyICsrKysrKysrCiB0 YXJnZXQtdGlsZWd4L3RyYW5zbGF0ZS5jICAgfCA2OCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgNzUgaW5zZXJ0aW9ucygrKSwg MTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdGFyZ2V0LXRpbGVneC9NYWtlZmlsZS5vYmpz IGIvdGFyZ2V0LXRpbGVneC9NYWtlZmlsZS5vYmpzCmluZGV4IDBkYjc3OGYuLmMyY2YyZjEgMTAw NjQ0Ci0tLSBhL3RhcmdldC10aWxlZ3gvTWFrZWZpbGUub2JqcworKysgYi90YXJnZXQtdGlsZWd4 L01ha2VmaWxlLm9ianMKQEAgLTEgKzEsMiBAQAotb2JqLXkgKz0gY3B1Lm8gdHJhbnNsYXRlLm8g aGVscGVyLm8gc2ltZF9oZWxwZXIubworb2JqLXkgKz0gY3B1Lm8gdHJhbnNsYXRlLm8gaGVscGVy Lm8gc2ltZF9oZWxwZXIubyBcCisJCWZzaW5nbGVfaGVscGVyLm8gZmRvdWJsZV9oZWxwZXIubwpk aWZmIC0tZ2l0IGEvdGFyZ2V0LXRpbGVneC9jcHUuaCBiL3RhcmdldC10aWxlZ3gvY3B1LmgKaW5k ZXggMDNkZjEwNy4uNDQ1YTYwNiAxMDA2NDQKLS0tIGEvdGFyZ2V0LXRpbGVneC9jcHUuaAorKysg Yi90YXJnZXQtdGlsZWd4L2NwdS5oCkBAIC04OCw2ICs4OCw4IEBAIHR5cGVkZWYgc3RydWN0IENQ VVRMR1N0YXRlIHsKICAgICB1aW50NjRfdCBzcHJlZ3NbVElMRUdYX1NQUl9DT1VOVF07IC8qIFNw ZWNpYWwgdXNlZCByZWdpc3RlcnMgYnkgb3V0c2lkZSAqLwogICAgIHVpbnQ2NF90IHBjOyAgICAg ICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBwYyAqLwogCisgICAgZmxvYXRfc3RhdHVzIGZw X3N0YXR1czsgICAgICAgICAgICAvKiBmbG9hdGluZyBwb2ludCBzdGF0dXMgKi8KKwogI2lmIGRl ZmluZWQoQ09ORklHX1VTRVJfT05MWSkKICAgICB1aW50NjRfdCBleGNhZGRyOyAgICAgICAgICAg ICAgICAgIC8qIGV4Y2VwdGlvbiBhZGRyZXNzICovCiAgICAgdWludDY0X3QgYXRvbWljX3NyY2E7 ICAgICAgICAgICAgICAvKiBBcmd1bWVudHMgdG8gYXRvbWljICJleGNlcHRpb25zIiAqLwpkaWZm IC0tZ2l0IGEvdGFyZ2V0LXRpbGVneC9oZWxwZXIuaCBiL3RhcmdldC10aWxlZ3gvaGVscGVyLmgK aW5kZXggOTI4MWQwZi4uYjc4NWJmMiAxMDA2NDQKLS0tIGEvdGFyZ2V0LXRpbGVneC9oZWxwZXIu aAorKysgYi90YXJnZXQtdGlsZWd4L2hlbHBlci5oCkBAIC0yNCwzICsyNCwxNSBAQCBERUZfSEVM UEVSX0ZMQUdTXzIodjFzaHJzLCBUQ0dfQ0FMTF9OT19SV0dfU0UsIGk2NCwgaTY0LCBpNjQpCiBE RUZfSEVMUEVSX0ZMQUdTXzIodjJzaGwsIFRDR19DQUxMX05PX1JXR19TRSwgaTY0LCBpNjQsIGk2 NCkKIERFRl9IRUxQRVJfRkxBR1NfMih2MnNocnUsIFRDR19DQUxMX05PX1JXR19TRSwgaTY0LCBp NjQsIGk2NCkKIERFRl9IRUxQRVJfRkxBR1NfMih2MnNocnMsIFRDR19DQUxMX05PX1JXR19TRSwg aTY0LCBpNjQsIGk2NCkKKworREVGX0hFTFBFUl8zKGZzaW5nbGVfYWRkMSwgaTY0LCBlbnYsIGk2 NCwgaTY0KQorREVGX0hFTFBFUl8zKGZzaW5nbGVfc3ViMSwgaTY0LCBlbnYsIGk2NCwgaTY0KQor REVGX0hFTFBFUl8zKGZzaW5nbGVfbXVsMSwgaTY0LCBlbnYsIGk2NCwgaTY0KQorREVGX0hFTFBF Ul8yKGZzaW5nbGVfcGFjazIsIGk2NCwgZW52LCBpNjQpCitERUZfSEVMUEVSXzMoZmRvdWJsZV91 bnBhY2tfbWluLCBpNjQsIGVudiwgaTY0LCBpNjQpCitERUZfSEVMUEVSXzMoZmRvdWJsZV91bnBh Y2tfbWF4LCBpNjQsIGVudiwgaTY0LCBpNjQpCitERUZfSEVMUEVSXzMoZmRvdWJsZV9hZGRfZmxh Z3MsIGk2NCwgZW52LCBpNjQsIGk2NCkKK0RFRl9IRUxQRVJfMyhmZG91YmxlX3N1Yl9mbGFncywg aTY0LCBlbnYsIGk2NCwgaTY0KQorREVGX0hFTFBFUl80KGZkb3VibGVfYWRkc3ViLCBpNjQsIGVu diwgaTY0LCBpNjQsIGk2NCkKK0RFRl9IRUxQRVJfMyhmZG91YmxlX211bF9mbGFncywgaTY0LCBl bnYsIGk2NCwgaTY0KQorREVGX0hFTFBFUl80KGZkb3VibGVfcGFjazIsIGk2NCwgZW52LCBpNjQs IGk2NCwgaTY0KQpkaWZmIC0tZ2l0IGEvdGFyZ2V0LXRpbGVneC90cmFuc2xhdGUuYyBiL3Rhcmdl dC10aWxlZ3gvdHJhbnNsYXRlLmMKaW5kZXggYjhjYTQwMS4uNGQ3NGIxZCAxMDA2NDQKLS0tIGEv dGFyZ2V0LXRpbGVneC90cmFuc2xhdGUuYworKysgYi90YXJnZXQtdGlsZWd4L3RyYW5zbGF0ZS5j CkBAIC01OTcsNiArNTk3LDExIEBAIHN0YXRpYyBUaWxlRXhjcCBnZW5fcnJfb3Bjb2RlKERpc2Fz Q29udGV4dCAqZGMsIHVuc2lnbmVkIG9wZXh0LAogICAgICAgICB9CiAgICAgICAgIHFlbXVfbG9n X21hc2soQ1BVX0xPR19UQl9JTl9BU00sICIlcyAlcyIsIG1uZW1vbmljLCByZWdfbmFtZXNbc3Jj YV0pOwogICAgICAgICByZXR1cm4gcmV0OworCisgICAgY2FzZSBPRV9SUl9YMChGU0lOR0xFX1BB Q0sxKToKKyAgICBjYXNlIE9FX1JSX1kwKEZTSU5HTEVfUEFDSzEpOgorICAgICAgICBtbmVtb25p YyA9ICJmc2luZ2xlX3BhY2sxIjsKKyAgICAgICAgZ290byBkb25lMjsKICAgICB9CiAKICAgICB0 ZGVzdCA9IGRlc3RfZ3IoZGMsIGRlc3QpOwpAQCAtNjEzLDkgKzYxOCw2IEBAIHN0YXRpYyBUaWxl RXhjcCBnZW5fcnJfb3Bjb2RlKERpc2FzQ29udGV4dCAqZGMsIHVuc2lnbmVkIG9wZXh0LAogICAg ICAgICBnZW5faGVscGVyX2NudHR6KHRkZXN0LCB0c3JjYSk7CiAgICAgICAgIG1uZW1vbmljID0g ImNudHR6IjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPRV9SUl9YMChGU0lOR0xFX1BBQ0sx KToKLSAgICBjYXNlIE9FX1JSX1kwKEZTSU5HTEVfUEFDSzEpOgotICAgICAgICByZXR1cm4gVElM RUdYX0VYQ1BfT1BDT0RFX1VOSU1QTEVNRU5URUQ7CiAgICAgY2FzZSBPRV9SUl9YMShMRDFTKToK ICAgICAgICAgbWVtb3AgPSBNT19TQjsKICAgICAgICAgbW5lbW9uaWMgPSAibGQxcyI7IC8qIHBy ZWZldGNoX2wxX2ZhdWx0ICovCkBAIC03MzQsNiArNzM2LDcgQEAgc3RhdGljIFRpbGVFeGNwIGdl bl9ycl9vcGNvZGUoRGlzYXNDb250ZXh0ICpkYywgdW5zaWduZWQgb3BleHQsCiAgICAgICAgIHJl dHVybiBUSUxFR1hfRVhDUF9PUENPREVfVU5LTk9XTjsKICAgICB9CiAKK2RvbmUyOgogICAgIHFl bXVfbG9nX21hc2soQ1BVX0xPR19UQl9JTl9BU00sICIlcyAlcywgJXMiLCBtbmVtb25pYywKICAg ICAgICAgICAgICAgICAgIHJlZ19uYW1lc1tkZXN0XSwgcmVnX25hbWVzW3NyY2FdKTsKICAgICBy ZXR1cm4gcmV0OwpAQCAtNzQyLDEzICs3NDUsMjEgQEAgc3RhdGljIFRpbGVFeGNwIGdlbl9ycl9v cGNvZGUoRGlzYXNDb250ZXh0ICpkYywgdW5zaWduZWQgb3BleHQsCiBzdGF0aWMgVGlsZUV4Y3Ag Z2VuX3Jycl9vcGNvZGUoRGlzYXNDb250ZXh0ICpkYywgdW5zaWduZWQgb3BleHQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVzdCwgdW5zaWduZWQgc3JjYSwgdW5z aWduZWQgc3JjYikKIHsKLSAgICBUQ0d2IHRkZXN0ID0gZGVzdF9ncihkYywgZGVzdCk7Ci0gICAg VENHdiB0c3JjYSA9IGxvYWRfZ3IoZGMsIHNyY2EpOwotICAgIFRDR3YgdHNyY2IgPSBsb2FkX2dy KGRjLCBzcmNiKTsKKyAgICBUQ0d2IHRkZXN0LCB0c3JjYSwgdHNyY2I7CiAgICAgVENHdiB0MDsK ICAgICBjb25zdCBjaGFyICptbmVtb25pYzsKIAogICAgIHN3aXRjaCAob3BleHQpIHsKKyAgICBj YXNlIE9FX1JSUihGU0lOR0xFX0FERFNVQjIsIDAsIFgwKToKKyAgICAgICAgbW5lbW9uaWMgPSAi ZnNpbmdsZV9hZGRzdWIyIjsKKyAgICAgICAgZ290byBkb25lMjsKKyAgICB9CisKKyAgICB0ZGVz dCA9IGRlc3RfZ3IoZGMsIGRlc3QpOworICAgIHRzcmNhID0gbG9hZF9ncihkYywgc3JjYSk7Cisg ICAgdHNyY2IgPSBsb2FkX2dyKGRjLCBzcmNiKTsKKworICAgIHN3aXRjaCAob3BleHQpIHsKICAg ICBjYXNlIE9FX1JSUihBRERYU0MsIDAsIFgwKToKICAgICBjYXNlIE9FX1JSUihBRERYU0MsIDAs IFgxKToKICAgICAgICAgZ2VuX3NhdHVyYXRlX29wKHRkZXN0LCB0c3JjYSwgdHNyY2IsIHRjZ19n ZW5fYWRkX3RsKTsKQEAgLTkwNiwxNCArOTE3LDM5IEBAIHN0YXRpYyBUaWxlRXhjcCBnZW5fcnJy X29wY29kZShEaXNhc0NvbnRleHQgKmRjLCB1bnNpZ25lZCBvcGV4dCwKICAgICAgICAgbW5lbW9u aWMgPSAiZXhjaCI7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT0VfUlJSKEZET1VCTEVfQURE U1VCLCAwLCBYMCk6CisgICAgICAgIGdlbl9oZWxwZXJfZmRvdWJsZV9hZGRzdWIodGRlc3QsIGNw dV9lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9ncihkYywgZGVz dCksdHNyY2EsIHRzcmNiKTsKKyAgICAgICAgbW5lbW9uaWMgPSAiZmRvdWJsZV9hZGRzdWIiOwor ICAgICAgICBicmVhazsKICAgICBjYXNlIE9FX1JSUihGRE9VQkxFX0FERF9GTEFHUywgMCwgWDAp OgorICAgICAgICBnZW5faGVscGVyX2Zkb3VibGVfYWRkX2ZsYWdzKHRkZXN0LCBjcHVfZW52LCB0 c3JjYSwgdHNyY2IpOworICAgICAgICBtbmVtb25pYyA9ICJmZG91YmxlX2FkZF9mbGFncyI7Cisg ICAgICAgIGJyZWFrOwogICAgIGNhc2UgT0VfUlJSKEZET1VCTEVfTVVMX0ZMQUdTLCAwLCBYMCk6 CisgICAgICAgIGdlbl9oZWxwZXJfZmRvdWJsZV9tdWxfZmxhZ3ModGRlc3QsIGNwdV9lbnYsIHRz cmNhLCB0c3JjYik7CisgICAgICAgIG1uZW1vbmljID0gImZkb3VibGVfbXVsX2ZsYWdzIjsKKyAg ICAgICAgYnJlYWs7CiAgICAgY2FzZSBPRV9SUlIoRkRPVUJMRV9QQUNLMSwgMCwgWDApOgorICAg ICAgICB0Y2dfZ2VuX21vdl9pNjQodGRlc3QsIHRzcmNiKTsKKyAgICAgICAgbW5lbW9uaWMgPSAi ZmRvdWJsZV9wYWNrMSI7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT0VfUlJSKEZET1VCTEVf UEFDSzIsIDAsIFgwKToKKyAgICAgICAgZ2VuX2hlbHBlcl9mZG91YmxlX3BhY2syKHRkZXN0LCBj cHVfZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9ncihkYywgZGVz dCksIHRzcmNhLCB0c3JjYik7CisgICAgICAgIG1uZW1vbmljID0gImZkb3VibGVfcGFjazIiOwor ICAgICAgICBicmVhazsKICAgICBjYXNlIE9FX1JSUihGRE9VQkxFX1NVQl9GTEFHUywgMCwgWDAp OgorICAgICAgICBnZW5faGVscGVyX2Zkb3VibGVfc3ViX2ZsYWdzKHRkZXN0LCBjcHVfZW52LCB0 c3JjYSwgdHNyY2IpOworICAgICAgICBtbmVtb25pYyA9ICJmZG91YmxlX3N1Yl9mbGFncyI7Cisg ICAgICAgIGJyZWFrOwogICAgIGNhc2UgT0VfUlJSKEZET1VCTEVfVU5QQUNLX01BWCwgMCwgWDAp OgorICAgICAgICBnZW5faGVscGVyX2Zkb3VibGVfdW5wYWNrX21heCh0ZGVzdCwgY3B1X2Vudiwg dHNyY2EsIHRzcmNiKTsKKyAgICAgICAgbW5lbW9uaWMgPSAiZmRvdWJsZV91bnBhY2tfbWF4IjsK KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPRV9SUlIoRkRPVUJMRV9VTlBBQ0tfTUlOLCAwLCBY MCk6Ci0gICAgICAgIHJldHVybiBUSUxFR1hfRVhDUF9PUENPREVfVU5JTVBMRU1FTlRFRDsKKyAg ICAgICAgZ2VuX2hlbHBlcl9mZG91YmxlX3VucGFja19taW4odGRlc3QsIGNwdV9lbnYsIHRzcmNh LCB0c3JjYik7CisgICAgICAgIG1uZW1vbmljID0gImZkb3VibGVfdW5wYWNrX21pbiI7CisgICAg ICAgIGJyZWFrOwogICAgIGNhc2UgT0VfUlJSKEZFVENIQURENCwgMCwgWDEpOgogICAgICAgICBn ZW5fYXRvbWljX2V4Y3AoZGMsIGRlc3QsIHRkZXN0LCB0c3JjYSwgdHNyY2IsCiAgICAgICAgICAg ICAgICAgICAgICAgICBUSUxFR1hfRVhDUF9PUENPREVfRkVUQ0hBREQ0KTsKQEAgLTk1NSwxMiAr OTkxLDI1IEBAIHN0YXRpYyBUaWxlRXhjcCBnZW5fcnJyX29wY29kZShEaXNhc0NvbnRleHQgKmRj LCB1bnNpZ25lZCBvcGV4dCwKICAgICAgICAgbW5lbW9uaWMgPSAiZmV0Y2hvciI7CiAgICAgICAg IGJyZWFrOwogICAgIGNhc2UgT0VfUlJSKEZTSU5HTEVfQUREMSwgMCwgWDApOgotICAgIGNhc2Ug T0VfUlJSKEZTSU5HTEVfQUREU1VCMiwgMCwgWDApOgorICAgICAgICBnZW5faGVscGVyX2ZzaW5n bGVfYWRkMSh0ZGVzdCwgY3B1X2VudiwgdHNyY2EsIHRzcmNiKTsKKyAgICAgICAgbW5lbW9uaWMg PSAiZnNpbmdsZV9hZGQxIjsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPRV9SUlIoRlNJTkdM RV9NVUwxLCAwLCBYMCk6CisgICAgICAgIGdlbl9oZWxwZXJfZnNpbmdsZV9tdWwxKHRkZXN0LCBj cHVfZW52LCB0c3JjYSwgdHNyY2IpOworICAgICAgICBtbmVtb25pYyA9ICJmc2luZ2xlX211bDEi OworICAgICAgICBicmVhazsKICAgICBjYXNlIE9FX1JSUihGU0lOR0xFX01VTDIsIDAsIFgwKToK KyAgICAgICAgdGNnX2dlbl9tb3ZfaTY0KHRkZXN0LCB0c3JjYSk7CisgICAgICAgIG1uZW1vbmlj ID0gImZzaW5nbGVfbXVsMiI7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT0VfUlJSKEZTSU5H TEVfUEFDSzIsIDAsIFgwKToKKyAgICAgICAgZ2VuX2hlbHBlcl9mc2luZ2xlX3BhY2syKHRkZXN0 LCBjcHVfZW52LCB0c3JjYSk7CisgICAgICAgIG1uZW1vbmljID0gImZzaW5nbGVfcGFjazIiOwor ICAgICAgICBicmVhazsKICAgICBjYXNlIE9FX1JSUihGU0lOR0xFX1NVQjEsIDAsIFgwKToKLSAg ICAgICAgcmV0dXJuIFRJTEVHWF9FWENQX09QQ09ERV9VTklNUExFTUVOVEVEOworICAgICAgICBn ZW5faGVscGVyX2ZzaW5nbGVfc3ViMSh0ZGVzdCwgY3B1X2VudiwgdHNyY2EsIHRzcmNiKTsKKyAg ICAgICAgbW5lbW9uaWMgPSAiZnNpbmdsZV9zdWIxIjsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz ZSBPRV9SUlIoTU5aLCAwLCBYMCk6CiAgICAgY2FzZSBPRV9SUlIoTU5aLCAwLCBYMSk6CiAgICAg Y2FzZSBPRV9SUlIoTU5aLCA0LCBZMCk6CkBAIC0xNDY0LDYgKzE1MTMsNyBAQCBzdGF0aWMgVGls ZUV4Y3AgZ2VuX3Jycl9vcGNvZGUoRGlzYXNDb250ZXh0ICpkYywgdW5zaWduZWQgb3BleHQsCiAg ICAgICAgIHJldHVybiBUSUxFR1hfRVhDUF9PUENPREVfVU5LTk9XTjsKICAgICB9CiAKK2RvbmUy OgogICAgIHFlbXVfbG9nX21hc2soQ1BVX0xPR19UQl9JTl9BU00sICIlcyAlcywgJXMsICVzIiwg bW5lbW9uaWMsCiAgICAgICAgICAgICAgICAgICByZWdfbmFtZXNbZGVzdF0sIHJlZ19uYW1lc1tz cmNhXSwgcmVnX25hbWVzW3NyY2JdKTsKICAgICByZXR1cm4gVElMRUdYX0VYQ1BfTk9ORTsKLS0g CjEuOS4zCgo= --_73385e28-778d-4164-bf0e-3af1b91969e4_--