He doesn't call you names, is not violent, and doesn't insult you, yet he regularly berates you and yells at you. Berating someone constantly and yelling at them repeatedly does not equate to having a heart of gold or being supportive of you - can you see that? The limit should be no berating, no yelling, and no screaming matches. I would personally set these limits with him, tell him these behaviors are no longer acceptable, and that if he continues, you will leave. Yes, it's an ultimatum, but that's what I would do. A line needs to be drawn.