[PATCH] D136089: [clang] Add MorphOS Target

2022-10-17 Thread Jonathan Schleifer via Phabricator via cfe-commits
js updated this revision to Diff 468226.
js added a reviewer: chandlerc.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136089/new/

https://reviews.llvm.org/D136089

Files:
  clang/lib/Basic/Targets.cpp
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/Basic/Targets/PPC.h
  clang/test/Sema/tls.c


Index: clang/test/Sema/tls.c
===
--- clang/test/Sema/tls.c
+++ clang/test/Sema/tls.c
@@ -19,4 +19,7 @@
 // Haiku does not support TLS.
 // RUN: not %clang_cc1 -triple i586-pc-haiku -fsyntax-only %s
 
+// MorphOS does not support TLS.
+// RUN: not %clang_cc1 -triple ppc-morphos -fsyntax-only %s
+
 __thread int x;
Index: clang/lib/Basic/Targets/PPC.h
===
--- clang/lib/Basic/Targets/PPC.h
+++ clang/lib/Basic/Targets/PPC.h
@@ -522,6 +522,12 @@
   using AIXTargetInfo::AIXTargetInfo;
 };
 
+class LLVM_LIBRARY_VISIBILITY MorphOSPPC32TargetInfo :
+  public MorphOSTargetInfo {
+public:
+  using MorphOSTargetInfo::MorphOSTargetInfo;
+};
+
 } // namespace targets
 } // namespace clang
 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_PPC_H
Index: clang/lib/Basic/Targets/OSTargets.h
===
--- clang/lib/Basic/Targets/OSTargets.h
+++ clang/lib/Basic/Targets/OSTargets.h
@@ -991,6 +991,35 @@
   }
 };
 
+// MorphOS target
+template 
+class LLVM_LIBRARY_VISIBILITY MorphOSTargetInfo : public OSTargetInfo {
+protected:
+  void getOSDefines(const LangOptions , const llvm::Triple ,
+MacroBuilder ) const override {
+Builder.defineMacro("__MORPHOS__");
+Builder.defineMacro("__morphos__");
+Builder.defineMacro("__amigaos");
+Builder.defineMacro("__amigaos__");
+Builder.defineMacro("amigaos");
+Builder.defineMacro("AMIGA");
+Builder.defineMacro("_AMIGA");
+Builder.defineMacro("__AMIGA");
+Builder.defineMacro("__ELF__");
+Builder.defineMacro("_CALL_SYSV");
+Builder.defineMacro("__saveds", "__attribute__((__saveds__))");
+  }
+
+public:
+  MorphOSTargetInfo(const llvm::Triple , const TargetOptions )
+  : OSTargetInfo(Triple, Opts) {
+this->SizeType = TargetInfo::UnsignedInt;
+this->IntPtrType = TargetInfo::SignedLong;
+this->PtrDiffType = TargetInfo::SignedLong;
+this->TLSSupported = false;
+  }
+};
+
 } // namespace targets
 } // namespace clang
 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
Index: clang/lib/Basic/Targets.cpp
===
--- clang/lib/Basic/Targets.cpp
+++ clang/lib/Basic/Targets.cpp
@@ -345,6 +345,8 @@
   return new RTEMSTargetInfo(Triple, Opts);
 case llvm::Triple::AIX:
   return new AIXPPC32TargetInfo(Triple, Opts);
+case llvm::Triple::MorphOS:
+  return new MorphOSTargetInfo(Triple, Opts);
 default:
   return new PPC32TargetInfo(Triple, Opts);
 }


Index: clang/test/Sema/tls.c
===
--- clang/test/Sema/tls.c
+++ clang/test/Sema/tls.c
@@ -19,4 +19,7 @@
 // Haiku does not support TLS.
 // RUN: not %clang_cc1 -triple i586-pc-haiku -fsyntax-only %s
 
+// MorphOS does not support TLS.
+// RUN: not %clang_cc1 -triple ppc-morphos -fsyntax-only %s
+
 __thread int x;
Index: clang/lib/Basic/Targets/PPC.h
===
--- clang/lib/Basic/Targets/PPC.h
+++ clang/lib/Basic/Targets/PPC.h
@@ -522,6 +522,12 @@
   using AIXTargetInfo::AIXTargetInfo;
 };
 
+class LLVM_LIBRARY_VISIBILITY MorphOSPPC32TargetInfo :
+  public MorphOSTargetInfo {
+public:
+  using MorphOSTargetInfo::MorphOSTargetInfo;
+};
+
 } // namespace targets
 } // namespace clang
 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_PPC_H
Index: clang/lib/Basic/Targets/OSTargets.h
===
--- clang/lib/Basic/Targets/OSTargets.h
+++ clang/lib/Basic/Targets/OSTargets.h
@@ -991,6 +991,35 @@
   }
 };
 
+// MorphOS target
+template 
+class LLVM_LIBRARY_VISIBILITY MorphOSTargetInfo : public OSTargetInfo {
+protected:
+  void getOSDefines(const LangOptions , const llvm::Triple ,
+MacroBuilder ) const override {
+Builder.defineMacro("__MORPHOS__");
+Builder.defineMacro("__morphos__");
+Builder.defineMacro("__amigaos");
+Builder.defineMacro("__amigaos__");
+Builder.defineMacro("amigaos");
+Builder.defineMacro("AMIGA");
+Builder.defineMacro("_AMIGA");
+Builder.defineMacro("__AMIGA");
+Builder.defineMacro("__ELF__");
+Builder.defineMacro("_CALL_SYSV");
+Builder.defineMacro("__saveds", "__attribute__((__saveds__))");
+  }
+
+public:
+  MorphOSTargetInfo(const llvm::Triple , const TargetOptions )
+  : OSTargetInfo(Triple, Opts) {
+this->SizeType = TargetInfo::UnsignedInt;
+this->IntPtrType = TargetInfo::SignedLong;
+this->PtrDiffType = TargetInfo::SignedLong;
+this->TLSSupported = 

[PATCH] D136089: [clang] Add MorphOS Target

2022-10-17 Thread Jonathan Schleifer via Phabricator via cfe-commits
js created this revision.
Herald added subscribers: kbarton, nemanjai.
Herald added a project: All.
js requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This adds MorphOS to Target and sets up the required defines.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D136089

Files:
  clang/lib/Basic/Targets.cpp
  clang/lib/Basic/Targets/OSTargets.h
  clang/lib/Basic/Targets/PPC.h


Index: clang/lib/Basic/Targets/PPC.h
===
--- clang/lib/Basic/Targets/PPC.h
+++ clang/lib/Basic/Targets/PPC.h
@@ -522,6 +522,12 @@
   using AIXTargetInfo::AIXTargetInfo;
 };
 
+class LLVM_LIBRARY_VISIBILITY MorphOSPPC32TargetInfo :
+  public MorphOSTargetInfo {
+public:
+  using MorphOSTargetInfo::MorphOSTargetInfo;
+};
+
 } // namespace targets
 } // namespace clang
 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_PPC_H
Index: clang/lib/Basic/Targets/OSTargets.h
===
--- clang/lib/Basic/Targets/OSTargets.h
+++ clang/lib/Basic/Targets/OSTargets.h
@@ -991,6 +991,37 @@
   }
 };
 
+// MorphOS target
+template 
+class LLVM_LIBRARY_VISIBILITY MorphOSTargetInfo : public OSTargetInfo {
+protected:
+  void getOSDefines(const LangOptions , const llvm::Triple ,
+MacroBuilder ) const override {
+Builder.defineMacro("__MORPHOS__");
+Builder.defineMacro("__morphos__");
+Builder.defineMacro("__amigaos");
+Builder.defineMacro("__amigaos__");
+Builder.defineMacro("amigaos");
+Builder.defineMacro("AMIGA");
+Builder.defineMacro("_AMIGA");
+Builder.defineMacro("__AMIGA");
+Builder.defineMacro("__ELF__");
+Builder.defineMacro("_CALL_SYSV");
+Builder.defineMacro("libnix");
+Builder.defineMacro("__libnix");
+Builder.defineMacro("__libnix__");
+Builder.defineMacro("__saveds", "__attribute__((__saveds__))");
+  }
+
+public:
+  MorphOSTargetInfo(const llvm::Triple , const TargetOptions )
+  : OSTargetInfo(Triple, Opts) {
+this->SizeType = TargetInfo::UnsignedInt;
+this->IntPtrType = TargetInfo::SignedLong;
+this->PtrDiffType = TargetInfo::SignedLong;
+  }
+};
+
 } // namespace targets
 } // namespace clang
 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
Index: clang/lib/Basic/Targets.cpp
===
--- clang/lib/Basic/Targets.cpp
+++ clang/lib/Basic/Targets.cpp
@@ -345,6 +345,8 @@
   return new RTEMSTargetInfo(Triple, Opts);
 case llvm::Triple::AIX:
   return new AIXPPC32TargetInfo(Triple, Opts);
+case llvm::Triple::MorphOS:
+  return new MorphOSTargetInfo(Triple, Opts);
 default:
   return new PPC32TargetInfo(Triple, Opts);
 }


Index: clang/lib/Basic/Targets/PPC.h
===
--- clang/lib/Basic/Targets/PPC.h
+++ clang/lib/Basic/Targets/PPC.h
@@ -522,6 +522,12 @@
   using AIXTargetInfo::AIXTargetInfo;
 };
 
+class LLVM_LIBRARY_VISIBILITY MorphOSPPC32TargetInfo :
+  public MorphOSTargetInfo {
+public:
+  using MorphOSTargetInfo::MorphOSTargetInfo;
+};
+
 } // namespace targets
 } // namespace clang
 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_PPC_H
Index: clang/lib/Basic/Targets/OSTargets.h
===
--- clang/lib/Basic/Targets/OSTargets.h
+++ clang/lib/Basic/Targets/OSTargets.h
@@ -991,6 +991,37 @@
   }
 };
 
+// MorphOS target
+template 
+class LLVM_LIBRARY_VISIBILITY MorphOSTargetInfo : public OSTargetInfo {
+protected:
+  void getOSDefines(const LangOptions , const llvm::Triple ,
+MacroBuilder ) const override {
+Builder.defineMacro("__MORPHOS__");
+Builder.defineMacro("__morphos__");
+Builder.defineMacro("__amigaos");
+Builder.defineMacro("__amigaos__");
+Builder.defineMacro("amigaos");
+Builder.defineMacro("AMIGA");
+Builder.defineMacro("_AMIGA");
+Builder.defineMacro("__AMIGA");
+Builder.defineMacro("__ELF__");
+Builder.defineMacro("_CALL_SYSV");
+Builder.defineMacro("libnix");
+Builder.defineMacro("__libnix");
+Builder.defineMacro("__libnix__");
+Builder.defineMacro("__saveds", "__attribute__((__saveds__))");
+  }
+
+public:
+  MorphOSTargetInfo(const llvm::Triple , const TargetOptions )
+  : OSTargetInfo(Triple, Opts) {
+this->SizeType = TargetInfo::UnsignedInt;
+this->IntPtrType = TargetInfo::SignedLong;
+this->PtrDiffType = TargetInfo::SignedLong;
+  }
+};
+
 } // namespace targets
 } // namespace clang
 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_OSTARGETS_H
Index: clang/lib/Basic/Targets.cpp
===
--- clang/lib/Basic/Targets.cpp
+++ clang/lib/Basic/Targets.cpp
@@ -345,6 +345,8 @@
   return new RTEMSTargetInfo(Triple, Opts);
 case llvm::Triple::AIX:
   return new AIXPPC32TargetInfo(Triple, Opts);
+case 

[PATCH] D55869: Convert some ObjC retain/release msgSends to runtime calls

2018-12-20 Thread Jonathan Schleifer via Phabricator via cfe-commits
js added a comment.

In D55869#1337711 , @dexonsmith wrote:

> In D55869#1337706 , @js wrote:
>
> > The ObjFW runtime itself does not contain anything about release, retain or 
> > autorelease - these are all part of ObjFW (as in the framework). As ObjFW 
> > also supports the Apple runtime, as well as mixing with Foundation code, it 
> > so far only provides objc_retain and objc_release when they are missing, to 
> > make ARC work. They just call into the corresponding methods on the object 
> > and do nothing else.
> >
> > How will this change work from the Apple runtime? Will 
> > objc_retain/objc_release call the retain/release on the object if it 
> > implements its own? Should I drop my own retain/release implementation from 
> > my root object if I am compiling against the Apple runtime?
>
>
> Yes, the idea is that the specialized runtime functions are fast paths for 
> the common case, but they still fall back if the object has overridden them.


I am guessing not just overridden, but also a root class providing one? IOW, 
the fast path is used when the class does not have the retain or release method 
at all? In that case, LGTM as is.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55869/new/

https://reviews.llvm.org/D55869



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D55869: Convert some ObjC retain/release msgSends to runtime calls

2018-12-20 Thread Jonathan Schleifer via Phabricator via cfe-commits
js added a comment.

In D55869#1337707 , @dexonsmith wrote:

> In D55869#1337692 , @rjmccall wrote:
>
> > Okay.  That's also presumably true for open-source runtimes that support 
> > ARC; tagging David Chisnall and Jonathan Schleifer to get their input.
>
>
> `shouldUseARCFunctionsForRetainRelease()` returns `false` for the other 
> runtimes.  This seems like the right thing to do until/unless they add 
> support.
>
> Would make sense for the driver to additionally imply 
> `-fno-objc-convert-messages-to-runtime-calls` for other runtimes as a bigger 
> hammer?


We could make it true here (happy to implement it), but the question about how 
this works with multiple root objects with different retain/release 
implementations remains.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55869/new/

https://reviews.llvm.org/D55869



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D55869: Convert some ObjC retain/release msgSends to runtime calls

2018-12-20 Thread Jonathan Schleifer via Phabricator via cfe-commits
js added a comment.

Thanks for tagging me!

The ObjFW runtime itself does not contain anything about release, retain or 
autorelease - these are all part of ObjFW (as in the framework). As ObjFW also 
supports the Apple runtime, as well as mixing with Foundation code, it so far 
only provides objc_retain and objc_release when they are missing, to make ARC 
work. They just call into the corresponding methods on the object and do 
nothing else.

How will this change work from the Apple runtime? Will objc_retain/objc_release 
call the retain/release on the object if it implements its own? Should I drop 
my own retain/release implementation from my root object if I am compiling 
against the Apple runtime?

I'm mostly concerned about mixing ObjFW and Foundation code while using the 
Apple runtime here. ObjFW with the ObjFW runtime and no Foundation is easy to 
change.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55869/new/

https://reviews.llvm.org/D55869



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53696: [Haiku] Support __float128 for Haiku x86 and x86_64

2018-11-21 Thread Jonathan Schleifer via Phabricator via cfe-commits
js requested changes to this revision.
js added inline comments.
This revision now requires changes to proceed.



Comment at: lib/Basic/Targets/OSTargets.h:262
+  Builder.defineMacro("__FLOAT128__");
+  Builder.defineMacro("_GLIBCXX_USE_FLOAT128");
+}

js wrote:
> This seems weird. Shouldn't by stdlibc++ and not by the compiler?
+be defined


Repository:
  rC Clang

https://reviews.llvm.org/D53696



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53696: [Haiku] Support __float128 for Haiku x86 and x86_64

2018-11-21 Thread Jonathan Schleifer via Phabricator via cfe-commits
js added inline comments.



Comment at: lib/Basic/Targets/OSTargets.h:262
+  Builder.defineMacro("__FLOAT128__");
+  Builder.defineMacro("_GLIBCXX_USE_FLOAT128");
+}

This seems weird. Shouldn't by stdlibc++ and not by the compiler?


Repository:
  rC Clang

https://reviews.llvm.org/D53696



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits