From patchwork Mon Jun 22 17:00:50 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 487305 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 523471401B5 for ; Tue, 23 Jun 2015 03:04:50 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=isrJaTvT; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:mime-version:content-type; q=dns; s= default; b=O+i/QmKN5yUZDQ5abhrh6tzsmTLH8u/NOx77qxgPGKJC9THxlg/Ie 07jGRi0/VNBdhnUDh8Pk4GP6w90LRrYe6uJ37CzwOftnai/A+j/PGU6U863EZzb0 XOiNg9VSiLt6Ma0IaYGhvYGknO/y7Ta1YeiWgulBEQ4F1+u+ockOZU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:mime-version:content-type; s= default; bh=JT2s3eNpOk4tnhe2HMCU7c6iSpw=; b=isrJaTvTTX+uDT+WPcUF ETILWyhXxVXNipUKOczmrJgXON8jfy9/8HtUWto8seyRUO/oYxV/439BuCuo4E5G c0DBB39FVh3ja9bqykXqAT1aLNvBmNIMzonh4btH0ZXe31uPsKeFSrpWfvwQDjyw MDBqjCnjkT3MTnDpHf0bOoA= Received: (qmail 50210 invoked by alias); 22 Jun 2015 17:04:34 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 50137 invoked by uid 89); 22 Jun 2015 17:04:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 X-HELO: fencepost.gnu.org Received: from fencepost.gnu.org (HELO fencepost.gnu.org) (208.118.235.10) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 22 Jun 2015 17:04:25 +0000 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49619) by fencepost.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1Z758w-0002pI-8u for gcc-patches@gnu.org; Mon, 22 Jun 2015 13:04:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z758s-0005CA-Ju for gcc-patches@gnu.org; Mon, 22 Jun 2015 13:04:21 -0400 Received: from eu-smtp-delivery-143.mimecast.com ([207.82.80.143]:65176) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z758s-0005C3-Au for gcc-patches@gnu.org; Mon, 22 Jun 2015 13:04:18 -0400 Received: from cam-owa2.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.140]) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-8-kJNmkIyiR0mG7mRTKTzFtQ-1 Received: from e104437-lin ([10.1.2.79]) by cam-owa2.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 22 Jun 2015 18:04:16 +0100 From: Jiong Wang To: gcc-patches Subject: [AArch64][TLSGD Desc][3/3] Implement TLS Global Dynamic Descriptor for tiny model Date: Mon, 22 Jun 2015 18:00:50 +0100 Message-ID: MIME-Version: 1.0 X-MC-Unique: kJNmkIyiR0mG7mRTKTzFtQ-1 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 207.82.80.143 As we have generalized GD Descriptor support for all memory model in the first patch. Support for tiny model is quite straightforward. We just need to output different instruction sequences according on memory model. OK for trunk? 2015-06-22 Jiong Wang gcc/ * config/aarch64/aarch64.md (tlsdesc_): Support tiny model constraint. gcc/testsuite/ * gcc.target/aarch64/tlsdesc_small.c: New. * gcc.target/aarch64/tlsdesc_tiny.c: Ditto. diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 827ae8e..1b4e387 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -4394,9 +4394,19 @@ (clobber (reg:CC CC_REGNUM)) (clobber (match_scratch:DI 1 "=r"))] "TARGET_TLS_DESC" - "adrp\\tx0, %A0\;ldr\\t%1, [x0, #%L0]\;add\\t0, 0, %L0\;.tlsdesccall\\t%0\;blr\\t%1" + { + if (aarch64_cmodel_var == AARCH64_CMODEL_TINY) + return "ldr\t%1, #%A0;adr\t0, %A0;.tlsdesccall\t%0;blr\t%1"; + else if (aarch64_cmodel_var == AARCH64_CMODEL_SMALL) + return "adrp\tx0, %A0;ldr\t%1, [x0, #%L0];add\t0, 0, %L0;.tlsdesccall\t%0;blr\t%1"; + else + /* TBD: Large model to be supported. */ + gcc_unreachable (); + } [(set_attr "type" "call") - (set_attr "length" "16")]) + (set (attr "length") + (if_then_else (match_test "aarch64_cmodel_var == AARCH64_CMODEL_TINY") + (const_int 12) (const_int 16)))]) (define_insn "stack_tie" [(set (mem:BLK (scratch)) diff --git a/gcc/testsuite/gcc.target/aarch64/tlsdesc_small.c b/gcc/testsuite/gcc.target/aarch64/tlsdesc_small.c new file mode 100644 index 0000000..f1429b9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/tlsdesc_small.c @@ -0,0 +1,9 @@ +/* { dg-do run } */ +/* { dg-require-effective-target tls_native } */ +/* { dg-options "-O2 -ftls-model=global-dynamic -fPIC --save-temps" } */ + +#include "tls.c" + +/* { dg-final { scan-assembler-times "adrp\tx0, :tlsdesc:" 2 } } */ +/* { dg-final { scan-assembler-times "tlsdesccall" 2 } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/tlsdesc_tiny.c b/gcc/testsuite/gcc.target/aarch64/tlsdesc_tiny.c new file mode 100644 index 0000000..a107650 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/tlsdesc_tiny.c @@ -0,0 +1,9 @@ +/* { dg-do run } */ +/* { dg-require-effective-target tls_native } */ +/* { dg-options "-O2 -ftls-model=global-dynamic -fPIC -mcmodel=tiny --save-temps" } */ + +#include "tls.c" + +/* { dg-final { scan-assembler-times "adr\tx0, :tlsdesc:" 2 } } */ +/* { dg-final { scan-assembler-times "tlsdesccall" 2 } } */ +/* { dg-final { cleanup-saved-temps } } */